> ## Documentation Index
> Fetch the complete documentation index at: https://docs.innate.bot/llms.txt
> Use this file to discover all available pages before exploring further.

# Chessboard calibration (beta)

This calibration is for chess manipulation only (not depth/navigation calibration).

Chess calibration uses top corners `A8` and `H8` with `recalibrate_manual`, then computes `A1` and `H1` automatically and saves all corners to `~/board_calibration.json`.

## Calibration process

<Steps>
  <Step title="Fix board position">
    Put the chessboard in its final position. Do not move it during calibration.
  </Step>

  <Step title="Enable manual arm movement">
    Set the arm to manual/limp mode so you can position the end effector by hand.
  </Step>

  <Step title="Position for A8 and record">
    Move the end effector to the center of `A8` and record that top corner reference.

    <Frame caption="Target pose example: end effector centered on A8">
      <img src="https://mintcdn.com/innateinc/M6z0XunIsu34mN-3/images/main/software/agents/chess-calibration-a8-end-effector.jpg?fit=max&auto=format&n=M6z0XunIsu34mN-3&q=85&s=59e1b2c7d71abee4b9430f04cc199f6a" alt="End effector centered over A8 square for calibration" style={{ maxWidth: "420px", width: "100%", margin: "0 auto", display: "block" }} width="4032" height="3024" data-path="images/main/software/agents/chess-calibration-a8-end-effector.jpg" />
    </Frame>
  </Step>

  <Step title="Position for H8 and record">
    Move the end effector to the center of `H8` and record that second top-corner reference.
  </Step>

  <Step title="Finish and verify">
    Re-enable holding torque. Verify `~/board_calibration.json` contains `top_left`, `top_right`, `bottom_left`, and `bottom_right`.
  </Step>
</Steps>

## 1) Manual triggering

Trigger the skills from the app or CLI.

### App

* Open **Innate Controller App** -> **Skills**
* Run:
  * `arm_utils` with `command=torque_off`
  * `recalibrate_manual` with `corner=A8`
  * `recalibrate_manual` with `corner=H8`
  * `arm_utils` with `command=torque_on`

### CLI (via ROS2 actions)

```bash theme={null}
ros2 action send_goal /execute_skill brain_messages/action/ExecuteSkill \
  '{skill_type: arm_utils, inputs: "{\"command\":\"torque_off\"}"}' --feedback

ros2 action send_goal /execute_skill brain_messages/action/ExecuteSkill \
  '{skill_type: recalibrate_manual, inputs: "{\"corner\":\"A8\"}"}' --feedback

ros2 action send_goal /execute_skill brain_messages/action/ExecuteSkill \
  '{skill_type: recalibrate_manual, inputs: "{\"corner\":\"H8\"}"}' --feedback

ros2 action send_goal /execute_skill brain_messages/action/ExecuteSkill \
  '{skill_type: arm_utils, inputs: "{\"command\":\"torque_on\"}"}' --feedback
```

## 2) Agentic triggering

Run `chess_agent`. It can guide you through calibration and trigger the same skill sequence with you (`torque_off` -> `A8` -> `H8` -> `torque_on`) before play.

If calibration quality drifts during use, rerun the same sequence manually.
