Skip to content

Commit

Permalink
Release v4.0.1 of Boston Dynamics Spot SDK
Browse files Browse the repository at this point in the history
  • Loading branch information
bd-sdk-publisher committed Apr 22, 2024
1 parent 577c45e commit 9d3237d
Show file tree
Hide file tree
Showing 582 changed files with 6,907 additions and 7,643 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.0 of the SDK. Please review the [Release Notes](docs/release_notes.md) to see what has changed.
This is version 4.0.1 of the SDK. Please review the [Release Notes](docs/release_notes.md) to see what has changed.

## Contents

Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.0.0
4.0.1
40 changes: 20 additions & 20 deletions docs/concepts/autonomy/autowalk_service.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ The autowalk service is a way for API clients to specify high level autonomous b

| Term | Description |
| ----- | -----------|
| [Mission](../../../protos/bosdyn/api/proto_reference.html#node) | A `bosdyn.api.mission.Node` proto that fully defines a behavior tree. The structure is infinitely recursive.
| [Mission Service](../../../protos/bosdyn/api/proto_reference.html#missionservice) | A GRPC service that sits on top of the API and can compile & run a mission.
| [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/proto_reference.html#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/proto_reference.html#autowalkservice) | A GRPC service that translates an autowalk into a mission.
| [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:
Expand All @@ -44,12 +44,12 @@ The walk proto defines the autowalk's “go here, do this” format. It is a lin

| Term | Description |
| ----- | -----------|
| [Action](../../../protos/bosdyn/api/proto_reference.html#action) | What the robot should do at a location.
| [Action Wrapper](../../../protos/bosdyn/api/proto_reference.html#actionwrapper) | What the robot should do before and during an action.
| [Action Failure Behavior](../../../protos/bosdyn/api/proto_reference.html#failurebehavior) | What the robot should do if the action fails.
| [Target](../../../protos/bosdyn/api/proto_reference.html#target) | Where the robot should go. Targets are speicified within the context of a graph nav map.
| [Target Failure Behavior](../../../protos/bosdyn/api/proto_reference.html#failurebehavior) | What the robot should do if it fails to reach the target.
| [Battery Monitor](../../../protos/bosdyn/api/proto_reference.html#batterymonitor) | The battery thresholds at which the robot should pause/resume mission execution.
| [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.

## Autowalk Service RPCs
The autowalk service provides [RPCs][autowalkserivce] for clients to convert an autowalk to a mission.
Expand Down Expand Up @@ -80,15 +80,15 @@ As previously mentioned, missions offer more flexibility than autowalks because

[autowalklanguage]: images/autowalk_language_layer.png "Analogy for how autowalks work"
[missions]: missions_service.md "Missions service"
[autowalkserivce]: ../../../protos/bosdyn/api/proto_reference.html#autowalkservice "Autowalk Service RPCs"
[element]: ../../../protos/bosdyn/api/proto_reference.html#element "Element Proto"
[nodeidentifier]: ../../../protos/bosdyn/api/proto_reference.html#nodeidentifier "Node Identifier Proto"
[nodeinfo]: ../../../protos/bosdyn/api/proto_reference.html#nodeinfo "Node Info Proto"
[userdata]: ../../../protos/bosdyn/api/proto_reference.html#userdata "User Data Proto"
[getstateresponse]: ../../../protos/bosdyn/api/proto_reference.html#getstateresponse "Get State Response Proto"
[autowalkserivce]: ../../../protos/bosdyn/api/autowalk/autowalk_service.proto#autowalkservice "Autowalk Service RPCs"
[element]: ../../../protos/bosdyn/api/autowalk/walks.proto#element "Element Proto"
[nodeidentifier]: ../../../protos/bosdyn/api/autowalk/walks.proto#nodeidentifier "Node Identifier Proto"
[nodeinfo]: ../../../protos/bosdyn/api/mission/mission.proto#nodeinfo "Node Info Proto"
[userdata]: ../../../protos/bosdyn/api/mission/util.proto#userdata "User Data Proto"
[getstateresponse]: ../../../protos/bosdyn/api/mission/mission.proto#getstateresponse "Get State Response Proto"
[editautowalk]: ../../../python/examples/edit_autowalk/README.md "Edit Autowalk Example"
[queryautowalkstatus]: https://github.com/boston-dynamics/spot-cpp-sdk/tree/master/cpp/examples/query_autowalk_status "Query Autowalk Status Example"
[failedelement]: ../../../protos/bosdyn/api/proto_reference.html#failedelement "Failed Element Proto"
[node]: ../../../protos/bosdyn/api/proto_reference.html#node "Node Proto"
[action]: ../../../protos/bosdyn/api/proto_reference.html#action "Action Proto"
[loadautowalkresponse]: ../../../protos/bosdyn/api/proto_reference.html#loadautowalkresponse "Load Autowalk Response Proto"
[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"
4 changes: 2 additions & 2 deletions docs/concepts/autonomy/components_of_autonomous_navigation.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ Development Kit License (20191101-BDSDK-SL).
To get started with autonomous navigation, you'll need a grasp of the following concepts:


* [Maps](#Maps)
* [Maps](#maps)
* [Waypoints](#waypoints)
* [Edges](#edges)
* [Localization](#localization)
* [Initialization](#initialization)
* [Missions](#missions)
* [(Advanced) Area Callbacks](#area-callbacks)
* [(Advanced) Area Callbacks](#area_callbacks)


<h2 id="maps">Maps</h2>
Expand Down
2 changes: 1 addition & 1 deletion docs/concepts/autonomy/graphnav_area_callbacks.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ The majority of work for an `AreaCallbackRegionHandlerBase` subclass will be don

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/proto_reference.html#updatecallbackrequest-stage) enum describing the stage of crossing the region.
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:
Expand Down
2 changes: 1 addition & 1 deletion docs/concepts/data_acquisition_thermal_raw.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ All other versions | Big endian
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/main/lib/matplotlib/_cm_listed.py)
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.
Expand Down
2 changes: 1 addition & 1 deletion docs/concepts/developing_api_services.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ with keep_alive:

## Examples
The Spot SDK provides a myriad of examples showing how an off-robot Python gRPC service can be developed.
- [Web Cam Image Service](../../python/examples/web_cam_image_service/README.md)
- [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)
- [Data Acquisition Plugins](../../python/examples/data_acquisition_service/README.md)
2 changes: 1 addition & 1 deletion docs/concepts/robot_services.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ The robot state service also tracks different parameters for the robot and this
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](../../../../proto/public_api/bosdyn/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).
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

Expand Down
2 changes: 1 addition & 1 deletion docs/concepts/writing_services_for_data_acquisition.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ When `use_background_capture_thread` is set to False, the `CameraBaseImageServic

### Example Image Services

There are two SDK examples showing `ImageService` implementations using the helper functions: a [USB web camera](../../python/examples/web_cam_image_service/README.md), and the [Ricoh Theta camera](../../python/examples/ricoh_theta/README.md).
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.
Expand Down
2 changes: 1 addition & 1 deletion docs/html/.buildinfo
Original file line number Diff line number Diff line change
@@ -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: ac03fa0fdc295493ab3b8a8dfe429ea1
config: 4c97b22c7a4ac743f2b4785d9887c8d6
tags: 645f666f9bcd5a90fca523b33c5a78b7
9 changes: 4 additions & 5 deletions docs/html/README.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />

<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Spot SDK &mdash; Spot 4.0.0 documentation</title>
<title>Spot SDK &mdash; Spot 4.0.1 documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/style.css" type="text/css" />
<link rel="shortcut icon" href="_static/bd-favicon.png"/>
Expand Down Expand Up @@ -37,7 +37,7 @@
<img src="_static/bd-official-white.png" class="logo" alt="Logo"/>
</a>
<div class="version">
4.0.0
4.0.1
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
Expand Down Expand Up @@ -194,7 +194,7 @@
<li class="toctree-l4"><a class="reference internal" href="python/examples/spot_cam/README.html#spot-cam-video-core-io-extension-example">Spot Cam Video Core IO Extension Example</a></li>
<li class="toctree-l4"><a class="reference internal" href="python/examples/stitch_front_images/README.html">Stitch Front Images</a></li>
<li class="toctree-l4"><a class="reference internal" href="python/examples/get_depth_plus_visual_image/README.html">Project Depth Data on Visual Images</a></li>
<li class="toctree-l4"><a class="reference internal" href="python/examples/web_cam_image_service/README.html">Web Cam Service</a></li>
<li class="toctree-l4"><a class="reference internal" href="python/examples/service_customization/custom_parameter_image_server/README.html">Custom Parameter Image Server</a></li>
<li class="toctree-l4"><a class="reference internal" href="python/examples/fiducial_follow/README.html">Fiducial Follow</a></li>
<li class="toctree-l4"><a class="reference internal" href="python/examples/spot_detect_and_follow/README.html">Spot Detect and Follow</a></li>
<li class="toctree-l4"><a class="reference internal" href="python/examples/spot_tensorflow_detector/README.html">Tensorflow Detector</a></li>
Expand All @@ -221,7 +221,6 @@
</li>
<li class="toctree-l4"><a class="reference internal" href="python/examples/service_faults/README.html">Faults</a></li>
<li class="toctree-l4"><a class="reference internal" href="python/examples/ricoh_theta/README.html">Ricoh Theta</a></li>
<li class="toctree-l4"><a class="reference internal" href="python/examples/web_cam_image_service/README.html">Web Cam Service</a></li>
<li class="toctree-l4"><a class="reference internal" href="python/examples/service_customization/custom_parameter_image_server/README.html">Custom Parameter Image Service</a></li>
<li class="toctree-l4"><a class="reference internal" href="python/examples/service_customization/custom_parameters_data_acquisition/README.html">Custom Parameter Data Acquisition Plugin</a></li>
<li class="toctree-l4"><a class="reference internal" href="python/examples/get_image/README.html">Test Image Service Implementation with Get Image</a></li>
Expand Down Expand Up @@ -508,7 +507,7 @@ <h1>Spot SDK<a class="headerlink" href="#spot-sdk" title="Permalink to this head
<li><p><a class="reference internal" href="protos/bosdyn/api/README.html"><span class="doc">Spot API protocol definition</span></a>. 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.</p></li>
<li><p><a class="reference external" href="https://github.com/boston-dynamics/spot-sdk">Spot SDK Repository</a>. The GitHub repo where all of the Spot SDK code is hosted.</p></li>
</ul>
<p>This is version 4.0.0 of the SDK. Please review the <a class="reference internal" href="docs/release_notes.html"><span class="doc">Release Notes</span></a> to see what has changed.</p>
<p>This is version 4.0.1 of the SDK. Please review the <a class="reference internal" href="docs/release_notes.html"><span class="doc">Release Notes</span></a> to see what has changed.</p>
<section id="contents">
<h2>Contents<a class="headerlink" href="#contents" title="Permalink to this heading"></a></h2>
<div class="toctree-wrapper compound">
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/html/_images/configure_shot_in_action.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/html/_images/fine_tune_shot_in_action.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/html/_images/hamburger_settings_actions.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/html/_images/input_image_spot_cam_ptz.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 9d3237d

Please sign in to comment.