Skip to content

Commit

Permalink
Release v4.1.0 of Boston Dynamics Spot SDK
Browse files Browse the repository at this point in the history
  • Loading branch information
bd-sdk-publisher committed Sep 23, 2024
1 parent 665de1b commit f43b7ec
Show file tree
Hide file tree
Showing 855 changed files with 34,073 additions and 16,729 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.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

Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.0.3
4.1.0
19 changes: 12 additions & 7 deletions choreography_protos/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,21 @@
# 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']
except KeyError:
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."""

Expand Down Expand Up @@ -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')
Expand All @@ -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'):
Expand All @@ -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)
Expand All @@ -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,
Expand All @@ -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",
Expand Down
5 changes: 3 additions & 2 deletions docs/concepts/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
113 changes: 49 additions & 64 deletions docs/concepts/about_spot.md
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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 |
8 changes: 4 additions & 4 deletions docs/concepts/arm/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
- [Arm and Gripper Specification](arm_specification.md)
- [Concepts](arm_concepts.md)
- [Services](arm_services.md)
Loading

0 comments on commit f43b7ec

Please sign in to comment.