/** * Port Discovery Demo * * Demonstrates how to find and connect to robot hardware programmatically */ import { findPort, connectPort } from "@lerobot/node"; import type { RobotConnection, DiscoveredPort } from "@lerobot/node"; async function demoFindPort() { console.log("šŸ” Port Discovery Demo"); console.log("======================\n"); try { // Demo 1: Basic port discovery console.log("šŸ“‹ Demo 1: Basic robot discovery"); console.log("Looking for connected robots...\n"); const findProcess = await findPort({ onMessage: (message) => console.log(` šŸ“” ${message}`), }); const discoveredPorts = await findProcess.result; if (discoveredPorts.length === 0) { console.log("āŒ No robots found."); console.log("\nšŸ”§ Make sure your robot is:"); console.log(" - Connected via USB"); console.log(" - Powered on"); console.log(" - Using a working USB cable"); return; } console.log(`\nāœ… Found ${discoveredPorts.length} robot port(s):`); discoveredPorts.forEach((port, index) => { console.log(` ${index + 1}. ${port.robotType} on ${port.path}`); console.log(` Port: ${port.path}`); console.log(` Type: ${port.robotType}`); }); // Demo 2: Connect to discovered robot console.log("\nšŸ”Œ Demo 2: Connecting to discovered robot"); const robot = await connectPort( discoveredPorts[0].path, "so100_follower", "demo_robot" ); console.log( `āœ… Connected to robot: ${robot.robotType} (ID: ${robot.robotId})` ); console.log(` Port: ${robot.port.path}`); console.log(` Connected: ${robot.isConnected ? "āœ…" : "āŒ"}`); console.log(` Baudrate: ${robot.port.baudRate}`); // Demo 3: Connection details console.log("\nšŸ”Œ Demo 3: Connection details"); console.log("Robot connection properties:"); console.log(` Name: ${robot.name}`); console.log(` Type: ${robot.robotType}`); console.log(` ID: ${robot.robotId}`); console.log(` Port: ${robot.port.path}`); console.log(` Serial: ${robot.serialNumber}`); console.log(` Connected: ${robot.isConnected ? "āœ…" : "āŒ"}`); // Demo 4: Silent discovery (no progress messages) console.log("\n🤫 Demo 4: Silent discovery"); console.log("Finding robots without progress messages..."); const silentProcess = await findPort(); // No onMessage callback const silentRobots = await silentProcess.result; console.log(`Found ${silentRobots.length} robot(s) silently`); console.log("\nšŸŽ‰ Port discovery demo completed!"); console.log("\nā„¹ļø Note: For interactive port discovery, use the CLI:"); console.log(" npx lerobot find-port"); } catch (error) { console.error("\nāŒ Port discovery failed:", error.message); console.log("\nšŸ”§ Troubleshooting:"); console.log("- Check USB connections"); console.log("- Verify robot is powered on"); console.log("- Try different USB ports/cables"); console.log("- On Linux: Check serial port permissions"); console.log("- For interactive port discovery, use: npx lerobot find-port"); process.exit(1); } } demoFindPort();