Skip to content

Releases: pollen-robotics/microduck_yocto

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 30 Oct 17:40
1ee5838

The gamepad ships and stays paired

🎮 The gamepad ships — and stays paired

A robot out of the box can now be driven by a paired gamepad: the gamepad client (padd) is installed in the production image, where until now a paired pad moved nothing. The NFC daemon (nfcd) ships too, running under its own user and quietly retrying every 30 s on boards with no reader fitted. Updates no longer unpair the pad: BlueZ's bonds now live on the data partition, so they ride out every slot switch instead of staying behind in the rootfs being replaced. Pair each pad once more after this update — the old bonds sit in the slot being replaced, with nothing to carry over.

📚 Docs: rauc.md

  • Ships the gamepad client and the NFC daemon in the production image by @pierre-rouanet in #76
  • Moves Bluetooth bonds onto the data partition so updates stop unpairing the pad by @FabienDanieau in #84

🖥️ A smarter, lighter update page

The update page (port 8090) now lists only builds your board can actually install: a production board sees production-signed stable builds no older than the running one, with a count of what was hidden, and a refused install explains itself ("this board takes production-signed stable builds only") instead of failing without a word. One-way installs warn before you click — a dev board taking a stable build that locks the new slot to stable builds, a production board overwriting its last dev image — and a freshly flashed card names its build, like 1.0.1 (20261029170631), instead of "the flashed image". The page is also far cheaper to keep open: a status poll makes one rauc call instead of seven and idles at 10 s, cutting an open page from roughly 17% of the board to about 2%.

  • Lists only installable builds, explains refusals, warns before one-way installs, and names a flashed card's build by @FabienDanieau in #81
  • One rauc call per status and a 10 s idle poll, cutting an open page from ~17% to ~2% of the board by @FabienDanieau in #83

💡 The face board's LEDs, named and verified

The twelve LEDs of the V1.0 face board now carry the V0 board's names for the same physical lights — face:gr1:red, face:cam:red, the RGB channels — instead of driver channel numbers, so the face udev rule and robotctl led work unchanged on this machine. Every LED was checked on a real V1.0 board: all twelve light with the correct channel mapping, and the face button reports KEY_ENTER.

📚 Docs: beta-board.md

  • Names the face LEDs after the V0 labels, verified LED by LED on a V1.0 board by @is-qian in #79

🏭 Flashing a robot, scripted for the factory

docs/flashing.md is the new step-by-step for writing a robot's eMMC over USB-C with rkdeveloptool: which release files to take and how to check them, how to enter flashing mode with the Recovery button, how to tell the robot booted (face LED heartbeat, ssh microduck@192.168.42.1 over the same cable) — and the one rule that avoids a stuck board: power-cycle after the write, never rkdeveloptool rd, which can hang the board at boot until power is removed. The guide covers Mac as well as Linux, and scripts/flash-emmc.sh runs the whole procedure for a release tag and a machine: download, checksum, the DDR-blob check on the loader, then write. It has not yet been followed end to end on a board; the guide says which steps remain to verify.

📚 Docs: flashing.md

  • The factory flashing guide for the face-board robot by @FabienDanieau in #85
  • Mac instructions and the flash-emmc.sh script that runs the whole procedure by @pierre-rouanet in #86

🔄 Updates

  • Dev and candidate builds now name the newest release everywhere they show a version — the build channel, rauc info, and /etc/os-release — instead of 0.1.0 or poky's 6.0.4, computed from the release tags at build time by @FabienDanieau in #80 — docs

🏗️ Build & CI

  • Caps the release-notes model's output tokens in the promotion workflow, so generated notes stop falling back to plain text by @FabienDanieau in #78
  • Repins Seeed's rewritten deb_source history for the Wi-Fi driver, its firmware, and the beta camera, so beta and face-board builds fetch again — the fetched trees are identical, so nothing on the robot changes by @FabienDanieau in #82

📦 Files

One release for every board, all built from the same commit.

Board Update bundle Card image
microduck-zero3 microduck-os-v1.1.0-zero3.raucb microduck-image-microduck-zero3.rootfs-*.wic.zst + .wic.bmap
microduck-beta microduck-os-v1.1.0-beta.raucb microduck-image-microduck-beta.rootfs-*.wic.zst + .wic.bmap, and microduck-beta-loader.bin for rkdeveloptool
microduck-face-board-v1 microduck-os-v1.1.0-face-board-v1.raucb microduck-image-microduck-face-board-v1.rootfs-*.wic.zst + .wic.bmap, and microduck-face-board-v1-loader.bin for rkdeveloptool
  • The .raucb files are the update, signed with the production key. Robots on stable get it by themselves; rauc install it on one without network.
  • The .wic.zst + .wic.bmap files are the shipping image's card. Flash it with bmaptool copy.

Stable OS build 20261030152544 for microduck-zero3, released by FabienDanieau. Built by HF job 6ae4b5f8c78863f9c62e8a89.
Stable OS build 20261030160411 for microduck-beta, released by FabienDanieau. Built by HF job 6ae4bf410e0338d1bb7cbebf.
Stable OS build 20261030153543 for microduck-face-board-v1, released by FabienDanieau. Built by HF job 6ae4b893c78863f9c62e8bf9.

v1.0.1

Choose a tag to compare

@github-actions github-actions released this 29 Oct 18:55
a7d1468

A quicker verdict after an OS update, and the robot's own login banner.

🔄 Updates

  • A new slot is judged as soon as the daemon's own boot check answers, not three minutes after boot, so the update page shows the result right away by @pierre-rouanet in #75
  • One release for every board, with the release notes' input kept small enough for the model by @FabienDanieau in #73

🔧 Other improvements

  • "Microduck OS - Pollen Robotics" at ssh login, instead of Poky's reference-distribution warning by @FabienDanieau in #72

🏗️ Build & CI

📦 Files

One release for every board, all built from the same commit.

Board Update bundle Card image
microduck-zero3 microduck-os-v1.0.1-zero3.raucb microduck-image-microduck-zero3.rootfs-*.wic.zst + .wic.bmap
microduck-beta microduck-os-v1.0.1-beta.raucb microduck-image-microduck-beta.rootfs-*.wic.zst + .wic.bmap, and microduck-beta-loader.bin for rkdeveloptool
microduck-face-board-v1 microduck-os-v1.0.1-face-board-v1.raucb microduck-image-microduck-face-board-v1.rootfs-*.wic.zst + .wic.bmap, and microduck-face-board-v1-loader.bin for rkdeveloptool
  • The .raucb files are the update, signed with the production key. Robots on stable get it by themselves; rauc install it on one without network.
  • The .wic.zst + .wic.bmap files are the shipping image's card. Flash it with bmaptool copy.

Stable OS build 20261029170631 for microduck-zero3, released by pierre-rouanet. Built by HF job 6ae37c025ddcdc0830262c68.
Stable OS build 20261029170618 for microduck-beta, released by pierre-rouanet. Built by HF job 6ae37c085ddcdc0830262c76.
Stable OS build 20261029174916 for microduck-face-board-v1, released by pierre-rouanet. Built by HF job 6ae37c005ddcdc0830262c65.

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 15:39
ad41637

The first stable microduck OS: over-the-air OS updates with automatic rollback, a newer kernel, settings that survive updates, and a lighter image.

💔 Needs a reflash

Robots on v0.1.0 or older can't reach v1.0.0 with an update: the boot flow and the partition contents changed. Flash the card image below once. From then on, every OS update, kernel included, arrives over the air.

  • The kernel now lives in each RAUC slot, so kernel updates no longer need a reflash. U-Boot's environment is written at flash time by @FabienDanieau in #52 — docs
  • Layer bump to the wrynose branch tips, with several hundred CVE and security fixes by @FabienDanieau in #47

🔄 Over-the-air OS updates

A robot now updates its whole OS from a published channel. It downloads a signed bundle into the inactive slot, reboots into it, and keeps it only if the robot comes up healthy: the daemons start, the slot's own kernel runs, and Wi-Fi and Bluetooth are there. Otherwise it falls back to the previous OS by itself. Updates can be started from the update page on port 8090, or with duckctl os from daemon 0.18.0 on. Shipping robots follow stable, which carries only production-signed builds that were tested first as candidates.

microduck-osupdate status
rauc status

📚 Docs: rauc.md

  • OS updates from a published channel, with an update page on the LAN by @FabienDanieau in #53
  • The health check fails an OS whose kernel modules or radios are missing, so it rolls back by @pierre-rouanet in #66 — docs
  • Stable releases: production-signed, promoted from tested candidate builds by @FabienDanieau in #68 — docs
  • Reproducible kernel and boot image, so a kernel rebuild no longer makes bundles uninstallable by @FabienDanieau in #33

🦆 Settings that survive updates

An OS update writes a whole new slot, /etc included, so it used to reset every setting changed on the robot and sign it out of Hugging Face. Both now live on the persistent data partition and are carried across updates, together with daemon 0.18.0.

  • Robot settings and the Hugging Face sign-in kept across OS updates by @FabienDanieau in #67

🐧 Newer kernel

The kernel moves from Radxa's 6.1.84 to Armbian's rk-6.1-rkr7.2 (6.1.172), Rockchip's latest 6.1 BSP kept merged with Linux stable. Open kernel CVEs drop from 3,569 to 2,116.

📚 Docs: zero3-board.md

🪶 A lighter image

The image sheds well over 100 MiB per slot, and services nothing used.

🦆 Robot software

  • Policy set v8 seeded, as the latest daemons expect by @FabienDanieau in #35 — docs
  • The robot's name in the dev image's shell prompt from the first boot by @apirrone in #65

🎥 Camera & media

  • The WebRTC stream can scale down to 360p on a weak link again by @FabienDanieau in #59
  • Rockchip GStreamer plugins from upstream, now that our encoder changes are merged there by @FabienDanieau in #62
  • Beta camera tuning library built from Seeed's published source by @FabienDanieau in #57

🔊 Audio

  • Beta speaker at the DAC's maximum volume by @apirrone in #54

📡 Connectivity

🔩 Boards & kernel

  • New board: the beta with Face Board V1.0 (microduck-face-board-v1) by @FabienDanieau in #61 — docs
  • Boot chain pinned instead of following meta-rockchip's defaults by @FabienDanieau in #37

🔧 Other improvements

🐛 Bug fixes

  • Beta Wi-Fi no longer stays disconnected after an access point rejects a roam by @apirrone in #63
  • Comments that were no longer true by @FabienDanieau in #48
  • Shipping and dev images built in one job no longer collide by @FabienDanieau in #71

🏗️ Build & CI

📦 Files

One release for every board, all built from the same commit by the same CI run.

Board Update bundle Card image
microduck-zero3 (Radxa Zero 3W) microduck-os-v1.0.0-zero3.raucb microduck-image-microduck-zero3.rootfs-*.wic.zst + .wic.bmap
microduck-beta microduck-os-v1.0.0-beta.raucb microduck-image-microduck-beta.rootfs-*.wic.zst + .wic.bmap, and microduck-beta-loader.bin for rkdeveloptool
microduck-face-board-v1 microduck-os-v1.0.0-face-board-v1.raucb microduck-image-microduck-face-board-v1.rootfs-*.wic.zst + .wic.bmap, and microduck-face-board-v1-loader.bin for rkdeveloptool
  • The .raucb files are the update, signed with the production key. Robots on stable get it by themselves; rauc install it on one without network.
  • The .wic.zst + .wic.bmap files are the shipping image's card. Flash it with bmaptool copy.

Stable OS build 20261029140210 for microduck-zero3, released by FabienDanieau. Built by HF job 6ae34fd53fb22a235dd5bc4f.
Stable OS build 20261029140315 for microduck-beta, released by FabienDanieau. Built by HF job 6ae34fd941e90535df78d70c.
Stable OS build 20261029140309 for microduck-face-board-v1, released by FabienDanieau. Built by HF job 6ae34fd63fb22a235dd5bc57.

v0.1.0

Choose a tag to compare

@FabienDanieau FabienDanieau released this 13 Oct 10:06
fd61fb1

What's Changed

  • microduck-daemon: pull in curl, so the release's own seeders can fetch by @pierre-rouanet in #2
  • bluetooth: pause btd for gamepad pairing, document Privacy = device by @pierre-rouanet in #4
  • Seed the policy set, so an update is not rolled back on every board by @pierre-rouanet in #1
  • microduck-daemon: ship robotctl's completions, and something to load them by @pierre-rouanet in #5
  • The dev board's updater.toml stopped contradicting itself by @pierre-rouanet in #7
  • gstreamer-rockchip: build from our fork instead of carrying the patches by @FabienDanieau in #9
  • gstreamer-rockchip: pin the signed-off commits sent upstream by @FabienDanieau in #11
  • A/B OS updates with RAUC by @FabienDanieau in #10
  • RAUC: health-gated good marking, boot recovery net, and a kernel-mismatch guard by @FabienDanieau in #13
  • Dev image: ship the GStreamer tracer plugins by @FabienDanieau in #12
  • ci: build the dev-signed RAUC bundle on every merge by @FabienDanieau in #15
  • microduck-daemon: create the robot-account group ahead of the daemon bump by @FabienDanieau in #14
  • ci: own input folder per job, own queue per branch by @FabienDanieau in #17
  • hfjob: sstate as one archive, downloads on demand (64 -> 7.5 min per build) by @FabienDanieau in #18
  • Slim artifacts (27 -> 1.6 GB per build), 14-day retention, checksummed cache by @FabienDanieau in #19
  • The beta board as a second machine, microduck-beta by @apirrone in #16
  • beta: give the ToF's spidev to the robot group, for tofd by @pierre-rouanet in #22
  • beta: describe the GC2093 head camera by @pierre-rouanet in #21
  • Ship rustypot_wizard, and ldd so cargo-dist installers work by @apirrone in #20
  • Seed daemon 0.16.0 by @pierre-rouanet in #23
  • Pin fresh images to slot A for now (#24) by @apirrone in #25
  • bluez5: backport btattach's glibc 2.42 baud-rate fix by @pierre-rouanet in #26
  • beta: the NFC reader to nfcd, out of reset by @apirrone in #27
  • beta: sounds keep their start, and the speaker at a fuller level by @apirrone in #28
  • beta: Seeed's trfc_mode=1 in the DRAM init (fixes bricked boards) by @apirrone in #29
  • Keep the journal on the data partition by @pierre-rouanet in #30
  • Seed the newest daemon release unless a build names one by @pierre-rouanet in #31

New Contributors

Full Changelog: https://github.com/pollen-robotics/microduck_yocto/commits/v0.1.0