Repository navigation
Releases: andreagenovese/quack-control
Release list
v0.1.0-rc2
quack-control v0.1.0-rc2 — release notes
2026-10-18. Italian copy: release-notes-v0.1.0-rc2.it.md.
The full list of changes is in CHANGELOG.md; the previous
candidate's notes are in release-notes-v0.1.0-rc1.md.
What this is
The second release candidate of quack-control, the local control plane
for the Pollen Robotics Microduck's daemons. Tested against quack-nav's
MuJoCo twin only, not on a physical duck; the duck arrives in December
2026.
Independent project, not affiliated with Pollen Robotics or Hugging Face.
What changed since rc1
- The house in 3D (experimental). A 3D tab draws a house built off
board with the duck's own camera colours: turn, move, zoom, isometric or
from above, cut at a height so the rooms show, the duck's way through the
house, and the duck live on it when the house was built on the map it is
on. The house is quack-nav'sscripts/map3dwork (v0.3.0-rc2): it
records beside an exploring duck, builds on a Mac or a PC, and
send.sh microduck@<duck> out/house3d.binputs the file at
/var/lib/quack-control/house3d.bin, which the page reads again when it
changes (↻). Nothing is built on the duck. Without the file the tab says
how to make one. Details: README, The house in 3D. - The band on the map. With quack-nav v0.3.0-rc2 the map also shows
what the depth sensor found in the way at the duck's height (brown) and
table tops or bed edges with floor under them (tan): what the navigation
goes round as walls. Sent with the grid, only when it changes. - CI: actions on Node 24.
Install
As rc1: the package quack-control-0.1.0-rc2-aarch64-linux.tar.gz with its
.sha256, then Installing from a release
(./install-on-duck.sh --dry-run microduck@<duck> first). An existing
config is kept; the house service is in the default services, so a
config written by rc1 needs it added to /etc/robot/quack-control.toml
to show the 3D tab:
[[service]]
name = "house"
kind = "house3d"
house_file = "/var/lib/quack-control/house3d.bin"Compatibility
| quack-control | quack-nav | camera | quacksat |
|---|---|---|---|
| 0.1.0-rc2 | v0.2.0-rc2 or later; the 3D house from v0.3.0-rc2's scripts/map3d |
Pollen's mediad daemon-v0.14.4+, or the twin's eye.py |
no control socket yet |
Known limitations
As rc1's (release-notes-v0.1.0-rc1.md),
and:
- the 3D house is a preview: its colours on the twin are synthetic, and
the camera's axes and intrinsics are to be checked on the duck; - the band is drawn as quack-nav reads it; along some walls it shows as a
brown rim, which the navigation reads as wall anyway.
v0.1.0-rc1
quack-control v0.1.0-rc1 — release notes
2026-10-03. Italian copy: release-notes-v0.1.0-rc1.it.md.
The full list of changes is in CHANGELOG.md.
What this is
The first release candidate of quack-control: a local control plane
for the Pollen Robotics Microduck's daemons. One binary runs on the duck
beside the daemons it manages and serves one page on the home network
— open it from a phone or a laptop — that shows the map the duck built,
live, and drives it. It talks to each daemon over its own unix sockets,
through an adapter per kind: quack-nav's
quack-navd and Pollen's mediad (the camera) now, quacksat later. Why a
repository of its own: ADR 0001.
Tested against quack-nav's MuJoCo twin only, not on a physical duck.
The twin runs quack-navd's real sockets and answers the camera's call the
way mediad does; the duck arrives in December 2026.
Independent project, not affiliated with Pollen Robotics or Hugging Face.
What the page does
Map (the default view):
- the live map (walls, floor, unknown), the duck's pose and heading — red
when it is lost or seated — its uncertainty (one sigma), the path it
walked on its last two runs, the route of the job it runs, the goal,
the drops and obstacles on its books, the named places; - tap the map → Go here (asks first) or Name the point; a big
STOP that stops whatever the duck is doing, its own motion included; - exploring: Start, Stop, Exploration complete (asks first);
- places by state — usable, waiting for the duck to find itself, on
another map, stale — with their distance, Go (only where it can go),
Forget, and Teach the spot the duck stands on; - badges for what the duck does of its own accord: resting (with its
last check), may have been moved (untrusted: it finds itself before the
next job), moving on its own and why (self-started motion), stopped by
you; and the status line (mapping mode, localized or searching, the job
and its outcome, how much of the house is mapped); - map rotation: ⟲ ⟳ by 90°, a two-finger turn, ⊞ squares the walls to
the screen, N back to the map as drawn — kept per map in the browser;
pan, pinch, fit, follow the duck; - the camera: a small window over the map with what the duck's head
camera sees (mediad'smedia.frame, an upright JPEG of at most 640 px),
any corner, full screen (the whole page on the iPhone), frame rate
and age, "camera unavailable" and why. Frames are asked for only while
the window is open and the page visible, at most five a second for all
the pages together.
Services: each managed daemon and whether it answers.
Advanced (collapsed, behind a warning):
- every quack-navd tool in
nav.catalog, with a form generated from
its JSON Schema (or raw JSON) and the raw reply; a tool that acts asks
for confirmation, and the server refuses it without; - the knobs editor: quack-navd's
QK_*/MAPLOC_*knobs grouped, with
default, saved and running values; Apply isnav.restart(it stops
what the duck is doing, saves the map, and the homecoming runs as at
boot).
Security
- Plain HTTP, for the home network only. Whoever reaches the port can
open the page, and the page drives the duck: never forward it to the
internet. - An optional token (
QC_TOKENin/etc/robot/quack-control.env,
root-only): every call and the live stream need it; the page asks for it
once. It travels in clear like everything else here — it keeps out a
guest's phone, not someone sniffing the Wi-Fi. - Every call is a JSON
POST, so another site cannot drive the duck
through a browser at home; the map view reaches seven tools in the shapes
it uses; the service runs as the unprivilegedquackctl, in therobot
group. - Port 8090, because mediad's own console listens on 8080.
Details: README, Security.
Install
Every release carries an install package,
quack-control-0.1.0-rc1-aarch64-linux.tar.gz with its .sha256 — the
board's binary (aarch64, glibc ≥ 2.31), the systemd unit, the service
account, the example config, install-on-duck.sh and a step-by-step
README-install.md (Italian: README-install.it.md). The bare binary,
quack-control-aarch64-linux, is attached too, with its sha256.
Install quack-nav first, then follow
Installing from a release:
download, shasum -a 256 -c, unpack, ./install-on-duck.sh --dry-run microduck@<duck> to see every command, then without --dry-run. Open
http://<the duck's address>:8090/.
Compatibility
| quack-control | quack-nav | camera | quacksat |
|---|---|---|---|
| 0.1.0-rc1 | v0.2.0-rc2 or later | Pollen's mediad daemon-v0.14.4+ (media.frame), or the twin's eye.py |
no control socket yet |
- quack-nav v0.2.0-rc2 or later for the full page:
nav.knobs,
nav.restart, places taught at a point, and the rest / untrusted /
self-started fields. With an older quack-navd the page degrades — the
map, go, stop and explore work; what it lacks answers "update quack-nav"
and the badges stay off. - The camera needs Pollen's mediad (daemon-v0.14.4 or later, which
servesmedia.frame), or on the twin quack-nav's viewer
(scripts/twin/viewer/eye.py,VIEWER=on). - quacksat shows as not available until it has a control socket
(todo).
Known limitations
From docs/todo.md:
- not yet on a physical duck; the camera window not yet tried on a real
phone (iPhone Safari's overlay, Android Chrome's full screen) nor the
cost of a frame → JPEG on the RK3566; - the camera is polled JPEG snapshots, not video (WebRTC from mediad is
for later); - the page does not say who started the running job (the page, the voice,
the homecoming), and cannot answer the explorer's "where are we?"; - home network only: no remote access yet (planned over Pollen's channel);
no rooms, no-go zones or map management yet; - no screenshot test in CI yet; 40 unit tests (HTTP, token, routes, every
check on the calls, the camera).