feathersdk.robot.robot Module

exception feathersdk.robot.robot.ActuatorNotFoundError

Bases: Exception

Raised when accessing a non-existent actuator, or when an actuator cannot be found on any CAN endpoint.

class feathersdk.robot.robot.FeatherRobotConfig(*, version, set_atexit_handler=True, set_signal_handlers=True, kill_on_failed_abort=True, skip_find_actuators=False, skip_initialization=False, urdf_path=None, logging_config, comms_manager_config, data_monitor_service_config=None, battery_service_config=None, camera_service_config=None, odometry_service_config=None, neck_system_config=None, torso_system_config=None, navigation_system_config=None, arms_system_config=None, manipulation_system_config=None, custom_actuator_system_configs=<factory>, custom_robot_module_configs=<factory>)

Bases: PyDFrozenBaseModel

Configuration for a full FeatherRobot.

Parameters:
version: str

The version of the Feather Robot (different from the FeatherSDK version).

set_atexit_handler: bool

Whether to set the atexit handler for the robot.

set_signal_handlers: bool

Whether to set the signal handlers for the robot.

kill_on_failed_abort: bool

Whether to kill the process if the robot fails to abort cleanly, to avoid hanging processes.

skip_find_actuators: bool

Whether to skip the finding of actuators. This is useful for debugging purposes, flashing the motor firmware, etc. The robot will not attempt to find any actuators or initialize them.

skip_initialization: bool

Whether to skip the initialization of the robot. This is useful for debugging purposes, flashing the motor firmware, etc. The robot will stop initialization after finding all motors, but not initializing them.

urdf_path: Path | None

The path to the URDF model for the robot, or None to not load a model. If not loaded, any kinematics-related functionality will not be available.

logging_config: LoggingConfig | None

The configuration for logging.

comms_manager_config: CommsManagerConfig | None

The configuration for the comms manager.

data_monitor_service_config: DataMonitorServiceConfig | None

The configuration for the data monitor service, or None to disable

battery_service_config: BatteryServiceConfig | None

The configuration for the battery service, or None to disable

camera_service_config: ZedCameraServiceConfig | None

The configuration for the camera service, or None to disable

odometry_service_config: Annotated[IMUOdometryServiceConfig | WheelOdometryServiceConfig, FieldInfo(annotation=NoneType, required=True, discriminator='odometry_source')] | None

IMU or wheel-encoder odometry, or None to disable. IMU requires a camera service; wheel requires navigation.

neck_system_config: TwoDOFRobstrideNeckSystemConfig | None

The configuration for the neck system, or None to disable

torso_system_config: LinearEZMotionTorsoSystemConfig | None

The configuration for the torso system, or None to disable

navigation_system_config: ThreeWheelHolonomicRobstrideNavigationSystemConfig | None

The configuration for the navigation system, or None to disable

arms_system_config: ArmsSystemConfig | None

The configuration for the arms system, or None to disable

manipulation_system_config: ManipulationSystemConfig | None

The configuration for the manipulation system, or None to disable

custom_actuator_system_configs: List[ActuatorSystemConfig]

Allows users to add custom actuator systems to the robot.

custom_robot_module_configs: List[RobotModuleConfig]

Allows users to add custom robot modules to the robot.

model_config: ClassVar[ConfigDict] = {'frozen': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class feathersdk.robot.robot.FeatherRobot(config, *args, **kwargs)

Bases: Abortable, Configurable[FeatherRobotConfig]

A Feather robot.

Parameters:
  • config (FeatherRobotConfig) – The configuration for the robot.

  • _client (Optional["FeatherClient"] = None) – Do not set manually! Only used internally by the FeatherClient. Initializes the robot instance assuming it is just meant for data storage and API interfacing instead of controlling the physical robot.

data_monitor_service: DataMonitorService | None

Manages the data monitoring and robot telemetry gathering, if using.

battery_service: BatteryService | None

Manages the battery state and detects power events like hitting the estop, if using.

camera_service: ZedCameraService | None

Manages the ZED camera, if using.

odometry_service: IMUOdometryService | WheelOdometryService | None

Dead-reckons base pose from the ZED IMU or wheel encoders, if using. Only one source can be enabled.

neck_system: TwoDOFRobstrideNeckSystem | None

Manages the neck, if using.

torso_system: LinearEZMotionTorsoSystem | None

Manages the torso lift, if using.

navigation_system: ThreeWheelHolonomicRobstrideNavigationSystem | None

Manages the navigation, if using.

arms_system: ArmsSystem | None

Manages the arms, if using.

manipulation_system: ManipulationSystem | None

Manages the manipulation, if using.

global_telemetry: FeatherTelemetry

Stores all telemetry data for the robot.

custom_actuator_systems: List[ActuatorSystem[TActuatorSystemConfig, TActuator]]

Allows users to add custom actuator systems to the robot.

custom_robot_modules: List[RobotModule[TRobotModuleConfig]]

Allows users to add custom robot modules to the robot.

modules: Dict[str, RobotModule[TRobotModuleConfig]]

Dictionary of module name to module.

actuator_systems: Dict[str, ActuatorSystem[TActuatorSystemConfig, TActuator]]

Dictionary of actuator system name to actuator system.

actuators_by_id: Dict[int, Actuator[TActuatorConfig, TActuatorTelemetry, TTelemetryParamCode]]

Dictionary of actuator integer ID to actuator.

actuators_by_name: Dict[str, Actuator[TActuatorConfig, TActuatorTelemetry, TTelemetryParamCode]]

Dictionary of actuator name to actuator.

comms_manager: CommsManager

Handles lower-level communication within the robot.