Skip to content
← OpenK Arm

Project files

5 KB

Machine-translated by Robotheca from the original in Japanese (opens in a new tab). License: Apache-2.0 (opens in a new tab).

English | English | 中文

OpenK on lerobot

An open-source, low-cost AI robot arm, OpenK. It can be built for around 100,000 yen. No sheet metal required. All body parts can be 3D printed. URDF included. It uses DAMIAO motors and runs on the lerobot codebase. Develop and run locally with .venv and uv. It is a general-purpose arm born in the process of developing the toilet-cleaning robot CleanK (opens in a new tab).

DEMO

CAD

Actuators

Actuator configuration:

  • Shoulders ×2: DM-J6006
  • Upper arm, elbow, forearm: DM-J4310
  • Wrist and gripper: STS3215
  • Leader arm: STS3215 on all axes

Core Members

Setup

  • Prerequisites: Python 3.10 / uv (opens in a new tab)

  • First time:

    git clone <repo-url> lerobot_OpenK
    cd lerobot_OpenK
    uv venv .venv --python 3.10
    source .venv/bin/activate
    uv pip install -e .
    
  • For subsequent work, only source .venv/bin/activate is needed.

Testing

  • Regular (no hardware required):

    UV_CACHE_DIR=.uv_cache uv run pytest
    
  • Optional HIL tests with the robot connected:

    OPENK_HIL=1 \
    OPENK_FOLLOWER_PORT=/dev/ttyUSB0 \
    OPENK_LEADER_PORT=/dev/ttyUSB1 \
    UV_CACHE_DIR=.uv_cache uv run pytest test/test_openk_hil.py -q
    

    ※Disable the cameras; only connect, then fetch one observation/action.

Main scripts

  • If the port is unknown, first search for ports:

    uv run lerobot-find-port
    

    with ttyUSB* and confirm before running the following.

  • Teleoperation:

    uv run openk-teleoperate \
      --robot.type=openk-1-alpha_follower --robot.port=<follower-port> --robot.id=follower \
      --teleop.type=openk_leader --teleop.port=<leader-port> --teleop.id=leader \
      --log_file=logs/openk_teleoperate.log
    
    • Stop with Ctrl + C
  • Recording:

    uv run openk-record \
      --robot.type=openk-1-alpha_follower --robot.port=<follower-port> --robot.id=follower \
      --teleop.type=openk_leader --teleop.port=<leader-port> --teleop.id=leader \
      --dataset.repo_id=<user>/<dataset> --dataset.num_episodes=2 --dataset.single_task="Describe task" \
      --log_file=logs/openk_record.log
    
  • Replay:

    uv run lerobot-replay \
      --robot.type=openk-1-alpha_follower --robot.port=<follower-port> --robot.id=follower \
      --dataset.repo_id=<user>/<dataset> --dataset.episode=0
    
  • Calibration:

    uv run lerobot-calibrate --teleop.type=openk_leader --teleop.port=<leader-port> --teleop.id=leader
    
  • Other utilities: lerobot-find-port, lerobot-find-cameras, lerobot-info.

Running from a config file

  • Example YAML bundled:

    • configs/teleop_example.yaml
    • configs/record_example.yaml
  • Example run:

    uv run openk-teleoperate --config_path=config/teleop_example.yaml
    uv run openk-record --config_path=config/record_example.yaml
    
  • Keys written in the YAML are applied as-is; keys left out keep their defaults (to keep cameras unchanged, do not write the key at all).

Logs

  • Teleoperation and recording output go to logs/openk_teleoperate.log / logs/openk_record.log by default (parent directories are created automatically). Override with --log_file.

Notes

  • The pyproject.toml lerobot dependency references the local ../lerobot as editable. If your path differs, adjust it accordingly.

Acknowledgments

Files by @CleanKDev, at commit 26b149e, read from GitHub in your browser. Hardware license: Apache-2.0; software license: Apache-2.0. Robotheca doesn't review code: read it before running it.