# Perfect LeRobot Setup on NVIDIA Jetson AGX Thor The first thing is flash the Thor to the latest firmware and OS https://docs.nvidia.com/jetson/agx-thor-devkit/user-guide/latest/quick_start.html ISO used: https://developer.nvidia.com/downloads/embedded/L4T/r38_Release_v2.0/release/jetsoninstaller-0.2.0-r38.2-2025-08-22-01-33-29-arm64.iso {%youtube EgMsdcW2A94 %} # Step Steps and Hints Install the packages ``` sudo apt-get update sudo apt-get full-upgrade #reboot here!! Do not skip this step sudo apt-get install build-essential python3-pip python3-venv #gucview for webcam sudo apt-get install guvcview #install uv curl -LsSf https://astral.sh/uv/install.sh | sh #restart your terminal ``` If type c port isn't working, swap them. Mine the right port only works with power, but no data for example. # Installation ``` #Note: our home directory for all the work below is /home/nvidia/robotic #mkdir -p /home/nvidia/robotic #cd /home/nvidia/robotic uv venv venv source venv/bin/activate git clone https://github.com/huggingface/lerobot.git cd lerobot uv pip install -e ".[feetech]" ``` # Calibration NOTE: override permission here before you use the port or setup with these steps ``` sudo chmod 666 /dev/ttyACM0 sudo chmod 666 /dev/ttyACM1 ``` ``` The easy way: ## https://askubuntu.com/questions/112568/how-do-i-allow-a-non-default-user-to-use-serial-device-ttyusb0 sudoedit /etc/udev/rules.d/50-myusb.rules ## Save this text: KERNEL=="ttyUSB[0-9]*",MODE="0666" KERNEL=="ttyACM[0-9]*",MODE="0666" ``` Swap ttyAMC0 and ttyACM1 as needed ``` lerobot-calibrate --teleop.type=so101_leader --teleop.port='/dev/ttyACM0' --teleop.id=ray_leader lerobot-calibrate --robot.type=so101_follower --robot.port='/dev/ttyACM1' --robot.id=ray_arm ``` # Teleoperate it ``` lerobot-teleoperate --robot.type=so101_follower --robot.id=ray_arm --robot.port='/dev/ttyACM1' --teleop.type=so101_leader --teleop.port='/dev/ttyACM0' --teleop.id=ray_leader --display_data=true ``` ## Use Camera ``` #https://github.com/huggingface/lerobot/issues/1675 lerobot-teleoperate --robot.type=so101_follower --robot.id=ray_arm --robot.port='/dev/ttyACM1' --teleop.type=so101_leader --teleop.port='/dev/ttyACM0' --teleop.id=ray_leader --display_data=true --robot.cameras="{wrist.right: {type: opencv, index_or_path: 0, width: 1920, height: 1080, fps: 30, fourcc: 'MJPG'}}" ``` ## One Click Script Teleoperate it with another arm (remember to switch `ttyACM0` and `ttyACM1` as needed). ``` cd /home/nvidia/robotic source venv_robotics/bin/activate lerobot-teleoperate --robot.type=so101_follower --robot.id=ray_arm --robot.port='/dev/ttyACM1' --teleop.type=so101_leader --teleop.port='/dev/ttyACM0' --teleop.id=ray_leader --display_data=true --display_data=true --robot.cameras="{wrist.right: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: 'MJPG'}}" ``` Record a quick session, this may throw (harmless) error about repos not found because we didn't setup huggingface repos for upload. Check here on how to add your token and setup huggingface repos. https://huggingface.co/docs/lerobot/en/getting_started_real_world_robot#record-a-dataset ``` #remove older ones or rename before we capture #rm -rf ~/.cache/huggingface/lerobot/ray cd /home/nvidia/robotic source venv_robotics/bin/activate lerobot-record --robot.type=so101_follower --robot.id=ray_arm --robot.port='/dev/ttyACM1' --teleop.type=so101_leader --teleop.port='/dev/ttyACM0' --teleop.id=ray_leader --display_data=true --display_data=true --robot.cameras="{wrist.right: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: 'MJPG'}}" --dataset.repo_id="ray/test_pickup" --dataset.num_episodes=2 --dataset.single_task="pickup" echo "find dataset here: ~/.cache/huggingface/lerobot/" ``` Replay a quick session, so the robot will repeat your actions ``` cd /home/nvidia/robotic source venv_robotics/bin/activate lerobot-replay \ --robot.type=so101_follower \ --robot.port=/dev/ttyACM1 \ --robot.id=ray_arm \ --dataset.repo_id="ray/test_pickup" \ --dataset.episode=0 ``` Visualize the dataset ``` cd /home/nvidia/robotic source venv_robotics/bin/activate lerobot-dataset-viz --repo-id="ray/test_pickup" --episode-index 0 ``` Download the scripts here https://drive.google.com/drive/folders/1BhWhZQ_vkdPCezXPqxDiyifQEpxn3m6S?usp=sharing # References: https://huggingface.co/docs/lerobot/en/getting_started_real_world_robot https://wiki.seeedstudio.com/lerobot_so100m/ # Known Issues: https://forums.developer.nvidia.com/t/thor-input-lags-and-may-miss-characters/345048/13 Workaround now is to run in another terminal and let it be: ``` nvidia-smi dmon ```