Skip to content

PerturbationSampler

SUMMARY

PerturbationSampler generates a structured sweep of robot poses around one or more home poses: single-axis rotations, combined multi-axis rotations, single-axis translations, and mixed translation+rotation moves, built for good SO(3) coverage during hand-eye data collection.

Feed it to DataCollector to drive the sweep automatically.

The Skill

python
from telekinesis.axon import PerturbationSampler

The Code

python
sampler = PerturbationSampler(
    home_poses_deg,           # [x, y, z, rx, ry, rz], or a list of them
    rotation_deg=10.0,
    translation_m=0.05,
    rotation_steps=2,
    translation_steps=1,
)

Initialization

ParameterTypeDescription
home_poses_deglist[float] | list[list[float]]One or more [x, y, z, rx, ry, rz] home poses. A single flat list is treated as one home.
rotation_degfloatMaximum rotation per axis, in degrees. Default 10.0.
translation_mfloatMaximum translation per axis, in meters. Default 0.05.
rotation_stepsintDiscrete levels between 0 and rotation_deg. 2 samples at 50% and 100% (e.g. +/-5 deg and +/-10 deg). Default 2.
translation_stepsintSame, for translation. 1 samples +/-max only. Default 1.

Iteration

Iterating a PerturbationSampler yields (home_pose_deg, [capture_pose_deg, ...]) groups, DataCollector drives to home via joint space at the start of each group and returns there after every capture.