{"slug":"medien-halowerk-com-v1-oss-opencv-robot-hand-eye-calibrate-f371a4","title":"Solves the hand-eye problem","host":"medien.halowerk.com","method":"POST","resource":"https://medien.halowerk.com/v1/oss-opencv-robot-hand-eye-calibrate","category":"other","description":"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.","price_listed":0.003,"price_asked":0.003,"state":"answering","state_label":"Answering","checks_7d":1,"answered_7d":1,"latency_ms_median":1222,"reported_calls_30d":0,"reported_payers_30d":0,"networks":["eip155:8453"],"badge":"unverified","paid_checks_7d":0,"paid_ok_7d":0,"example_input":{"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"},"output_schema":{"$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"},"history":[{"day":"2026-10-25","reachable":true,"status":402,"valid_402":true,"asked_usdc":0.003,"price_match":true,"latency_ms":1222,"error":null}],"description_full":"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.","last_updated":"2026-10-25T16:43:35.643Z","schemes":["exact"]}