Turn your Waveshare UGV robot into a NANDA-compliant A2A agent with AGNTCY Identity.
# Set your UGV's IP
export UGV_URL=http://192.168.0.100:5000
# Run the agent (auto-generates DID)
bun run start# Set OAuth for AGNTCY badge publishing
export OAUTH_CLIENT_ID=your-client-id
export OAUTH_CLIENT_SECRET=your-secret
export OAUTH_ISSUER_URL=https://your-idp.okta.com
# Run - will register on AGNTCY network
bun run starthttp://localhost:3010/.well-known/agent.json # Agent discovery
http://localhost:3010/a2a # JSON-RPC endpoint
| Skill | Description |
|---|---|
move_robot |
Differential drive control |
stop_robot |
Emergency stop |
set_camera |
Pan-tilt camera |
capture_image |
Take photo (base64) |
get_sensors |
Battery, distance, IMU |
// From any NANDA client
const response = await fetch('http://robot-ip:3010/a2a', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
method: 'skills/call',
params: { skill: 'capture_image', input: {} },
id: 1,
}),
});
const { result } = await response.json();
console.log(result.image); // Base64 JPEG- Waveshare WAVE ROVER
- Waveshare UGV Rover
- Waveshare UGV Beast
- RaspRover
- Any robot running the Waveshare Flask API
On startup, the agent:
- Generates a DID (Decentralized Identifier)
- Creates a local vault for cryptographic keys
- Optionally publishes a badge to AGNTCY network
Other agents can verify your robot's identity:
curl http://robot:3010/.well-known/did.jsonInstall AGNTCY CLI for full network participation:
sh -c "$(curl -sSL https://raw.githubusercontent.com/agntcy/identity/refs/heads/main/deployments/scripts/identity/install_issuer.sh)"MIT