
Nova pcb v6
Ace2932/Fennec
This project is a heavily modified fork of the open-source NovaSM3 quadruped, redesigned to serve as a research platform for embodied AI.

This project is a heavily modified fork of the open-source NovaSM3 quadruped, redesigned to serve as a research platform for embodied AI.
Nova pcb v6 power v2 is an open-source printed circuit board by Ace2932, from the Ace2932/Fennec repository on GitHub, published under the MIT licence. It is a 4-layer board of 112 × 90 mm with 61 parts on 24 nets, routed with 334 tracks and 62 vias.
It is built around the LM393DRG, RC0603FR-0710KL and XT30U-M, with the RC0603FR-07100KL, UPW1E471MPD and CC0603KRX7R9BB104 among its other parts. Its parts include 13 resistors, 12 connectors, 10 ICs, 9 capacitors and 4 transistors.
Fennec is an autonomous quadruped I'm building on the NovaSM3 platform (by Chris Locke / novaspotmicro.com) — rebuilt around a unified Feetech STS3215 TTL servo bus, NVIDIA Jetson Orin Nano Super compute, and ROS 2 Humble, as a platform for Vision-Language-Action (VLA) model deployment, 3D SLAM, and autonomous mobile manipulation.
Status: 🔧 Phase 1 — hardware bring-up + sim training. Both PCBs ordered 2026-07-01 (JLCPCB) — power board v2 (Pattern B bus master, INA226 rail telemetry, Phase-4 arm rail provisioned) + logic board. Firmware critical-path green (safety FSM, watchdogs, servo limits, joint-map loader; rostest suites in CI). Legs (leg_v6) printing; chassis-integration + CAD fit-gate audits closed; measured leg geometry → URDF + IK green. 🎉 RL locomotion walks in sim (MuJoCo MJX + Brax PPO, 2026-07-16) — stair-climb curriculum in progress. See STATUS.md for the live blockers / next-actions board.
Platform: Quadruped (12 DOF) — arm (6-DOF, Phase 4 future) on shelf
Compute: NVIDIA Jetson Orin Nano Super 8GB
Middleware: ROS 2 Humble
Last updated: July 22, 2026
Design outline:
docs/design-outline.md— the canonical top-level design document (architecture, doctrines, lane status). Start there.
This project is a heavily modified fork of the open-source NovaSM3 quadruped, redesigned to serve as a research platform for embodied AI. Stock Nova uses PWM hobby servos and a Raspberry Pi running custom locomotion code. This build replaces:
The arm is carried over from a prior SO-ARM101 build, also Feetech-based. v1 build scope: quadruped only (12 servos active). Arm install + integration is Phase 4 future work — bus IDs 13-18 and the 7.5V arm-rail buck footprint (D42V55F7) are reserved on the PCB v6 redesign so the future install is a populate-and-go.
sim/nova_mjx, MuJoCo MJX + Brax PPO) — ✅ walks in sim (2026-07-16); terrain curriculum + stair climbing + sim2real transfer in progress| Subsystem | Stock NovaSM3 | This Build |
|---|---|---|
| Compute (main) | Raspberry Pi 4 | NVIDIA Jetson Orin Nano Super 8GB |
| Compute (MCU) | Teensy 4.0 | Teensy 4.1 (more RAM + SD slot) |
| Aux MCU | Arduino Nano | Arduino Nano (kept, peripherals only) |
| Locomotion servos | 12× PWM hobby servos | 12× Feetech STS3215 (4× 12V/30kg hip, 8× 7.4V/19kg femur/tibia) |
| Arm | None (stock) | 6× Feetech STS3215 from SO-ARM101 — on shelf, Phase 4 |
| Servo protocol | PWM (one signal per servo) | TTL half-duplex serial bus (daisy-chained) |
| Perception | None / optional | RealSense D456 + Unitree L2 LiDAR |
| Middleware | Custom Arduino loops | ROS 2 Humble + micro-ROS |
| Power | 3S 11.1V LiPo | 4S 14.8V LiPo + Pololu buck rails (7.5V leg / 12V hip / 12V L2 dedicated / 12V Jetson / 5V aux). XL4016 dropped after capacity audit. |
| Print materials | PLA / PETG | PA6-CF (structural) / PETG-CF (secondary) / TPU 95A (foot pads + strain relief) |
| Print feed | Direct from spool | Creality SpacePi X4 dryer → 4 mm PTFE Bowden → P1S (AMS HF bypassed for PA6-CF — re-absorbs moisture in AMS chamber, defeats pre-drying) |
After the v3.2 architecture audit, the stock Nova PCB v5.2b can't host the upgraded power tree (Pololu modules, INA226 telemetry, hard-cutoff MOSFET, E-stop chain) or the Pattern A/B bus master selector. The redesign retains the spirit of the stock board (Arduino Nano aux slot, battery input geometry) and adds the new safety + power architecture. Full feature set in hardware/pcb-mods/README.md.
┌────────────────────────────────────────────────────────────────────┐
│ NVIDIA Jetson Orin Nano Super 8GB │
│ (ROS 2 Humble) │
│ • Nav2, SLAM, VLA inference, sensor fusion │
│ • Sends /joint_commands to Teensy via micro-ROS over USB │
│ • Built-in WiFi 5 (802.11ac/ab/gn) per NVIDIA P3766 spec sheet │
└──┬──────────┬─────────────┬─────────────┬───────────────────────────┘
│ USB-C │ USB 3.1 │ Ethernet │ USB (micro-ROS transport)
│ │ │ │
┌──▼───────┐ ┌▼───────────┐ ┌▼───────────┐ ┌▼─────────────────────────┐
│ Realsense│ │ FE-URT-1 │ │ Gig switch │ │ Teensy 4.1 (BUS MASTER v1)│
│ D456 │ │ (debug/ │ │ │ │ • Real-time gait loop │
│ (depth + │ │ bench │ │ ◄─ L2 ─► │ │ • UART → SN74LVC125A → bus │
│ RGB + │ │ fallback) │ │ │ │ • INA226 I²C reader │
│ IMU) │ │ │ └────────────┘ │ • E-stop GPIO sense │
└──────────┘ └────┬───────┘ │ • micro-ROS over USB │
↓ └──┬────────────────────────┘
(JP_BUS_MASTER │ UART → SN74LVC125A half-duplex
solder bridge: │ (active v1 path)
default = B, │
flip to A for ID setup) ▼
┌───────────────────────┐
│ 12× STS3215 (TTL bus) │
│ per-leg: FL1-3 FR4-6 │| Joint group | Count | Servo | Voltage | Bus IDs | Status |
|---|---|---|---|---|---|
| Hips | 4 | STS3215 30kg | 12V | 1-4 | v1 active |
| Femur + tibia | 8 | STS3215 19kg | 7.4V | 5-12 | v1 active |
| Arm (shoulder + elbow) | 3 | STS3215 19kg | 7.4V | 13-15 | ⏸ Phase 4 — reserved |
| Arm (wrist + gripper) | 3 | STS3215 19kg | 7.4V | 16-18 | ⏸ Phase 4 — reserved |
v1 build = 12 active servos on a single daisy-chained TTL bus, 2 active servo-power voltage levels (7.5V leg, 12V hip) plus dedicated 12V/2.6A L2 LiDAR buck and 12V/3A Jetson buck. Bus master is the Teensy 4.1 (Pattern B) via a SN74LVC125A half-duplex driver. Bus IDs 13-18 and the 7.4V arm rail (D42V55F7 footprint) reserved on PCB v6 for Phase 4 arm install — populate-and-go.
Pattern B is v1 default. Both paths live on PCB v6 via solder bridge JP_BUS_MASTER.
JP_BUS_MASTER to A.Why B as default (decision history): Linux is not a real-time OS. USB-CDC latency on Jetson runs 1-10 ms typical, 50 ms+ under load. What Pattern B actually buys: bus-servicing isolation on the Teensy side — UART transactions to all 12 servos complete on time even when Jetson is jittery, so the bus doesn't time out and servos don't fault. The gait controller still runs on Jetson and publishes targets at 100 Hz, so Jetson's command rate is still Linux-bounded; the Teensy oversamples at 200-500 Hz against the last received target, holding it through Jetson stalls. A 100 ms Linux freeze becomes "robot pauses mid-step," not "bus dies and robot falls." v3.2 originally defaulted to A with "migrate if measurement forces it" — v3.3 flips to B-default because the migration cost is just populating one $1 IC + Phase 1 firmware work, and skipping the measure-then-migrate path eliminates a Phase 2 surprise. See Open Decisions row 5.
Phase 1 acceptance gate (revised): Pattern B's real guarantee is bus-servicing isolation on the Teensy side, not full RTT through Linux. Two mandatory criteria + one sanity check:
/joint_commands arrival rate ≥99% of 100 Hz target over 60 seconds (Jetson + uROS healthy)If (1) misses → debug Teensy firmware (DMA vs ISR, UART config). If (2) misses → debug Jetson uROS / USB cable / CPU contention. If only (3) is high → accept: Teensy holds last command under Jetson jitter, robot stays stable.
┌──────────────────────────────────────────────┐
│ Application Layer │
│ • Behavior tree / mission FSM │
│ • VLA policy node │
│ • Teleop bridge │
└──────────────────────────────────────────────┘
┌──────────────────────────────────────────────┐
│ Navigation Layer │
│ • Nav2 (planning + control) │
│ • robot_localization (EKF) │
└──────────────────────────────────────────────┘
┌──────────────────────────────────────────────┐
│ Perception Layer │
│ • RTAB-Map / POINT-LIO (3D SLAM) │
│ • realsense2_camera │
│ • unitree_lidar_ros2 │
└──────────────────────────────────────────────┘
┌──────────────────────────────────────────────┐
│ Locomotion Layer (Jetson) │
│ • Gait controller (8-phase walk) │
│ • 3-DOF-per-leg IK solver │
│ • Publishes /joint_commands │
│ • Subscribes /joint_states │
└──────────────────────────────────────────────┘| Component | Purpose | Status |
|---|---|---|
| ROS 2 Humble | Middleware | 📋 Install on Jetson |
librealsense2 | RealSense SDK | 📋 ARM64 build |
realsense2_camera | ROS 2 wrapper for D456 | 📋 apt install |
unilidar_sdk2 | Unitree L2 SDK | ✅ Built green on Jetson (official unitreerobotics/unilidar_sdk2, not discodyer fork — official now bundles ROS 2 wrapper) |
unitree_lidar_ros2 | ROS 2 wrapper for L2 | ✅ Built + streaming. Use Ace2932/unilidar_sdk2 fix/imu-bridge-double-call branch — fixes upstream IMU bridge bug where getImuData() is called twice in timer_callback(), draining the SDK queue before publish. |
| POINT-LIO | LiDAR-inertial SLAM | 📋 Eval first |
| RTAB-Map | Visual-LiDAR SLAM | 📋 Compare with POINT-LIO |
| Nav2 | Autonomous navigation | 📋 Phase 3 |
| robot_localization | EKF sensor fusion | 📋 Phase 2 |
| micro-ROS (Teensy) | Embedded ROS 2 | 📋 Phase 2 |
| SCServo SDK (Teensy port) | Feetech bus driver running on Teensy in Pattern B | ⚠️ Already familiar from SO-ARM101 — port to TeensyDuino in Phase 1 |
MJX/Brax sim (sim/nova_mjx) | RL locomotion training — MuJoCo MJX physics, Brax PPO, procedural terrain curriculum (rough / steps / stairs), domain randomization | 🔧 Walks in sim (flat trot, 2026-07-16); stair-climb curriculum active |
4S LiPo 14.8V nominal (12.8-16.8V)
│ MRBF-30 fuse (off-board) · MOSFET reverse-protection · MOSFET hard-cutoff @12.4V · E-stop NC (servo rails only)
│
├── Pololu D42V110F7 ──► 7.5V/10A ──► 8× STS3215 19kg femur/tibia
│ (star injection at 4 points along chain, bulk caps near point of load)
│
├── Pololu D42V110F12 ──► 12V/9A ──► 4× STS3215 30kg hips ONLY
│
├── Pololu D24V22F12 ──► 12V/2.6A ──► Unitree L2 LiDAR (1A, LC filter on output)
│
├── Pololu D42V55F12 ──► 12V/~3A ──► Jetson Orin Nano (barrel jack)
│
├── [reserved D42V55F7] ► 7.5V/3-8A ──► 6× STS3215 arm (Phase 4 — footprint unstuffed)
│
└── UBEC 5V/5A ──► 5V rail ──► fans, aux 5V peripherals
INA226 ×3 (leg 7.5V, hip 12V, Jetson 12V) ──► I²C ──► Teensy 4.1 ──► ROS 2 diagnostics
13.0V comparator ──► Teensy GPIO ──► /battery_low ──► Jetson clean shutdown
12.4V comparator ──► MOSFET ──► breaks battery feed (autonomous backstop)docs/power-budget.md./battery_low topic → Jetson systemctl poweroff (clean SD unmount). ~30-60s window before hard cutoff.Point-to-point — no switch on the robot (decision 2026-08-14).
┌──────────────────────────┐ ┌────────────────────────┐
│ Unitree L2 LiDAR │ Cat 6 │ Jetson Orin Nano │
│ Static IP: 192.168.1.62 ├────────────────┤ eth0: 192.168.1.2/24 │
│ UDP target port: 6101 │ (direct) │ wlan0: DHCP from home │
└──────────────────────────┘ └────────────────────────┘eth0eth0 needs a manual static IP because L2 is not a DHCP client/serverFull BOM lives in BOM.md. High-level summary:
| Category | Cost |
|---|---|
| Compute + perception | ~$1,300 (NVMe deferred — NAND shortage) |
| Servos | ~$320 active (12-servo v1) + 6 SO-ARM101 carryover on shelf |
| Power + safety | ~$338 (Pololu rails + INA226 + E-stop + MOSFET hard-cutoff + graceful-shutdown comparator) |
| Mechanical + hardware | ~$110 |
| Sensors (stock Nova) | ~$76 |
| Filament + Bambu accessories | ~$700 (− Magigoo via Bambu liquid glue substitution) |
| Wiring + consumables | ~$80 |
| Realistic total | ~$2,963 (v3.4: XT60 via Ovonic, Bambu glue, XL4016 ×2 return save $58 total) |
Superseded — this roadmap is the May-2026 plan kept for history. Live state: STATUS.md (boards fabbed + populated to stage 9, firmware links, legs printing).
3-week sequenced plan in docs/work-schedule.md. Front-loads leg-joint CAD + prints; reserves 2026-05-29 away-week for laptop-only PCB schematic work in KiCad.
Week 1 (2026-05-15 → 2026-05-22):
hardware/cad/leg_v5/, STS3215 cavity in original NovaSM3 STLs). Pending: caliper on-hand servos + first-article leg-joint print.Week 2 (2026-05-22 → 2026-05-28): detailed checklist in docs/checklists/week-2.md
Week 3 — Away (2026-05-29 → 2026-06-05, laptop only):
hardware/pcb-mods/README.mdWeek 4+ (back to shop):
realsense-viewer)JP_BUS_MASTER to A (FE-URT-1), assign servo IDs 1-12 (v1 active), label each. IDs 13-18 reserved for Phase 4.JP_BUS_MASTER back to B (default). Verify Teensy firmware drives single servo, then full 12-servo chain./joint_commands arrival ≥99% of 100 Hz + RTT median <5 ms / p99 <20 ms. Pattern A is not a workaround if (1) or (2) miss.Two parallel tracks: the classical IK/gait stack below, and an RL policy trained in simulation (
sim/nova_mjx— MuJoCo MJX + Brax PPO, procedural terrain curriculum, domain randomization bracketing measured servo behavior). The RL track walks in sim as of 2026-07-16; its deployment path is ONNX/TFLite-class policy export to the Jetson.
/joint_commands to Teensy via micro-ROSrobot_localization (MPU-6050 cut)Quality-of-life software + operational features captured in docs/notes-qol-features.md and docs/notes-virtual-view-autocal.md. Pick up during Phase 1/2 idle time or batch into a "QoL sprint" once v1 walk gait is stable. Suggested rollout order (per notes-qol-features.md):
nova_ops) — bus ping sweep, E-stop, battery latch. v1 ships 3 checks; rest land opportunistically. Highest payback during Phase 1 servo bring-up.make deploy for Teensy — build on laptop, flash over Jetson USB, no chassis open. Needed by mid-Phase-1 firmware iteration.nova bringup launcher with profiles (bench / sensors / slam / walk / full / vla) — pay back at ~6 launch files.Plus auto-calibration routines (nova_calibration package): IMU bias zero on boot, servo zero-position auto-detect via jig, camera↔IMU + LiDAR↔IMU + LiDAR↔camera extrinsics. Foxglove bridge over Tailscale for remote browser viewing of URDF + sensors + plots.
Split into two sub-phases since hardware-arm-install precedes any manipulation software.
Phase 4a — Arm hardware install:
Phase 4b — Manipulation + VLA software:
Before assembling any subsystem into the chassis, validate on the bench. Catching a bad part on the desk is minutes; catching it after assembly is hours.
Full test sequence and acceptance criteria in BOM.md Section 12.
📋 To be written as components arrive. Will include:
- JetPack 6.x flash + firmware update procedure
- NVMe rootfs migration (when NAND prices recover; see BOM §1)
- Built-in WiFi 5 setup + BT verification
- ROS 2 Humble + sensor SDK install scripts
- Feetech servo ID assignment procedure
- Network static IP configuration
- URDF + xacro for the modified platform
- Calibration procedures (servo zero-positioning, sensor extrinsics)
| # | Decision | Status | Notes |
|---|---|---|---|
| 1 | Charger model | Resolved → ISDT 608AC | ~$60. AC mode ~55W ≈ 110 min for 4S 6000mAh. Charge / discharge / storage modes. Bag + XT60 jumper bought separately. |
| 2 | WiFi on P3766 kit | Resolved → 802.11ac/ab/gn included | Confirmed from NVIDIA P3766 datasheet (Developer Kit Content): "802.11ac/ab/gn wireless network interface controller". WiFi 5, not 6E. Antennas implied via product photos; verify-on-unbox. |
| 2b | Bluetooth presence on P3766 | Resolved → BT 5.1 confirmed (Realtek) | Verified 2026-05-17 on hardware: hciconfig -a shows hci0 UP RUNNING, Manufacturer "Realtek Semiconductor Corporation", HCI Version 5.1, BD Address 9C:C7:D3:F6:AC:5C. bluetoothctl list confirms controller present. |
| 3 | L2 12V tap: shared with hip rail vs dedicated buck | Resolved → dedicated D24V22F12 (v3.4) | Combined hip+L2 load was margin-thin on D42V110F12's 9A typ at 14.8V Vin derating. Split L2 to its own buck for $19 extra. Cleaner power, more hip-rail headroom. |
| 4 | SLAM stack: POINT-LIO vs RTAB-Map | Open | Compare during Phase 2 |
| 5 | Bus master: Pattern A (FE-URT-1) vs Pattern B (Teensy) | Resolved → B is v1 default | Linux jitter (USB-CDC 1-10 ms typical, 50 ms+ under load) is unacceptable at 100 Hz gait. Teensy bare-metal UART gives hard real-time. PCB v6 keeps Pattern A via JP_BUS_MASTER bridge for bench / ID setup / debug. Phase 1 acceptance gate (revised): Teensy loop p99 <100 µs + /joint_commands arrival ≥99% of 100 Hz + RTT sanity (median <5 ms, p99 <20 ms). |
| 6 | L2 mounting position | Resolved → top-center on riser | Symmetric 360° FOV, minimal yaw moment |
| 7 | Horn spline verification | Resolved → absorbed into leg redesign | |
| 8 | NVMe SSD purchase | Deferred → NAND shortage | May-2026 NAND flash shortage 2-3x'd 1TB SSD prices ($60→$165-220). Revisit when prices recover (<~$100 for 1TB) or storage becomes a measured bottleneck. Run from 128GB microSD until then. |
| 9 | v1 scope: arm included vs deferred | Resolved → arm deferred to Phase 4 | 12 active servos (4 hip + 8 femur/tibia). 6 arm servos on shelf. Bus IDs 13-18 + arm-rail buck footprint reserved on PCB v6. |
| 10 | Power rail strategy | Resolved → 4-buck Pololu split | XL4016 8A cont. inadequate. v3.4 active rails: D42V110F7 (leg 7.5V), D42V110F12 (hip 12V only), D24V22F12 (L2 12V dedicated), D42V55F12 (Jetson 12V). Arm rail D42V55F7 footprint reserved. See docs/power-budget.md. |
| 11 | Safety scope | Resolved → full | 608AC LVC alarm at 13.2V (warning) + 13.0V graceful-shutdown comparator → Jetson clean poweroff + 12.4V MOSFET hard-cutoff (autonomous backstop) + E-stop on leg/hip/L2 rail enables + INA226 ×3 per-rail telemetry. ~$37 BOM add. |
| 12 | Phase 4 COM-shift compensation | Open (Phase 4) | Arm extension + payload mass shifts support polygon; gait controller needs arm-state input to stay stable. Design when arm install begins. |
| 13 | Bus integrity strategy at 12 nodes / 1 Mbps | Open (measure first) | PCB v6 includes footprints for series R + ferrite beads + GND-plane reference (GND plane = single low-Z return). Single-ended TTL — not RS-485, so 120 Ω differential termination is not the right tool. Populate iteratively based on measured error rate; drop baud if needed. |
| Date | Milestone |
|---|---|
| 2026-05-15 | BOM v3 finalized, README v1 created |
| 2026-05-15 | BOM v3.1 — NVMe deferred (NAND shortage), charger resolved to ISDT 608AC, WiFi confirmed included |
| 2026-05-15 | D24V50F12 → D42V55F12 buck swap (older Pololu family deprecated) |
| 2026-05-15 | BOM v3.2 — v1 scope narrowed to quadruped only; arm to Phase 4. Power rails redesigned (XL4016 → Pololu D42V110-class). Full safety scope adopted (LVC + E-stop + INA226 + MOSFET hard-cutoff). PCB v5.2b → v6 redesign. |
| 2026-05-15 | BOM v3.3 — Bus master flipped: Pattern B (Teensy + 74HC125) is v1 default. Pattern A (FE-URT-1) kept as bench / debug fallback via solder bridge. Teensy firmware becomes Phase 1 critical path. |
| 2026-05-15 | 3-week work schedule committed (docs/work-schedule.md): leg-joint CAD on OnShape now, prints week 2, PCB v6 schematic in KiCad during 2026-05-29 away-week. |
| 2026-05-16 | BOM v3.4 — L2 LiDAR split off hip rail onto dedicated D24V22F12 buck after Pololu datasheet check showed D42V110F12's 9A typ @ 42V Vin derates below combined hip+L2 ~9A load at 14.8V Vin. +$19. |
| 2026-05-16 | Two-pass internal audit: Pass 1 swept 7.4V/7.5V mismatches + stale version markers + stale L2 references + section numbering; Pass 2 reframed Phase 1 acceptance gate (Teensy tick jitter + uROS arrival rate, not RTT), clarified Pattern B benefit framing, extended E-stop to kill L2 rail too, added 13.0V graceful-shutdown comparator before 12.4V hard cutoff, noted pre-PCB ID-setup path, reconciled Jetson headroom (~1.2× incl. peripherals). +$3 safety, total ~$3,015. |
| 2026-05-16 | Order status updates: ISDT 608AC + LiPo safe bag + Mxuteuk HB2-ES544 E-stop ordered. Ovonic 4S kit confirmed to include XT60 jumper + charging lead (−$13). Bambu Lab Liquid Glue substituted for Magigoo PA (−$15, with print-test gate to fallback if PA6-CF adhesion fails). Realistic total $3,015 → $2,993. |
| 2026-05-16 | LeRobot Pi SD backed up to ~/Backups/lerobot-pi-128gb-2026-05-16.img.gz (SHA256 recorded in docs/backups.md). Card reformatted for Jetson. |
| 2026-05-17 | Jetson Orin Nano Super: flashed JetPack 6.2.1 SD image → apt full-upgrade → JetPack 6.2.2 / L4T 36.5 running. MAXN_SUPER power mode set (mode 2 on this Dev Kit, not 0). Three first-boot networking gotchas hit + documented in docs/setup-network.md: (1) oem-config WPA association fails — skip + connect from CLI; (2) l4tbr0 USB-C bridge hijacks default route — unplug or lower WiFi metric; (3) NetworkManager doesn't write /etc/resolv.conf on this image — manually populate + chattr +i to lock immutable. |
| 2026-05-17 | Open decision 2b resolved: Bluetooth confirmed present on P3766 — Realtek, BT 5.1, hci0 up. |
| 2026-05-17 | Jetson full persistence verified across reboots: JetPack 6.2.2, MAXN_SUPER (mode 2), jetson_clocks.service (systemd oneshot), DNS chattr-immutable, WiFi profile, BT. 8-point verification block lives in docs/setup-jetson.md §11. |
| 2026-05-17 | Week 1 substantially closed — Jetson bring-up overtook the planned CAD-first sequence (no harm). CAD + KiCad + Teensy firmware skeleton carried to Week 2. New checklist at docs/checklists/week-2.md. |
| 2026-05-17 | ROS 2 Humble installed on Jetson via ros2-apt-source 1.2.0 deb (deb822 format, the new canonical method). ros-humble-desktop + python3-colcon-common-extensions + python3-rosdep running. Talker/listener verified working over DDS. |
| 2026-05-17 | Background research pass committed. docs/research/2026-05-17-notes.md consolidates 14 topics: Unitree L2 SDK (use official, drop discodyer fork), POINT-LIO ROS 2 fork (dfloreaa), librealsense2 via jetsonhacks prebuilt modules, STS3215 libraries for Teensy, 74HC125 wiring, INA226 + LM393 design, MAXN_SUPER clocks verified (1.7 GHz / 1020 MHz), OpenVLA feasibility on 8GB. Two safety/correctness fixes applied: (a) ANL → Class T 30A fuse (LiPo needs 20 kA AIC, ANL only 6 kA), (b) NovaSM3 repo URL corrected to cguweb-com/Arduino-Projects/Nova-SM3 (the old SovGVD/NovaSM3 returns 404). |
| 2026-05-17 | Unitree L2 stack built green on Jetson. Cloned unitreerobotics/unilidar_sdk2, built C++ SDK + unitree_lidar_ros2 ROS 2 wrapper. colcon build clean. Confirmed launch params + topics: /unilidar/cloud (cloud_scan_num: 18), /unilidar/imu, default IPs match BOM §5 (LiDAR 192.168.1.62, target 192.168.1.2 port 6101). Topic/frame mapping captured in docs/setup-network.md for POINT-LIO + URDF integration. |
| 2026-05-17 | Network bundle ordered: gigabit 5-port unmanaged switch (TP-Link LS105G / NETGEAR GS305) + Cable Matters 10 Gbps snagless Cat 6 × 2-3 (1ft). $23 spend. Will unblock L2 standalone test via ros2 launch unitree_lidar_ros2 launch.py once delivered (~2 days). |
| 2026-05-18 | XL4016 ×2 returned for $30 refund. Originally specced in v3.0 BOM as the servo-rail buck pair. v3.2 audit caught the 8A continuous limit being inadequate for walking-gait + impact transients on either the 7.5V leg rail or the 12V hip rail — replaced with Pololu D42V110-class modules. XL4016 was kept in spares bin until now; return path cleaner. Realistic total $2,993 → $2,963. |
| 2026-05-18 | Intel RealSense D456 full stack (Color + Depth + IMU) running on Jetson. Step A: librealsense2-utils + librealsense2-dev via Intel apt repo (key FB0B24895113F120 fetched from keyserver.ubuntu.com). Step B: stock JetPack 6.2.2 kernel modules don't expose IMU — patched 3 in-tree drivers (uvc, IIO accel, IIO gyro) via jetson-orin-librealsense + rebuilt against L4T 36.5 sources via jetson-orin-kernel-builder, enabled HID_SENSOR_HUB/ACCEL_3D/GYRO_3D modules, ~25 min compile. Step C: ros-humble-realsense2-camera launched. Verified: Color 30 Hz, Depth 30 Hz, Accel 101 Hz, Gyro 200 Hz on actual hardware. Full procedure captured in docs/setup-jetson.md §13. |
| 2026-05-18 | Unitree L2 LiDAR streaming end-to-end. Wired L2 ↔ Cat 6 ↔ gigabit switch ↔ Cat 6 ↔ Jetson enP8p1s0 (192.168.1.2/24 static via nmcli connection nova-lan). Ping to L2 (192.168.1.62) at 0.1 ms. ros2 launch unitree_lidar_ros2 launch.py brings up /unilidar/cloud at 12 Hz, 5042 points/scan, frame_id unilidar_lidar. Followup: /unilidar/imu topic advertised but no UDP frames arriving — driver initialize_type config may need tuning (non-blocking since D456 IMU at 200 Hz covers EKF). Full v1 perception stack online: RGB + depth + 2 IMUs + 3D LiDAR all in ROS 2. |
| 2026-05-19 | POINT-LIO ROS 2 (dfloreaa fork) built green on Jetson in 1:42 colcon. Phase 2 SLAM toolchain compile-ready. L2-specific config at unilidar_l2.yaml (scan_line 18, imu_time_inte 0.004 = 250 Hz). Runtime tests deferred until L2 IMU ROS bridge bug fixed OR imu_en: false LiDAR-only mode set. |
| 2026-05-19 | Teensy 4.1 PlatformIO firmware skeleton compile-green on Mac in 9.58 s (Flash 12.8 KB / 8 MB free; RAM1 487 KB / RAM2 512 KB free). Pin map + 74HC125 OE GPIO scaffolding + INA226 I²C placeholder + safety GPIO sense + 1 Hz LED heartbeat + USB-CDC log lines. micro-ROS lib_deps gated behind NOVA_USE_MICRO_ROS — Mac build path breaks on Python 3.14 + missing ROS dev libs; reinstate on Jetson for runtime testing. Repo path: firmware/teensy/firmware/. |
| 2026-05-19 | Teensy firmware end-to-end on Jetson. IntervalTimer ISR-driven 200 Hz tick → loop p99 = 1 µs (50× under <100 µs acceptance gate). micro-ROS over USB-CDC + 20-topic contract live. feetech::Bus driver code-complete (untested on wire). |
| 2026-05-20 | Firmware safety + telemetry batch: safety FSM (E-stop + battery-low latch + /safety_clear), full STS3215 telemetry (pos+vel+load + voltage + temp @ 5 Hz), per-joint slew limiter on SYNC_WRITE broadcast, software watchdog (ISR-checked main-loop progress + AIRCR reset), boot-time servo ping sweep → first real /servo_present_mask, INA226 → /power_rails Float32MultiArray @ 10 Hz, /firmware_version + boot self-test for safety GPIOs, categorised bus errors (/servo_err_timeout + /servo_err_bad_frame + /servo_err_servo). CI green on every PR. |
| 2026-05-21 | Threadlocker (Loctite 243) + tape ordered. DP adapter dropped (headless SSH path validated). |
| 2026-05-23 | L2 IMU bridge fixed via Ace2932/unilidar_sdk2 fork — /unilidar/imu now publishes @ 250 Hz, POINT-LIO green end-to-end (init walks 1% → 100% within 250 ms). Per-room PCD capture procedure documented in setup-jetson.md §15. |
| 2026-05-23 | AMS HF bypassed for PA6-CF print workflow — feed direct from Creality SpacePi X4 → 4 mm PTFE Bowden → P1S. PA6-CF re-absorbs ambient moisture in AMS chamber within hours, defeating the 24 h pre-dry. SpacePi X4 keeps filament heated through the entire print. |
| 2026-05-23 | Magigoo PA reinstated in BOM. Bambu Lab liquid glue is not rated for PA / PA-CF per their product page; Bambu wiki PA6-CF guide explicitly calls for PA-specific glue stick. The −$15 substitution was a false economy vs the cost of a 10 h first-layer detachment. |
| 2026-05-24 | Forward-looking feature notes committed (PR #1, merge 8cb8b1e): docs/notes-qol-features.md (preflight check, always-on MCAP dashcam with incident freeze, per-joint safety envelope, nova bringup launcher with profiles, make deploy for Teensy, bag replay harness, telemetry → CSV/Grafana, RGB status LED, battery SoC widget, Gazebo digital twin) and docs/notes-virtual-view-autocal.md (Foxglove bridge over Tailscale, IMU bias zero on boot, servo zero-position auto-detect, camera/LiDAR/IMU extrinsic auto-cal). Notes only — opportunistic pickup during Phase 1/2 idle time. New packages proposed: nova_ops + nova_calibration. |
| 2026-05-26 | Leg CAD done — V5 OpenSCAD original-shell-carve (hardware/cad/leg_v5/). Reuses the original NovaSM3 STLs and carves an STS3215 cavity inside via boolean difference() — keeps the original shape, resizes the servo pocket. 9 STLs (shoulder + coax_L/R + femur_shell_L/R + femur_cover_L/R + tibia_L/R); femur prints as shell+cover sharing one cavity; tibia passive. Beat the from-scratch OnShape (V4) + CadQuery (V3.1) brackets → those archived. Pending: first-article print (coax X-bbox tight). |
| 2026-05-30 | CAD docs reorganized: V2/V3/V4 leg attempts moved to hardware/cad/archive/; hardware/cad/README.md + docs/cad-tooling.md reframed to the three-track model (V5 OpenSCAD = leg links, CadQuery = utility, OnShape = chassis). |
| 2026-06 | Cross-domain system audit (firmware / PCB / software / docs alignment) opened; PCB v6 split into power + logic boards, layout + DRC iterations. Leg CAD moved to leg_v6 (Onshape, STS3215-exact reference frame, load-path + fit-gate doctrine). |
| 2026-07-01 | Both PCBs ordered via JLCPCB (~$203 all-in): power board v2 (Pattern B bus master, 74HC125 driver, INA226 rail telemetry, Phase-4 arm rail provisioned) + logic board. v7 backlog captured. |
| 2026-07-06 | System audit fully closed: servo firmware-limits lane, limp mode, watchdogs, joint-map loader. rostest suites (firmware limits, watchdog, joint-map, liveness, locomotion) wired into CI. |
| 2026-07-10 | leg_v6 caliper session: 25T horn disc-to-disc measured 35.5 mm, yoke fixed, servo insertion proven; battery mount redesigned (top-flange); chassis-integration audit closed. Measured femur 106.9 / tibia 129.0 mm → URDF + IK green. |
| 2026-07-13 | CAD fit-gate audit closed: every leg + chassis screw joint gated on both sides (bolted-joint gate pattern — probe STL first, solid-ring guard, blind-pocket proof, negative control). Legs printing. |
| 2026-07-16 | 🎉 First walk — in simulation. RL policy (MuJoCo MJX + Brax PPO, proprioceptive obs) trots on flat ground in sim/nova_mjx. Curriculum + DR bracket measured servo behavior (2.8 rad/s joint cap, ~75 ms latency). |
| 2026-07-20 | Terrain-relative reward rework (#129/#130): resume-safe curriculum accounting; collision-exact terrain height under each foot — done/height/contact all terrain-relative, flat behavior bit-identical. |
| 2026-07-21 | Climb objective (#131) + unidirectional staircases: privileged-heightmap teacher policy, signed non-farmable ascent reward. Project renamed Fennec. Stair-climb bootstrap iteration continues (climb-v2: PBRS approach density + joint pad curriculum). |
| TBD | Phase 0 → Phase 1 transition (parts in hand) |
| TBD | First successful walk gait — on hardware |
This is a learning project as much as a research one. Decisions and tradeoffs are documented openly so others can fork and adapt.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 6 | 10k | Resistor_SMD:R_0603_1608Metric | R5, R7, R8, R9, R13, R17 |
| 5 | 1000uF_25V | Capacitor_THT:CP_Radial_D12.5mm_P5.00mm | C1, C2, C3, C4, C5 |
| 5 | XT30_Inj | Connector_AMASS:AMASS_XT30U-M_1x02_P5.0mm_Vertical | J3, J4, J5, J6, J7 |
| 4 | INA226 | nova_v6:INA226_Module_Breakout | U9, U10, U11, U12 |
| 4 | MountingHole_M3 | MountingHole:MountingHole_3.2mm_M3 | H1, H2, H3, H4 |
| 3 | 100k | Resistor_SMD:R_0603_1608Metric | R_gs1, R2, R16 |
| 3 | 470uF_25V | Capacitor_THT:CP_Radial_D10.0mm_P5.00mm | C6, C8, C9 |
| 2 | 4.7k | Resistor_SMD:R_0603_1608Metric | R11, R12 |
| 1 | 0.47μF | Capacitor_SMD:C_0603_1608Metric | C_gs1 |
| 1 | 100nF | Capacitor_SMD:C_0603_1608Metric | C7 |
| 1 | 11.3k | Resistor_SMD:R_0603_1608Metric | R4 |
| 1 | 12.1k | Resistor_SMD:R_0603_1608Metric | R6 |
| 1 | 1M | Resistor_SMD:R_0603_1608Metric | R15 |
| 1 | 22k | Resistor_SMD:R_0603_1608Metric | R3 |
| 1 | 22uH | Inductor_SMD:L_12x12mm_H8mm | L1 |
| 1 | 470k | Resistor_SMD:R_0603_1608Metric | R14 |
| 1 | BSS138_cutoff | Package_TO_SOT_SMD:SOT-23 | Q2 |
| 1 | BSS138_estop | Package_TO_SOT_SMD:SOT-23 | Q3 |
| 1 | BSS138_jetcut | Package_TO_SOT_SMD:SOT-23 | Q4 |
| 1 | BZT52C18 (18V) | Diode_SMD:D_SOD-123F | D1 |
| 1 | Estop_NC_latching | TerminalBlock_Philmore:TerminalBlock_Philmore_TB132_1x02_P5.00mm_Horizontal | SW2 |
| 1 | IB_2x06 | Connector_IDC:IDC-Header_2x06_P2.54mm_Vertical | J20 |
| 1 | IRLB3034PBF | Package_TO_SOT_THT:TO-220-3_Vertical | Q1 |
| 1 | LM393 | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U8 |
| 1 | Pololu_D24V22F12_L2_12V | nova_v6:Buck_Offboard_Terminal_2xXT30 | U3 |
| 1 | Pololu_D42V110F12_HIP_12V | nova_v6:Buck_Offboard_Terminal_2xXT30 | U2 |
| 1 | Pololu_D42V110F7_LEG_7V5 | nova_v6:Buck_Offboard_Terminal_2xXT30 | U1 |
| 1 | Pololu_D42V55F12_JET_12V | nova_v6:Buck_Offboard_Terminal_2xXT30 | U4 |
| 1 | Pololu_D42V55F7_ARM_7V5 | nova_v6:Buck_Offboard_Terminal_2xXT30 | U5 |
| 1 | Rocker_30A | TerminalBlock_Philmore:TerminalBlock_Philmore_TB132_1x02_P5.00mm_Horizontal | SW1 |
| 1 | ServoBus_TTL | Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_Vertical | J8 |
| 1 | UBEC_5V_AUX | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J2 |
| 1 | Voltmeter_DC | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | M1 |
| 1 | XT30_Arm7V5 | Connector_AMASS:AMASS_XT30U-M_1x02_P5.0mm_Vertical | J14 |
| 1 | XT30_JET_12V | Connector_AMASS:AMASS_XT30U-M_1x02_P5.0mm_Vertical | J12 |
| 1 | XT30_L2_12V | Connector_AMASS:AMASS_XT30U-M_1x02_P5.0mm_Vertical | J13 |
| 1 | XT60_4S_IN | Connector_AMASS:AMASS_XT60-M_1x02_P7.20mm_Vertical | J1 |

Ace2932/Fennec
This project is a heavily modified fork of the open-source NovaSM3 quadruped, redesigned to serve as a research platform for embodied AI.

Ace2932/Fennec
This project is a heavily modified fork of the open-source NovaSM3 quadruped, redesigned to serve as a research platform for embodied AI.

Felix-Dietrich/stern_PCB
PCB for the battery powered 12V christmas lighting with bq 25895

onionharvester/boardwalk
A little gathering place for my PCBs. This is their favourite hangout spot! 🪼⋆.ೃ࿔*:・

bcancinov/4-channel-adc-module
4 Channel ADC module for detector controller prototype

Chaospossum/mie1001-daq
MIE1001 Team 5: DAQ firmware and Arduino shield designs (preamp, ADS1115, MCP4725)

forrestrae/teensy-sound-sensor-pcb
A KiCad 9.0 carrier board for the Teensy 4.x microcontroller, designed for real-time audio sensing with USB-C Power Delivery input, 4S Li-ion battery management, I2S MEMS microphone, and LED lighting outputs.


DeadlySIn777/Controller
Unfinished CNC controller motherboard: native KiCad sources, rules, DSN and global routing review

It measures 112 × 90 mm and has 4 copper layers, 1.62 mm thick.
61 parts, built around the LM393DRG, RC0603FR-0710KL, XT30U-M and RC0603FR-07100KL. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the Ace2932/Fennec repository on GitHub, at the commit this page was made from: the board is hardware/pcb-mods/nova_pcb_v6_power_v2/nova_pcb_v6_power_v2.kicad_pcb and its schematic hardware/pcb-mods/nova_pcb_v6/01_battery.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).