Spaces:
Running
Running
/** | |
* 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(); | |