Spaces:
Running
Running
| # Node.js Quick Start Example (Vite) | |
| This example demonstrates the complete workflow of using `@lerobot/node` to control robotics hardware from Node.js applications, using Vite for fast development and building. Follows the same pattern as the web Quick Start guide. | |
| ## What This Example Does | |
| 1. **Find Port**: Discovers and connects to your robot hardware | |
| 2. **Release Motors**: Puts motors in free-movement mode for setup | |
| 3. **Calibrate**: Records motor ranges and sets homing positions | |
| 4. **Teleoperate**: Enables keyboard control of the robot | |
| ## Hardware Requirements | |
| - SO-100 robotic arm with STS3215 servos | |
| - USB connection to your computer | |
| - Compatible with Windows (COM ports), macOS, and Linux (/dev/tty\* ports) | |
| ## Installation | |
| ```bash | |
| # Install dependencies (from project root) | |
| pnpm install | |
| ``` | |
| ## Running the Examples | |
| ### Full Workflow Demo | |
| ```bash | |
| # Complete robot setup workflow (interactive) | |
| pnpm demo:full-workflow | |
| ``` | |
| ### Individual Component Demos | |
| ```bash | |
| # Test port discovery | |
| pnpm demo:find-port | |
| # Test calibration (requires connected robot) | |
| pnpm demo:calibrate | |
| # Test keyboard control (requires calibrated robot) | |
| pnpm demo:teleoperate | |
| ``` | |
| ## Example Usage | |
| The main demo (`src/main.ts`) shows the complete workflow: | |
| ```typescript | |
| import { findPort, connectPort, releaseMotors, calibrate, teleoperate } from "@lerobot/node"; | |
| // 1. Find available robots | |
| const findProcess = await findPort(); | |
| const robots = await findProcess.result; | |
| // 2. Connect to first robot found | |
| const robot = await connectPort(robots[0].path, "so100_follower", "my_robot_arm"); | |
| // 3. Release motors for manual positioning | |
| await releaseMotors(robot); | |
| // 4. Calibrate motor ranges | |
| const calibrationProcess = await calibrate({ | |
| robot, | |
| onProgress: (message) => console.log(message), | |
| }); | |
| // 5. Control robot with keyboard | |
| const teleop = await teleoperate({ | |
| robot, | |
| teleop: { type: "keyboard" }, | |
| }); | |
| ``` | |
| ## CLI Commands | |
| You can also use the CLI directly: | |
| ```bash | |
| # Find available ports | |
| npx lerobot find-port | |
| # Calibrate robot | |
| npx lerobot calibrate --robot.type so100_follower --robot.port /dev/ttyUSB0 --robot.id my_robot | |
| # Control robot | |
| npx lerobot teleoperate --robot.type so100_follower --robot.port /dev/ttyUSB0 --robot.id my_robot | |
| ``` | |
| ## Development | |
| ```bash | |
| # Run with Vite Node (faster development with hot reload) | |
| pnpm dev | |
| # Build with Vite and run compiled version | |
| pnpm build && pnpm start | |
| ``` | |
| ## Safety Notes | |
| ⚠️ **Important Safety Guidelines:** | |
| - Always ensure robot is in a safe position before running examples | |
| - Keep emergency stop accessible (ESC key during teleoperation) | |
| - Start with small movements to test calibration | |
| - Ensure robot has adequate workspace clearance | |
| ## Troubleshooting | |
| **Port Not Found:** | |
| - Check USB connection | |
| - Verify robot is powered on | |
| - Try different USB ports/cables | |
| - On Linux: Check user permissions for serial ports | |
| **Calibration Issues:** | |
| - Ensure motors are released and can move freely | |
| - Move each joint through its full range slowly | |
| - Avoid forcing motors past mechanical limits | |
| **Control Problems:** | |
| - Verify calibration completed successfully | |
| - Check that calibration file was saved | |
| - Restart the teleoperation if motors don't respond | |