roboplan.roboplan_ext.optimal_ik

Classes

Task

Abstract base class for IK tasks.

FrameTaskOptions

Parameters for FrameTask.

FrameTask

Task to reach a target pose for a specified frame.

ConfigurationTaskOptions

Parameters for ConfigurationTask.

ConfigurationTask

Task to reach a target joint configuration.

Constraints

Abstract base class for IK constraints.

PositionLimit

Constraint to enforce joint position limits.

VelocityLimit

Constraint to enforce joint velocity limits.

Oink

Optimal Inverse Kinematics solver.

Module Contents

class roboplan.roboplan_ext.optimal_ik.Task

Abstract base class for IK tasks.

property gain: float

Task gain for low-pass filtering.

Return type:

float

property weight: Annotated[numpy.typing.NDArray[numpy.float64], dict(shape=None, None, order='F')]

Weight matrix for cost normalization.

Return type:

Annotated[numpy.typing.NDArray[numpy.float64], dict(shape=(None, None), order=’F’)]

property lm_damping: float

Levenberg-Marquardt damping.

Return type:

float

property num_variables: int

Number of optimization variables.

Return type:

int

class roboplan.roboplan_ext.optimal_ik.FrameTaskOptions(position_cost=1.0, orientation_cost=1.0, task_gain=1.0, lm_damping=0.0)

Parameters for FrameTask.

Parameters:
  • position_cost (float)

  • orientation_cost (float)

  • task_gain (float)

  • lm_damping (float)

property position_cost: float

Position cost weight.

Return type:

float

property orientation_cost: float

Orientation cost weight.

Return type:

float

property task_gain: float

Task gain for low-pass filtering.

Return type:

float

property lm_damping: float

Levenberg-Marquardt damping.

Return type:

float

class roboplan.roboplan_ext.optimal_ik.FrameTask(target_pose, num_variables, options=...)

Bases: Task

Task to reach a target pose for a specified frame.

Parameters:
property frame_name: str

Name of the frame to control.

Return type:

str

property frame_id: std::optional<unsigned long>

Index of the frame in the scene’s Pinocchio model.

Return type:

std::optional<unsigned long>

property target_pose: roboplan_ext.core.CartesianConfiguration

Target pose for the frame.

Return type:

roboplan_ext.core.CartesianConfiguration

setTargetFrameTransform(arg, /)

Sets the target transform for this frame task.

Parameters:

arg (Annotated[numpy.typing.NDArray[numpy.float64], dict(shape=(4, 4), order='F')])

Return type:

None

class roboplan.roboplan_ext.optimal_ik.ConfigurationTaskOptions(task_gain=1.0, lm_damping=0.0)

Parameters for ConfigurationTask.

Parameters:
  • task_gain (float)

  • lm_damping (float)

property task_gain: float

Task gain for low-pass filtering.

Return type:

float

property lm_damping: float

Levenberg-Marquardt damping.

Return type:

float

class roboplan.roboplan_ext.optimal_ik.ConfigurationTask(target_q, joint_weights, options=...)

Bases: Task

Task to reach a target joint configuration.

Parameters:
  • target_q (Annotated[numpy.typing.NDArray[numpy.float64], dict(shape=(None, ), order='C')])

  • joint_weights (Annotated[numpy.typing.NDArray[numpy.float64], dict(shape=(None, ), order='C')])

  • options (ConfigurationTaskOptions)

property target_q: Annotated[numpy.typing.NDArray[numpy.float64], dict(shape=None, order='C')]

Target joint configuration.

Return type:

Annotated[numpy.typing.NDArray[numpy.float64], dict(shape=(None, ), order=’C’)]

property joint_weights: Annotated[numpy.typing.NDArray[numpy.float64], dict(shape=None, order='C')]

Weights for each joint in the configuration task.

Return type:

Annotated[numpy.typing.NDArray[numpy.float64], dict(shape=(None, ), order=’C’)]

class roboplan.roboplan_ext.optimal_ik.Constraints

Abstract base class for IK constraints.

class roboplan.roboplan_ext.optimal_ik.PositionLimit(num_variables, gain=1.0)

Bases: Constraints

Constraint to enforce joint position limits.

Parameters:
  • num_variables (int)

  • gain (float)

property config_limit_gain: float

Gain for position limit enforcement.

Return type:

float

class roboplan.roboplan_ext.optimal_ik.VelocityLimit(num_variables, dt, v_max)

Bases: Constraints

Constraint to enforce joint velocity limits.

Parameters:
  • num_variables (int)

  • dt (float)

  • v_max (Annotated[numpy.typing.NDArray[numpy.float64], dict(shape=(None, ), order='C')])

property dt: float

Time step for velocity calculation.

Return type:

float

property v_max: Annotated[numpy.typing.NDArray[numpy.float64], dict(shape=None, order='C')]

Maximum joint velocities.

Return type:

Annotated[numpy.typing.NDArray[numpy.float64], dict(shape=(None, ), order=’C’)]

class roboplan.roboplan_ext.optimal_ik.Oink(num_variables)

Optimal Inverse Kinematics solver.

Parameters:

num_variables (int)

solveIk(tasks, constraints, scene, delta_q, regularization=1e-12)

Solve inverse kinematics for given tasks and constraints.

Solves a QP optimization problem to compute the joint velocity that minimizes weighted task errors while satisfying all constraints. The result is written directly into the provided delta_q buffer.

Parameters:
  • tasks (collections.abc.Sequence[Task]) – List of weighted tasks to optimize for.

  • constraints (collections.abc.Sequence[Constraints]) – List of constraints to satisfy.

  • scene (roboplan_ext.core.Scene) – Scene containing robot model and state.

  • delta_q (Annotated[numpy.typing.NDArray[numpy.float64], dict(shape=(None, ))]) – Pre-allocated numpy array for output (size = num_variables). Must be a contiguous float64 array. Modified in-place.

  • regularization (float) – Tikhonov regularization weight added to the Hessian diagonal. Provides numerical stability. Higher values increase regularization but may reduce task tracking accuracy. Default is 1e-12.

Raises:

RuntimeError – If the QP solver fails to find a solution.

Return type:

None

Example

delta_q = np.zeros(oink.num_variables) oink.solveIk(tasks, constraints, scene, delta_q) # Or with custom regularization: oink.solveIk(tasks, constraints, scene, delta_q, regularization=1e-6)