sensing·
60s
Everything neon uses to see and hear. Vision via V4L2/RealSense; audio via
the G1's onboard AudioClient + the bidi voice agent.
one camera owner·
V4L2 and RealSense devices are single-open, so the dashboard container is the
only process that opens them. Every other persona reads
GET /api/camera/<realsense_color|brio>/snapshot on the dashboard with a
service token (NEON_CAMERA_PROXY, NEON_CAMERA_PROXY_TOKEN); one camera,
many readers, the same frame the cockpit shows. A 401 means a stale token
(see troubleshooting).
use_camera·
use_camera(action="capture", source="realsense")
# action: discover | capture | capture_depth | capture_both | save | info
# source: realsense | logitech | auto | <v4l2-index>
Returns a single frame as a Strands image block (the LLM sees it directly). Color vs depth is chosen by action, not source. With the proxy set it fetches the dashboard snapshot; without it, it opens the device.
- RealSense D435i: color + depth, 640×480, rectified
- Logitech Brio 4K: chest-mounted, 1920×1080
- any V4L2 device: by path or index
take_photo·
The agent's own eyes, in every persona. In a voice session the JPEG goes into
the realtime stream and the model answers in audio; in the dashboard chat,
the REPL, Telegram and the thinker it comes back as a tool-result image block.
NEON_DASHBOARD_CAM picks the default camera.
audio·
g1_asr(duration_s=3.0) # onboard mic → text (API 1002)
g1_play_wav(file_path="/path/clip.wav") # 16 kHz mono PCM → chest speaker
g1_speak, full bidi voice·
Brio mic → AEC → bidi model → G1 chest speaker (DDS). Has the entire G1 toolset wired in.
g1_speak(action="start") # boot voice persona
g1_speak(action="say", text="hello") # one-shot TTS (no bidi)
g1_speak(action="status")
g1_speak(action="stop")
# provider: openai | nova_sonic | gemini
Speak from anywhere, or not at all
Any persona can call voice_say("...") (or importance=2 for urgent
interrupts): picked up from a shared SQLite queue within ~2 s. The agent
can also silence itself with voice_control(action="snooze", minutes=60);
muted gates the mic and the speaker (see voice).
LiDAR / 4·
Livox MID-360 on the head, via SDK.
| tool | what |
|---|---|
g1_lidar_state |
spinning? points/sec? temp? |
g1_lidar_snapshot |
one point-cloud frame |
g1_lidar_switch(on=True) |
power on/off |
g1_lidar_stats |
averaged over N seconds |
Measure real travel
g1_walk_forward reads rt/odommodestate before and after the command
and returns measured_m, how far the robot actually moved vs commanded.
The kiss-icp SLAM tools were retired on 2026-10-07.
catalog perceive recipe voice architecture
Edit page