- Please visit our website for more information about LEAP hand.
 
- Please see the Python API, ROS API, ROS2 API, Useful Tools folders for software specific details.
 
- Connect 5v power to the hand (the dynamixels should light up during boot up.)
 - Connect the Micro USB cable to the hand (Do not use too many USB extensions)
 - Open Dynamixel Wizard and find the correct port using the options button and put that in main.py or ros_example.py. Note, you cannot have Dynamixel wizard open while using the hand's API, the port will be "busy" with the other process.
 - On Ubuntu you can find the hand by ID using 
/dev/serial/by-idThe ID will stay persistent on reboots. - We offically support Python and ROS, but other languages are supported by Dynamixel SDK.
 - To improve latency on Ubuntu try these tips. Configure USB Latency Settings in Ubuntu and the Dynamixel Python SDK and set the Return Delay Time (Control Table Register 9 in Dynamixel Wizard) from 250 µs to 0 µs.
 
- Leap Node allows you to command joint angles in different scalings.
 - You can read position, velocity and current from the hand.
 - Do not query reads too often, going past 90hz for one set of angles or 30hz for all three will slow down the USB communication.
 - The default controller follows the PID control, up to the current limit cap.
 - Other controllers including velocity control or current control are supported as per the motor manual
 - For Lite, keep the current limit around 300ma.
 - For Full, you can raise the current limit up to 550ma.
 - If facing a jittery hand, adjust the PID values down.
 - If the hand is too weak, adjust the PID values up.
 
To build docker images, you can choose between ROS1 and ROS2:
docker compose build leap-hand-ros1
docker commpose up leap-hand-ros1 -d
docker exec -ti leap-hand-ros1 /bin/bash
or
docker compose build leap-hand-ros2
docker compose up leap-hand-ros2 -d
docker exec -ti leap-hand-ros2 /bin/bash
once in the container you can run the example script with:
roslaunch leap_hand example.launch
or
ros2 launch leap_hand launch_leap.py
- If your motor is 90/180/270 Degrees off, the horn is mounted incorrectly on the motor. Remount it.
 - If no motors show up, check that your serial port permissions are correct.
 - If some motors are missing, make sure they are IDed corrrectly and are connected to the U2D2.
 - If you get "overload error" and the motors are flashing red, then they have overloaded (self-collision etc). It should clear on a power cycle. If it happens often, lower the current limits in the control code so that it does not happen as often.
 - If you get "jittery" motors, try lowering the P and D values, either in the roslaunch file or the python file.
 - If you feel the motors are too inaccurate, you can also try raising the P and D values.
 
- MANO to LEAP joint angle mapping.
 - If you have useful tools you feel the community can benefit from, please make a pull request.
 - Please see the code from Bimanual Dexterity for Complex Tasks to use Manus gloves with LEAP Hand.
 - I can also add tools to this upon request. :)
 
- Please contact me at [email protected] for any issues.
 - This code is made available using an MIT License.
 - The CAD files are provided with a CC BY-NC-SA Attribution-NonCommercial-ShareAlike license which allows you to use and build upon our work non-commercially.
 - LEAP Hand is provided as-is and without warranty.
 - If you use LEAP Hand in an academic setting, please cite our paper:
 
@article{shaw2023leaphand,
  title={LEAP Hand: Low-Cost, Efficient, and Anthropomorphic Hand for Robot Learning},
  author={Shaw, Kenneth and Agarwal, Ananye and Pathak, Deepak},
  journal={Robotics: Science and Systems (RSS)},
  year={2023}
}