Skip to content

(feature): Add support for koch screwdriver robot and teleoperator #1303

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed

Conversation

jackvial
Copy link
Contributor

@jackvial jackvial commented Jun 15, 2025

What this does

  • Adds a new follower robot koch_screwdriver_follower that replaces the Koch gripper with a screwdriver driven in wheel (velocity) mode.
    • New implementation, dataclass config, docs (.mdx), and package init.
  • Adds a matching teleoperator koch_screwdriver_leader.
    • Maps leader-side gripper motion to follower-side screwdriver velocity (close ⇢ clockwise, open ⇢ counter-clockwise).
  • Wires the new types into the CLI entry-points (calibrate, teleoperate, record) and the make_*_from_config helpers.
  • Dynamixel bug-fix: exposes Present_Position / Goal_Position for XL330-M077 table to avoid 4-byte range error.

Robot on thread-checker board

IMG_4136.MOV

Screwdriver Hardware

The screwdriver STL files and bill of materials can be found at https://github.com/jackvial/koch_robotic_arm_screwdriver


How It Was Tested

Recorded dataset

https://huggingface.co/datasets/jackvial/koch_screwdriver_thread_checker_06_e20

Calibration

# Follower arm
python -m lerobot.calibrate \
  --robot.type=koch_screwdriver_follower \
  --robot.port=/dev/servo_5837053138 \
  --robot.id=koch_screwdriver_follower_testing

# Leader arm
python -m lerobot.calibrate \
  --teleop.type=koch_screwdriver_leader \
  --teleop.port=/dev/servo_585A007782 \
  --teleop.id=koch_screwdriver_leader_testing

Teleoperation

python -m lerobot.teleoperate \
  --robot.type=koch_screwdriver_follower \
  --robot.port=/dev/servo_5837053138 \
  --robot.cameras="{ screwdriver: {type: opencv, index_or_path: /dev/video0, width: 800, height: 600, fps: 30}, side: {type: opencv, index_or_path: /dev/video2, width: 800, height: 600, fps: 30}}" \
  --robot.id=koch_screwdriver_follower_testing \
  --teleop.type=koch_screwdriver_leader \
  --teleop.port=/dev/servo_585A007782 \
  --teleop.id=koch_screwdriver_leader_testing \
  --display_data=true

Recording

python -m lerobot.record \
  --robot.type=koch_screwdriver_follower \
  --robot.port=/dev/servo_5837053138 \
  --robot.cameras="{ screwdriver: {type: opencv, index_or_path: /dev/video0, width: 800, height: 600, fps: 30}, side: {type: opencv, index_or_path: /dev/video2, width: 800, height: 600, fps: 30}, top: {type: opencv, index_or_path: /dev/video6, width: 800, height: 600, fps: 30}}" \
  --robot.id=koch_screwdriver_follower_testing \
  --dataset.repo_id=jackvial/koch_screwdriver_thread_checker_${TEST_NUMBER}_e${EPISODES} \
  --dataset.num_episodes=${EPISODES} \
  --dataset.episode_time_s=30 \
  --dataset.reset_time_s=5 \
  --dataset.push_to_hub=true \
  --dataset.single_task="Move towards the M4x0.7 thread near the top of the red metal thread checker board. Then screw the silver screw into the M4x0.7 thread, then unscrew it again but not all of the way. The screw should still be partially in the thread. Then move back to rest position on the wooden block, with the screwdriver bit facing towards the shoulder servo." \
  --teleop.type=koch_screwdriver_leader \
  --teleop.port=/dev/servo_585A007782 \
  --teleop.id=koch_screwdriver_leader_testing \
  --display_data=true \
  --play_sounds=false

All commands completed successfully and produced the dataset linked above.

TODO

  • Calibration procedure docs
  • Hardware printing and assembly tutorial

@jackvial jackvial marked this pull request as draft June 19, 2025 17:04
@jackvial jackvial changed the title WIP #Hackathon - Add koch screwdriver robot and teleoperator (feature): koch screwdriver robot and teleoperator Jun 19, 2025
@jackvial jackvial changed the title (feature): koch screwdriver robot and teleoperator (feature): add koch screwdriver robot and teleoperator integration Jun 19, 2025
@jackvial jackvial changed the title (feature): add koch screwdriver robot and teleoperator integration (feature): Add support for koch screwdriver robot and teleoperator Jun 22, 2025
jackvial and others added 24 commits June 22, 2025 15:51
…ckvial/lerobot into jv/lerobot-hackathon-2025-screwdriver
…ckvial/lerobot into jv/lerobot-hackathon-2025-screwdriver
…ckvial/lerobot into jv/lerobot-hackathon-2025-screwdriver
…rry pick and remove this commit before review
@jackvial jackvial closed this Jul 16, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant