CONTEXT.md had grown by appending and contradicted itself (all four nodes vs six, a retracted CPU figure, "no calibration", "nobody enrolled", "audio untested as a service", the Wi-Fi-off boot as not done, a class the tracker replaced). Rewritten as one current-state document organised by subsystem, with fresh measurements, the owner's decisions, the gotchas, the neck's arrival-day plan and what is genuinely still open. README: status, speakers not fitted, new-session note for Hermes, the calibration section (shipped calibration, coverage hints, outlier dropping, --from-views), running the tests, the docs row. HANDOFF.md gets a status banner listing where the original brief has drifted. CLAUDE.md starts at CONTEXT.md. The echo-cancel config no longer talks about a Pi Zero, and the enclosure guide no longer tells you to centre a servo with a tool that does not exist yet. pi/network-config.example is a tracked, credentials-free first-boot template: the README pointed at pi/50-cloud-init.yaml, which is gitignored and so missing from a fresh clone. The dead IdentityCache (replaced by the tracker) is removed. Docstrings corrected: audio scope publishing, the MCP health topics, and what the calibration tool does. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AFN8nRRCiDiMN7ChBpHJhs
25 lines
1.3 KiB
Plaintext
25 lines
1.3 KiB
Plaintext
# OPTIONAL. Copy to ~/.config/pipewire/pipewire.conf.d/60-echo-cancel.conf on the Pi
|
|
# (drop the ".optional") only if the robot hears its own voice and Hermes keeps
|
|
# interrupting itself (barge-in tripped by speaker bleed).
|
|
#
|
|
# It creates an echo-cancelled mic ("robot_ec_source") and a matching speaker
|
|
# ("robot_ec_sink"). After enabling it, uncomment the pulse.device lines in the
|
|
# Omarchy tunnel config (host/omarchy/50-robot-tunnel.conf) so the tunnels use these nodes instead of the
|
|
# raw ones.
|
|
#
|
|
# UNTESTED: it only matters once the speakers are fitted (the robot has none yet). WebRTC echo
|
|
# cancellation costs some CPU, and the Pi 4 already runs the whole robot with about 40% of the machine
|
|
# idle; check `top` and `robot://status` (temperature) after enabling it.
|
|
|
|
context.modules = [
|
|
{ name = libpipewire-module-echo-cancel
|
|
args = {
|
|
library.name = aec/libspa-aec-webrtc
|
|
capture.props = { node.name = "robot_ec_capture" node.passive = true }
|
|
source.props = { node.name = "robot_ec_source" node.description = "Robot mic (echo-cancelled)" }
|
|
sink.props = { node.name = "robot_ec_sink" node.description = "Robot speaker (echo-cancelled)" }
|
|
playback.props = { node.name = "robot_ec_playback" node.passive = true }
|
|
}
|
|
}
|
|
]
|