Solves the hand-eye problem
Solves the hand-eye problem: given a series of gripper-to-base poses read from the robot and the matching target-to-camera poses seen by the camera, it recovers the rigid transform between camera and gripper that stays constant as the arm moves. This is what lets a robot act on what its camera sees. The poses must be genuinely synchronized — a pairing that is off by one sample produces a confident and entirely wrong transform, and nothing in the data reveals it.
Paid test badge: not yet. The checks above are free: we call the tool without paying and read the payment request it sends back. The Verified badge needs paid calls whose answers match the promised output, and nobody can buy a badge.
Endpoint
POST https://medien.halowerk.com/v1/oss-opencv-robot-hand-eye-calibrate
| Category | Everything else |
|---|---|
| Provider host | medien.halowerk.com |
| Networks | eip155:8453 |
| Payment schemes | exact |
| Self-reported calls, 30 days | 0 from 0 payers (the provider's figure, not ours) |
Our checks, last 30 days
| Day | Result | HTTP | Asked | Time |
|---|---|---|---|---|
| 2026-10-25 | valid payment request | 402 | $0.003 | 1222 ms |
Example input (from the provider)
{
"body": {
"gripper_to_base": [
[
[
0.9883261643209938,
-0.011898272648401948,
0.15188753742995567,
-0.1
],
[
0.02965868306845241,
0.9928985120353282,
-0.11520810438800028,
-0.08
],
[
-0.14943813247359922,
0.11836796824316773,
0.981660465057439,
0.9
],
[
0,
0,
0,
1
]
],
[
[
0.9900332889206209,
0.07810864350797697,
0.11718842365337251,
-0.08
],
[
-0.09933466539753062,
0.9771504070221839,
0.18790877123418434,
-0.06
],
[
-0.09983341664682815,
-0.19767681165408388,
0.975170327201816,
1.1
],
[
0,
0,
0,
1
]
],
[
[
0.9838313410528056,
-0.13931586755647624,
-0.11254768504604905,
-0.12
],
[
0.0987123949919223,
0.9461549437949042,
-0.30829642457774376,
-0.07
],
[
0.14943813247359922,
0.29220183329241467,
0.9446090901443596,
1
],
[
0,
0,
0,
1
]
],
[
[
0.9446090901443596,
0.1778630716306493,
-0.27582312188566716,
-0.07
],
[
-0.14276370081881548,
0.9794224989256464,
0.1426537567916039,
-0.1
],
[
0.29552020666133955,
-0.09537450575679464,
0.9505637859220634,
0.8
],
[
0,
0,
0,
1
]
],
[
[
0.9519758849404707,
-0.1430411600614064,
0.27070489655729324,
-0.12
],
[
0.19297506543968274,
0.9667501975957967,
-0.1677935623527856,
-0.06
],
[
-0.23770262642713458,
0.21197472013609336,
0.9479262520960516,
1.2
],
[
0,
0,
0,
1
]
],
[
[
0.9684764438206882,
-0.09024418993859348,
0.23218390113606152,
-0.1
],
[
0.029063012741622204,
0.966640457675885,
0.2544829402426335,
-0.09
],
[
-0.24740395925452294,
-0.2397127693021015,
0.9387912809451863,
0.95
],
[
0,
0,
0,
1
]
]
],
"target_to_camera": [
[
[
0.9063237102581435,
0.33288469091973355,
0.26031733475738106,
0.5204232013800494
],
[
-0.3848000025265721,
0.9047162386004,
0.1828045012254741,
-0.09917100092930925
],
[
-0.17466050005500083,
-0.26585016487491175,
0.9480598080060768,
0.25671815524783104
],
[
0,
0,
0,
1
]
],
[
[
0.9222283210537701,
0.25507749811785274,
0.2905690861056643,
0.5125007539727658
],
[
-0.2343748946366054,
0.9665051811763983,
-0.10457601791643052,
-0.18699677147137095
],
[
-0.3075115162240664,
0.02834086648488894,
0.9511222122716204,
0.008701358136651516
],
[
0,
0,
0,
1
]
],
[
[
0.7565350674425667,
0.3826417258073084,
0.5303206590364696,
0.5596770183022365
],
[
-0.5750082882699702,
0.7754833106415053,
0.2607510370781477,
-0.22671957263743936
],
[
-0.31148059353755847,
-0.5022060778083985,
0.8067024824938839,
0.032405134859663565
],
[
0,
0,
0,
1
]
],
[
[
0.7271227394292543,
0.22383053900494349,
0.6489933833358035,
0.6217218064125126
],
[
-0.24008323494454095,
0.9685694851402569,
-0.0650629906606059,
-0.10884376766944985
],
[
-0.6431582714258297,
-0.1085036509242624,
0.7580068572464532,
0.04431792492295017
],
[
0,
0,
0,
1
]
],
[
[
0.8732504913062019,
0.4636150448634498,
0.14998223097999983,
0.49446971179787524
],
[
-0.4872295048277384,
0.834827570239529,
0.25626224379194174,
-0.2805429704181118
],
[
-0.0064022698157275865,
-0.2968568984278877,
0.9549005146071401,
0.08983366223433209
],
[
0,
0,
0,
1
]
],
[
[
0.9229723671601914,
0.36672150886044824,
0.11677904091843325,
0.4715357954702587
],
[
-0.3459078789556262,
0.9234607788801362,
-0.1660359272763343,
-0.23292273219008508
],
[
-0.16872980985923255,
0.11285178248130816,
0.979180640359918,
0.24271464454929048
],
[
0,
0,
0,
1
]
]
]
},
"bodyType": "json",
"method": "POST",
"type": "http"
}
Promised output schema (from the provider)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"description": "Numeric JSON arrays only. Additionally enforce equal paired dimensions, nondegenerate geometry, maximum 32768 pixels/image, 131072 scalars/array, and 1048576 encoded bytes. No paths or network resources.",
"properties": {
"gripper_to_base": {
"items": {
"items": {
"items": {
"maximum": 1000000000,
"minimum": -1000000000,
"type": "number"
},
"maxItems": 4,
"minItems": 4,
"type": "array"
},
"maxItems": 4,
"minItems": 4,
"type": "array"
},
"maxItems": 32,
"minItems": 3,
"type": "array"
},
"target_to_camera": {
"items": {
"items": {
"items": {
"maximum": 1000000000,
"minimum": -1000000000,
"type": "number"
},
"maxItems": 4,
"minItems": 4,
"type": "array"
},
"maxItems": 4,
"minItems": 4,
"type": "array"
},
"maxItems": 32,
"minItems": 3,
"type": "array"
}
},
"required": [
"gripper_to_base",
"target_to_camera"
],
"type": "object"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"method": {
"enum": [
"POST",
"PUT",
"PATCH"
],
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"additionalProperties": false,
"properties": {
"operation": {
"const": "robot-hand-eye-calibrate"
},
"result": {
"additionalProperties": false,
"properties": {
"camera_to_gripper": {
"items": {
"items": {
"type": "number"
},
"maxItems": 4,
"minItems": 4,
"type": "array"
},
"maxItems": 4,
"minItems": 4,
"type": "array"
},
"pose_count": {
"maximum": 32,
"minimum": 3,
"type": "integer"
},
"warnings": {
"items": {
"maxLength": 1024,
"type": "string"
},
"maxItems": 8,
"minItems": 1,
"type": "array"
}
},
"required": [
"camera_to_gripper",
"pose_count",
"warnings"
],
"type": "object"
},
"runtime_ms": {
"minimum": 0,
"type": "number"
},
"upstream": {
"additionalProperties": false,
"properties": {
"binary_sha256": {
"const": "1fd4eb220f9986baa0ea0492cbcbedf85b868e792cbcac5f69e10d067a2f956c"
},
"components": {
"const": [
"calibrateHandEye"
]
},
"numpy_version": {
"const": "2.5.0"
},
"package_version": {
"const": "4.13.0.92"
},
"project": {
"const": "OpenCV"
},
"version": {
"const": "4.13.0"
}
},
"required": [
"project",
"version",
"package_version",
"binary_sha256",
"numpy_version",
"components"
],
"type": "object"
}
},
"required": [
"operation",
"result",
"upstream",
"runtime_ms"
],
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}