robokudo.descriptors.analysis_engines.stretch_demo

Analysis engine answering perception queries for the Stretch robot.

Localizes objects standing on the dominant plane within the apartment demo’s second shelf layer, in view of the Stretch’s RealSense, and reports their poses in response to a Query, so a plan can correct an object’s pose before grasping it.

Note

The pipeline localizes but does not recognize: it attaches no Classification, so every reported object designator has an empty type and the caller decides what it asked for. Adding a classifying annotator (for example ClipAnnotator or SimpleYoloAnnotator) before GenerateQueryResult fills that field in without any other change.

Attributes

CAMERA_CONFIG_NAME

Camera configuration this engine reads from.

TARGET_SHELF_LAYER_MIN_WORLD_Z

Lower world-frame height bound of the crop, in metres.

TARGET_SHELF_LAYER_MAX_WORLD_Z

Upper world-frame height bound of the crop, in metres.

TARGET_SHELF_MIN_WORLD_X

TARGET_SHELF_MAX_WORLD_X

TARGET_SHELF_MIN_WORLD_Y

TARGET_SHELF_MAX_WORLD_Y

World-frame lateral bounds of the crop, in metres.

Classes

AnalysisEngine

Query-driven tabletop localization for the Stretch.

Module Contents

robokudo.descriptors.analysis_engines.stretch_demo.CAMERA_CONFIG_NAME = 'realsense'

Camera configuration this engine reads from.

The Stretch carries a RealSense D435i publishing on the stock realsense2_camera topics, and its colour frame is named camera_color_optical_frame, so the shared RealSense config applies unchanged. Pass overrides to create_descriptor() if a particular robot publishes elsewhere.

robokudo.descriptors.analysis_engines.stretch_demo.TARGET_SHELF_LAYER_MIN_WORLD_Z = 0.4565

Lower world-frame height bound of the crop, in metres.

The apartment demo’s shelf has layers at world heights 0.283m, 0.63m, 1.265m and 1.613m (see experiments.real_stretch_apartment_demo.demo); this engine targets the second layer at 0.63m. The bound is the midpoint between that layer and the one below it, so the crop keeps whatever sits on the target layer while excluding its neighbours.

robokudo.descriptors.analysis_engines.stretch_demo.TARGET_SHELF_LAYER_MAX_WORLD_Z = 0.9475

Upper world-frame height bound of the crop, in metres.

The midpoint between the target layer (0.63m) and the one above it (1.265m).

robokudo.descriptors.analysis_engines.stretch_demo.TARGET_SHELF_MIN_WORLD_X = 0.4
robokudo.descriptors.analysis_engines.stretch_demo.TARGET_SHELF_MAX_WORLD_X = 1.35
robokudo.descriptors.analysis_engines.stretch_demo.TARGET_SHELF_MIN_WORLD_Y = -0.35
robokudo.descriptors.analysis_engines.stretch_demo.TARGET_SHELF_MAX_WORLD_Y = 0.05

World-frame lateral bounds of the crop, in metres.

The shelf (experiments.real_stretch_apartment_demo.demo) is a 0.305m x 0.85m footprint centred at world (0.88, -0.17) with a -90 degree yaw, which rotates its outer footprint to world X in [0.455, 1.305] and world Y in [-0.3225, -0.0175]. These bounds add roughly 5cm of margin on every side of that footprint, since the height bound alone left the shelf’s own case (side walls, the layer’s front lip) and, without a lateral bound at all, the rest of the room in view as further untyped candidates.

class robokudo.descriptors.analysis_engines.stretch_demo.AnalysisEngine

Bases: robokudo.analysis_engine.AnalysisEngineInterface

Query-driven tabletop localization for the Stretch.

name() str

Get the name of the analysis engine.

Returns:

The name identifier of this analysis engine

implementation() robokudo.pipeline.Pipeline

Build the pipeline that answers a query with the poses of the objects in view.

The pipeline waits for a query, reads a frame, isolates the dominant plane, treats what stands on it as objects, estimates a pose per object from its bounding box, and replies.

Returns:

The configured pipeline for Stretch perception