Skip to content

Checks_ReadReachTrace

GET
/v1/accounts/{account}/checks/{check}/results/{result}:readReachTrace
curl --request GET \
--url https://junction-api.qualiastudios.dev/v1/accounts/example/checks/example/results/example:readReachTrace \
--header 'X-API-Key: <X-API-Key>'

Read one result’s bounded sampled solver joint trace. The key must still be current for the episode’s target robot and settings (or be the key ReadReachTracesRequest.expected_key also admits); a stale key is FAILED_PRECONDITION, and a trace that could not be read just now is UNAVAILABLE. max_frames is at most 512 (0 means 512).

account
required
string

The account id.

check
required
string

The check id.

result
required
string

The result id.

expectedKey
string

The key from CheckResult.reach.trace. A stale trace is refused.

maxFrames
integer format: int32

At most 512 samples. 0 means the maximum.

dataset
string

Current dataset scope whose settings and pose/calibration identity must still produce expected_key; this prevents reading an old shared result after placement changes in an upload or any member of a merged dataset.

OK

Media type application/json

A bounded sampled solver posture trace for one episode.

object
key

The current reach key this trace belongs to.

string
robot

The target robot whose URDF joints appear in each frame.

string
configDigest

Robot model digest the solver used.

string
poseSource

Where the source hand poses were recorded.

string format: enum
Allowed values: POSES_AT_UNSPECIFIED ROOT TCP
calibrationDigest

Calibration digest already applied to TCP channels, empty at root.

string
placementDigest

Digest of the fixed-base placement settings.

string
frameCount

Number of frames in the original take.

integer format: int32
sampleEvery

Number of original input rows between retained solver frames.

integer format: int32
fps

Source take’s frames per second.

number format: double
jointNames

Actuated URDF joints in the exact order used by each joint_positions row.

Array<string>
homeMidpointM

Mean of both hand positions at solver home, in fixed-base metres.

Array<number>
frames

Bounded samples with original row indices and reach flags.

Array<object>

One frame of a solver posture trace.

object
index

Index in the original take, before the trace’s bounded stride.

integer format: int32
seconds

Seconds from the start of the take.

number format: double
jointPositions

One position per response joint_names, in URDF joint order.

Array<number>
reachable

Whether every targeted hand pose in this frame met the reach tolerance.

boolean
valid

False means the frame must not be replayed as a solved posture.

boolean
diagnostics

Local measured causes at this exact sampled row, never interpolated.

object
sides

Only hands that missed their target in this row.

Array<object>

Factual diagnostics for one missed hand at one sampled posture.

object
side

Configured hand side.

string format: enum
Allowed values: SIDE_UNSPECIFIED SIDE_LEFT SIDE_RIGHT
heldJoints

Locally limiting joints, with actual URDF attribution.

Array<object>

A finite active joint bound whose outward differential reduces target error. This is local constraint evidence, not proof that every IK branch fails.

object
joint

Actual URDF joint and the link it turns.

string
childLink

Actual URDF child link.

string
bound

“lower” or “upper”.

string
position

Measured position in radians (metres for prismatic).

number format: double
limit

The active URDF limit, in the same native joint unit.

number format: double
outwardErrorDecrease

Decrease of tolerance-normalized squared error per native joint unit in the direction beyond this bound. Positive, measured from actual FK.

number format: double
beyondChainReach

Present only when a finite fixed-anchor outer bound proves the excess.

object
distanceMeters

Target distance from the shoulder, metres.

number format: double
radiusMeters

Conservative chain radius, metres.

number format: double
excessMeters

Target distance minus radius minus the existing position tolerance.

number format: double
residualSolverMiss

Solver left a miss without either of the measured causes above.

boolean
armBounds

Conservative URDF bounds, carried once rather than repeated in every row.

Array<object>

A conservative outer sphere derived from the configured URDF chain/tool.

object
side

Configured arm side.

string format: enum
Allowed values: SIDE_UNSPECIFIED SIDE_LEFT SIDE_RIGHT
shoulderJoint

Actual first independent arm joint.

string
parentLink

Parent link containing the shoulder origin.

string
shoulderOriginMeters

Three metres in that parent link’s frame.

Array<number>
radiusMeters

Sum of downstream translation lengths and tool offset; finite prismatic excursion is included. Inside this sphere does not establish reachability.

number format: double
baseFixedAnchor

Only a base-fixed anchor can prove global beyond-chain reach.

boolean
gaps

Every missing-pose interval. Never interpolate a posture across one.

Array<object>

A gap in the original take’s pose coverage, independent of sampled postures.

object
startFrame

First original input row, zero based.

integer format: int32
frameCount

Consecutive missing-pose rows in this interval.

integer format: int32
startSeconds

Start on the original take’s clock, derived from its FPS.

number format: double
durationSeconds

Length on that clock; the end is exclusive.

number format: double
Example
{
"poseSource": "POSES_AT_UNSPECIFIED",
"frames": [
{
"diagnostics": {
"sides": [
{
"side": "SIDE_UNSPECIFIED"
}
]
}
}
],
"armBounds": [
{
"side": "SIDE_UNSPECIFIED"
}
]
}

Default error response

Media type application/json
One of:
API error

A refusal from the API itself.

object
code
required

The gRPC code name in upper case, e.g. NOT_FOUND.

string
message
required
string
retryable
required

Whether the same call may succeed if retried.

boolean
details
required

Empty, except when a dataset copy or move is refused: then one google.rpc.ErrorInfo with the refusal’s reason code, its domain and, in metadata, the datasets it names.

Array<object>
object
Example generated
{
"code": "example",
"message": "example",
"retryable": true,
"details": [
{}
]
}