Feather SDK Documentation¶
Documentation for SDK version 0.1.7.
Installation¶
The Feather SDK is a Python package (Python 3.9–3.14) for controlling Feather robots. Install it from PyPI:
pip install feathersdk
1. Set up your robot config if it doesn’t exist¶
Robot behavior is driven by a Python configuration file. The SDK ships starter configs for each supported robot revision — copy one into a working directory with the bundled helper. You only need to do this once:
python3 -m feathersdk.installation.copy_configs /feathersys/configs v0.5.1
Supported revisions are v0.4.0, v0.4.0_o-shaft, and v0.5.1. This creates
/feathersys/configs/ containing robot_conf.py (the entry point) alongside the
systems, services, and infra config modules it imports. Edit robot_conf.py
to match your hardware.
Note
The destination directory must not already exist (the copy will not overwrite it)
and must be writable — copying into a system path such as /feathersys/ may
require elevated permissions. To copy elsewhere, pass any path you own, e.g.
python3 -m feathersdk.installation.copy_configs ~/feather_configs v0.5.1, and use
that path in the next step.
2. Initialize and control the robot¶
initialize_feather_system loads your config file and returns a ready-to-use
FeatherRobot. Point it at the robot_conf.py you copied above:
from feathersdk.robot.robot import initialize_feather_system, FeatherRobot
from feathersdk.utils.feathertypes import cast
robot = cast(FeatherRobot, initialize_feather_system('/feathersys/configs/robot_conf.py'))
# Access the platforms and services enabled in your config
nav = robot.navigation_system
neck = robot.neck_system
torso = robot.torso_system
manipulation = robot.manipulation_system
data_monitoring = robot.data_monitor_service
Anything not present in your config is None, so only the systems and services
you enabled are available.
More about configuration
Configs are executable Python. Running robot_conf.py builds a typed
FeatherRobotConfig object and hands it to the
SDK, so config values can be any Python expression and are validated when loaded.
File layout. copy_configs lays down a small tree. robot_conf.py is the
entry point; it imports config objects built by the modules under infra/,
services/, and systems/ and assembles them into one FeatherRobotConfig:
configs/
├── robot_conf.py # entry point — assembles and exports the full config
├── infra/ # comms_manager, data_monitor_service, logging
├── services/ # battery_service
└── systems/ # navigation, neck, torso, arms, manipulation
How it’s loaded. The last line of robot_conf.py calls export_config(...).
When you call initialize_feather_system('.../robot_conf.py') (or the lower-level
load_configs), the SDK executes the file and reads back whatever you exported.
Call export_config only once, in robot_conf.py; the other modules just build
and return their config objects.
Enabling/disabling a system. Every system and service field is optional — set
it to None to disable it (that robot.<name> attribute is then None at
runtime). The shipped v0.5.1 config, for instance, sets
manipulation_system_config=None and battery_service_config=None.
Editing safely. Leave version and set_root_feather_path(Path("/feathersys"))
alone unless the hardware itself changed. Everything else — motor limits,
tolerances, rates, safe-stop policy — is meant to be tuned. Each field is
documented on its config class in the API Reference:
FeatherRobotConfig,
CommsManagerConfig, and the per-system
*Config classes (e.g.
ThreeWheelSwerveSystemConfig).
Package Overview¶
robot— robot control and platform systems (manipulation, navigation, neck, torso)configs— Python-based configuration loading (load_configs,export_config)comms— communication layer (CAN, network interfaces)ipc— client/server IPC for driving a robot across processesutils— shared helpers and type utilities
API Reference¶
Release Notes¶
Release Notes