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 interfaces.

class feathersdk.robot.robot.FeatherRobotConfig(*, version, set_atexit_handler=True, set_signal_handlers=True, enable_cans_during_find=False, kill_on_failed_abort=True, skip_initialization=False, logging_config, comms_manager_config, data_monitor_service_config, battery_service_config, neck_system_config, torso_system_config, navigation_system_config, arms_system_config, manipulation_system_config)

Bases: PyDFrozenBaseModel

Configuration for a full FeatherRobot.

Parameters:
  • version (Version)

  • set_atexit_handler (bool)

  • set_signal_handlers (bool)

  • enable_cans_during_find (bool)

  • kill_on_failed_abort (bool)

  • skip_initialization (bool)

  • logging_config (LoggingConfig | None)

  • comms_manager_config (CommsManagerConfig | None)

  • data_monitor_service_config (DataMonitorServiceConfig | None)

  • battery_service_config (BatteryServiceConfig | None)

  • neck_system_config (NeckSystemConfig | None)

  • torso_system_config (TorsoSystemConfig | None)

  • navigation_system_config (NavigationSystemConfig | None)

  • arms_system_config (ArmsSystemConfig | None)

  • manipulation_system_config (ManipulationSystemConfig | None)

version: Version

The version of the Feather system.

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.

enable_cans_during_find: bool

Whether to enable all CAN interfaces when attempting to find motors. Requires sudo privileges.

kill_on_failed_abort: bool

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

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.

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

neck_system_config: NeckSystemConfig | None

The configuration for the neck system, or None to disable

torso_system_config: TorsoSystemConfig | None

The configuration for the torso system, or None to disable

navigation_system_config: NavigationSystemConfig | 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

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.

comms_manager: Type[_CommsManager]

Handles lower-level communication within the 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.

neck_system: NeckSystem | None

Manages the neck, if using.

torso_system: TorsoSystem | None

Manages the torso lift, if using.

navigation_system: NavigationSystem | None

Manages the navigation, if using.

arms_system: ArmsSystem | None

Manages the arms, if using.

manipulation_system: ManipulationSystem | None

Manages the manipulation, if using.

modules: dict[str, RobotModule[TRobotModuleConfig]]

Dictionary of module name to module.

actuator_systems: dict[str, ActuatorSystem[TActuatorSystemConfig]]

Dictionary of actuator system name to actuator system.

actuators_by_id: dict[int, Actuator[TActuatorConfig]]

Dictionary of actuator integer ID to actuator.

message_router: MessageRouter

Routes socket result messages to the appropriate actuator handlers.

feathersdk.robot.robot.initialize_feather_system(config_or_path, ros_node=None)

Initialize the feather system from a config file.

Parameters:
  • config_or_path (FeatherRobotConfig | Path | str) – The configuration for the robot, or the path to a config file.

  • ros_node (Any | None) – If using ROS, pass the ROS node here. This is mainly used to set the ROS logger for logging.

Return type:

FeatherRobot