HJCD-IK#

Hybrid Jacobian Coordinate Descent Inverse Kinematics — a GPU-accelerated, batched inverse kinematics solver that generates many candidate solutions in parallel for a 6-DOF end-effector target, with optional collision avoidance. Each call solves one target: coarse search uses one block per candidate, then Levenberg–Marquardt refinement uses one warp per candidate.

Built on GRiD (robot kinematics codegen) and GLASS (single-block / warp-scoped CUDA linear algebra).

Paper: arXiv:2510.07514 (IROS 2026). Project page: a2r-lab.org/HJCD-IK.

Get started

Install the extension and run your first batched IK solve.

Installation & Quickstart
How it works

The three-phase algorithm: coordinate-descent init, Jacobian polish, collision filter.

The HJCD-IK algorithm
Examples & results

Runnable examples, benchmark results vs. cuRobo / PyRoki / IKFlow, and how to reproduce.

Examples & Results
Custom robots

Generate kinematics for a new URDF / end-effector frame.

Custom robot
API reference

The Python API and the Doxygen-generated C++/CUDA reference.

API Reference
Developer guide

Contributing, the codegen/build discipline, and how to edit these docs.

Contributing & editing the docs

Quick start#

import hjcdik

solver = hjcdik.Solver()
target = solver.sample_targets(1, seed=0)[0]        # [x, y, z, qw, qx, qy, qz]
out = solver.solve(target, batch_size=2000, num_solutions=4, collision=None)
r = out[0]
print(r.count, "candidates")
if r.count:
    print("candidate position errors (mm):", r.pos_err_mm)
    print("candidate orientation errors (rad):", r.ori_err_rad)
    print("accurate candidates:", r.q[r.ok(pos_mm=5, ori_rad=0.001)])