diff --git a/.gitattributes b/.gitattributes index 533fe76..2f33132 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,5 @@ +# Store every file exactly as it is: no line-ending conversion, so old code stays byte-for-byte original. +* -text *.wmv filter=lfs diff=lfs merge=lfs -text *.WMV filter=lfs diff=lfs merge=lfs -text *.mp4 filter=lfs diff=lfs merge=lfs -text diff --git a/2009-fpga/README.md b/2009-fpga/README.md new file mode 100644 index 0000000..5f2f1e0 --- /dev/null +++ b/2009-fpga/README.md @@ -0,0 +1,9 @@ +# 2009–2011: the FPGA version + +The first hexapod, built on the original frame (`../original-frame/`) and driven by an FPGA. +The FPGA code has not survived; what is left are the photos and videos in `media/`, among them +`hexapod film 18-11-09.wmv`. + +`media/` holds every hexapod photo and video created on or before 2 November 2011 20:44:07; everything later +is in `../2011-firefly-mega-ssc32/media/`. (Most dates are copy dates, so the split follows the owner's check +of the files, not the exact moment each photo was taken. `DSCF*` photos carry a camera date of 2003.) diff --git a/2011-firefly-mega-ssc32/README.md b/2011-firefly-mega-ssc32/README.md new file mode 100644 index 0000000..f741cd9 --- /dev/null +++ b/2011-firefly-mega-ssc32/README.md @@ -0,0 +1,28 @@ +# 2011–2012: FireFly (Arduino Mega + SSC-32) + +In June 2011 the robot was rebuilt around an Arduino Mega 2560 and a Lynxmotion SSC-32 servo controller, +with a new body and bracket (`../original-frame/`). The Mega does the inverse kinematics and sends +`#n Pxxxx Txxx` commands to the SSC-32 over `Serial1` at 38400 baud. The serial banner calls it "FireFly". + +## firmware/ + +Each folder is an Arduino sketch (or library); successive versions are successive commits, so +`git log -p -- ` shows what changed. + +| Folder | Dates | What | +|---|---|---| +| `2011-nunchuk/hexapod_oud/` | 2011-10, 2011-12 | Wii Nunchuk input, fixed walking sequences, IK, SSC-32 output. Second commit = `hexapod V2 29-12-11.rar` | +| `2012-glcd-remote/hexapod_remote_glcd/` | 2012-03 | handheld remote: graphic LCD, IR receiver and Wii Nunchuk, using the hexapod library | +| `2012-ir-radar-gps/hexapodV3/` | 2012-04, 2012-05 | v3 restructure (Data, Converter, IK, Servos classes), RC6 IR remote, ultrasonic sensor on a swivelling head servo, watchdog. `Oud/` is the 2011 code it started from | +| `2012-library/hexapod/` | 2012-07, ≤2014-02 | the robot code as an Arduino library "hexapod" v3.1: IK, SSC-32, IR, ultrasonic, GPS (TinyGPS on `Serial2`), 7-segment display. Second commit = the variant kept in the 2014 GitLab archive | +| `2012-behaviours-wip/FireFly/` | 2012-07 | start of a behaviour-based rewrite on top of the library; unfinished, does not compile | + +## Other folders + +- `hardware/` – the Arduino Mega 2560 (SparkFun DEV-09949) and SSC-32 photos of June 2011, `Layout Hexapod.jpg`. +- `docs/math/` – the IK and body-rotation derivations (`[1]`–`[5]`, the original `wisFORlive*.docx` versions, IK.pdf as `Movement Space Leg.pdf`). +- `docs/planning/` – workflow and to-do documents (2012). +- `docs/research/` – papers on hexapod workspace and Q-learning, GPS module and TinyGPS manuals. +- `docs/concepts/` – inspiration images and early sketches (2008–2012). +- `tools/` – two small Windows programs from November 2011 (`hexapod 1.0.exe`, `hexapod Source 0.2.exe`); what they do is not known. +- `media/` – photos and videos created after 2 November 2011 20:44:07, incl. `Hexapod 29-11-11.wmv`. diff --git a/2011-firefly-mega-ssc32/hardware/README.md b/2011-firefly-mega-ssc32/hardware/README.md index 96def02..b03c4a1 100644 --- a/2011-firefly-mega-ssc32/hardware/README.md +++ b/2011-firefly-mega-ssc32/hardware/README.md @@ -1,5 +1,8 @@ -# Current Electronics - - - Arduino Mega 2560 - - Lynxmotion ssc32 - - todo: add servos, battery, bec \ No newline at end of file +# FireFly electronics (2011–2012) + +- Arduino Mega 2560 (`09949-02.jpg`, SparkFun DEV-09949) +- Lynxmotion SSC-32 servo controller (`ssc-32-500.jpg`), on the Mega's `Serial1` +- 18 leg servos on SSC-32 channels 0–8 and 16–24, a head servo on channel 9 with an ultrasonic sensor (2012) +- IR receiver on pin 5, GPS on `Serial2` (2012) +- `Layout Hexapod.jpg`: layout sketch (April 2012) +- still to document (2016 note): servos, battery, BEC diff --git a/2012-simulation/README.md b/2012-simulation/README.md new file mode 100644 index 0000000..6461827 --- /dev/null +++ b/2012-simulation/README.md @@ -0,0 +1,7 @@ +# 2012–2014: simulation on the PC + +- `ik-visualiser-vs/` – Visual Studio 2012 (C++, Win32 GDI) app that draws the leg inverse kinematics + (Oct–Nov 2012). The project file is still called `Catmull-Rom app.vcxproj`. A built `Debug/Hexapod app.exe` is included. +- `processing-3d/` – Processing 2.2.1 3D simulator of the whole robot (October 2014): IK per leg (`FootClass`), + body rotation and translation (`HexapodClass`). Tags `processing-rar-1` … `processing-rar-4` are the four + archived versions. Its classes were later ported to Arduino, see `../2016-ssc32-processing-port/`. diff --git a/2012-simulation/ik-visualiser-vs/README.md b/2012-simulation/ik-visualiser-vs/README.md index 8514c1b..3679f92 100644 --- a/2012-simulation/ik-visualiser-vs/README.md +++ b/2012-simulation/ik-visualiser-vs/README.md @@ -1,5 +1,4 @@ -# Visualisation of the leg movement. +# Leg IK visualiser (Visual Studio 2012) -connected with: - - http://gitlab.mangavalk.com/mangavalk/Hexapod-Archief - - http://gitlab.mangavalk.com/mangavalk/Hexapod \ No newline at end of file +Win32/GDI app that visualises the leg movement computed by the inverse kinematics (`InverseKinemetics.cpp`, +`Leg.cpp`). Open `Hexapod.sln` in Visual Studio. `Debug/Hexapod app.exe` is the last build. diff --git a/2012-simulation/processing-3d/README.md b/2012-simulation/processing-3d/README.md index 6ed2555..ab64286 100644 --- a/2012-simulation/processing-3d/README.md +++ b/2012-simulation/processing-3d/README.md @@ -1,26 +1,26 @@ -# Hexapod – Processing simulator - -A 3D simulator for the hexapod robot's leg kinematics, written in [Processing](https://processing.org/) (Java mode, 2.x). -It draws the body and six legs, solves the inverse kinematics per leg (`FootClass`) and animates body rotation -and translation (`HexapodClass`), cycling through a few camera views. - -The same `FootClass` / `HexapodClass` / `CustomTimer` design was later ported to the Arduino firmware in the -[Hexapod/hexapod](https://mangavalk.com/Hexapod/hexapod) repository (`Hexapod_NEW`). - -## Running - -Open `hexapod/hexapod.pde` in the Processing IDE and press Run. The sketch folder must stay named `hexapod`. - -## History - -This repository was rebuilt in 2026 from old archives. Each archive became one commit, dated by its newest file: - -| Tag | Source archive | Date | -|---------|-------------------|------------------| -| `rar-1` | `Hexapod 1.rar` | 2014-10-06 14:30 | -| `rar-2` | `hexapod 2.rar` | 2014-10-06 22:39 | -| `rar-3` | `hexapod 3.rar` | 2014-10-12 16:17 | -| `rar-4` | `hexapod 4.rar` | 2014-10-13 00:49 | - -The commit after `rar-4` is the last unarchived sketch folder; its real date is unknown (file dates were lost in a -2016-11-14 copy), so it carries that date. +# Hexapod – Processing simulator + +A 3D simulator for the hexapod robot's leg kinematics, written in [Processing](https://processing.org/) (Java mode, 2.x). +It draws the body and six legs, solves the inverse kinematics per leg (`FootClass`) and animates body rotation +and translation (`HexapodClass`), cycling through a few camera views. + +The same `FootClass` / `HexapodClass` / `CustomTimer` design was later ported to the Arduino firmware in +`../../2016-ssc32-processing-port/Hexapod_NEW/`. + +## Running + +Open `hexapod/hexapod.pde` in the Processing IDE and press Run. The sketch folder must stay named `hexapod`. + +## History + +This folder was rebuilt in 2026 from old archives. Each archive became one commit, dated by its newest file: + +| Tag | Source archive | Date | +|--------------------|-------------------|------------------| +| `processing-rar-1` | `Hexapod 1.rar` | 2014-10-06 14:30 | +| `processing-rar-2` | `hexapod 2.rar` | 2014-10-06 22:39 | +| `processing-rar-3` | `hexapod 3.rar` | 2014-10-12 16:17 | +| `processing-rar-4` | `hexapod 4.rar` | 2014-10-13 00:49 | + +The commit after `rar-4` is the last unarchived sketch folder; its real date is unknown (file dates were lost in a +2016-11-14 copy), so it carries that date. diff --git a/2014-ik-core-task-queue/README.md b/2014-ik-core-task-queue/README.md new file mode 100644 index 0000000..e87b368 --- /dev/null +++ b/2014-ik-core-task-queue/README.md @@ -0,0 +1,5 @@ +# ≤ 2014: IK core with a task queue + +`HexapodRobot/` ("Version 1") restructures the robot code around a `Hexapod` class with a task pipeline +(`QueueList`) and the leg inverse kinematics. It has no servo output yet. It was in the first commit of the +GitLab repo `Hexapod` (February 2014), so it was written before then. Servo pulse ranges are the same as FireFly's. diff --git a/2016-ssc32-processing-port/README.md b/2016-ssc32-processing-port/README.md new file mode 100644 index 0000000..ec0468d --- /dev/null +++ b/2016-ssc32-processing-port/README.md @@ -0,0 +1,6 @@ +# ~2016–2018: Processing simulator ported to Arduino, SSC-32 again + +`Hexapod_NEW/` is the Processing simulator's `FootClass` / `HexapodClass` / `CustomTimer` design +(`../2012-simulation/processing-3d/`) ported to Arduino. It computes the legs on the board and sends +`#n Pxxxx` commands to the SSC-32 over `Serial1` at 115200 baud. The exact date is unknown: after the 2014 +simulator and before the 2018 Unity simulation. diff --git a/2018-unity-sim/README.md b/2018-unity-sim/README.md index 1043e02..d71933a 100644 --- a/2018-unity-sim/README.md +++ b/2018-unity-sim/README.md @@ -1 +1,12 @@ -Hexapod +# 2018–2023: Unity simulation that drives the robot + +Unity project (last opened in Unity 2021.3) that computes the walking gait on the PC and sends the servo +positions to the real robot: + +- **2018** – straight to the SSC-32 over serial (`Assets/Serial/Serial2.cs`, COM7, 115200). +- **2019 onwards** – to the Teensy remote over USB (`Serial.cs`, COM4, 250000: 18 servo bytes + checksum + + `0xFE 0xFF`), which forwards them by radio to the Teensy on the robot (`../2019-teensy-nrf24/`). +- 2019 "new design", 2022 joystick control, 2023 Unity upgrade. + +Its scripts (`Foot.cs`, `Leg.cs`, `Walk.cs`) became the starting point of the simulation in +`../2026-current/Hexapod_Simulation_Unity/`. diff --git a/2019-teensy-nrf24/README.md b/2019-teensy-nrf24/README.md new file mode 100644 index 0000000..fba578e --- /dev/null +++ b/2019-teensy-nrf24/README.md @@ -0,0 +1,16 @@ +# 2019–2022: Teensy robot and Teensy remote + +The SSC-32 was replaced by a Teensy 3.6 on the robot that drives the 18 servos itself, and a second Teensy +became the handheld remote. They talk over nRF24L01 (RF24Network, channel 90). The robot has no IK of its own: +it plays the servo angles it receives, which come from the Unity simulation (`../2018-unity-sim/`) through the +remote's USB passthrough, or from the remote's sliders. + +| Folder | What | +|---|---| +| `Hexapod_Teensy/` | robot: PWMServo on 18 pins, per-servo ranges and trims (`config.h`), MPU6050, nRF24 (CE 39, CSN 15, SCK 14) | +| `remote/` | remote: Nextion screen, 6 joystick axes with EEPROM calibration, MPU6050, nRF24 (CE 9, CSN 10), USB passthrough at 250000 | +| `remote-nextion/` | `remote.HMI`, the Nextion Editor design (6 pages: servo monitor, upload screen) | +| `remote-case/` | 3D-print files of the remote case and bezel, an Arduino Mega cover plate, a font | +| `tests/` | May 2019 bring-up sketches: SSC-32 command emulator (first step to replacing the SSC-32), nRF24 and MPU6050 tests with the robot's pins | + +Its hardware facts (pins, ranges, trims) were carried over into `../2026-current/robot/Config.h`. diff --git a/2026-current/CLAUDE.md b/2026-current/CLAUDE.md index 05a0835..585345f 100644 --- a/2026-current/CLAUDE.md +++ b/2026-current/CLAUDE.md @@ -21,12 +21,12 @@ This folder is `2026-current/` inside the `hexapod-robot` repo. The older genera (paths below are relative to this folder) and are the owner's reference material: ``` -../2019-teensy-nrf24/Hexapod_Teensy/ old robot sketch: servo passthrough only, no IK - see "Old robot sketch" below -../2019-teensy-nrf24/remote/ old remote sketch -../2019-teensy-nrf24/remote-nextion/ remote.HMI = old Nextion UI, 6 pages -../2016-ssc32-processing-port/Hexapod_NEW/, older generations with their own IK, driving an external -../2014-ik-core-task-queue/HexapodRobot/ SSC-32-style servo controller -../README.md timeline of every generation since 2009 +../2019-teensy-nrf24/Hexapod_Teensy/ old robot sketch: servo passthrough only, no IK - see "Old robot sketch" below +../2019-teensy-nrf24/remote/ old remote sketch +../2019-teensy-nrf24/remote-nextion/ remote.HMI = old Nextion UI, 6 pages +../2016-ssc32-processing-port/Hexapod_NEW/ older generations with their own IK, driving an external +../2014-ik-core-task-queue/HexapodRobot/ SSC-32-style servo controller +../README.md timeline of every generation since 2009 ``` PlatformIO, one `platformio.ini`, two environments: @@ -336,7 +336,7 @@ Robot (`robot/README.md` has detail): 960–2100 µs femur over 0–180°), which corroborates the ≈6.7 µs/° femur in `SERVOS`. - **Links:** femur 10, tibia 15 (cm), with no coxa length in that IK. - - **Hip layout comment in `../2016-ssc32-processing-port/Hexapod_NEW/Hexapod_NEW/HexapodClass.h`:** width 9.5 cm + - **Hip layout comment in `../2016-ssc32-processing-port/Hexapod_NEW/HexapodClass.h`:** width 9.5 cm (front/rear) and 14 cm (middle), 10 cm front-to-middle-to-rear. The Unity model has 10 / 13 / 10. Whichever chassis is current, measure before trusting `LEG_MOUNT_*`. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..5e72c1e --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,8 @@ +# Hexapod robot repo + +- The robot that is being worked on is in `2026-current/`. Read `2026-current/CLAUDE.md` before changing + anything there, and run its tools (PlatformIO, `sim/build.ps1`, Unity) from that folder. +- All other folders are history: earlier generations of the robot, named after the year they started + (see `README.md` for the timeline). Treat them as read-only reference material. +- Binaries go through Git LFS (`.gitattributes`). Line endings are never converted (`* -text`), so keep + files as they are. diff --git a/README.md b/README.md new file mode 100644 index 0000000..aaab8ca --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +# Hexapod robot + +Everything about my six-legged walking robot, from the first FPGA-driven version in 2009 to the +current Teensy robot with its firmware-in-the-loop Unity simulation. Each generation has its own folder, +named after the year it started, with its firmware, simulation, hardware, documents and photos together. + +**Working on the robot now? Go to [`2026-current/`](2026-current/).** Everything else is history. + +## Timeline + +| Folder | When | Hardware | What it did | +|---|---|---|---| +| [`original-frame/`](original-frame/) | 2009–2023 | own leg and body design (DXF/DWG) | the frame every version up to 2023 was built on (legs 2009, body and bracket 2011) | +| [`2009-fpga/`](2009-fpga/) | 2009–2011 | FPGA | the first version. The code is lost; only photos and videos are left | +| [`2011-firefly-mega-ssc32/`](2011-firefly-mega-ssc32/) | 2011–2012 | Arduino Mega 2560 + Lynxmotion SSC-32 | "FireFly": walking sequences with a Wii Nunchuk, later IR remote, ultrasonic radar head and GPS | +| [`2012-simulation/`](2012-simulation/) | 2012–2014 | PC | a Visual Studio leg-IK visualiser (2012) and a Processing 3D simulator (2014) | +| [`2014-ik-core-task-queue/`](2014-ik-core-task-queue/) | ≤ Feb 2014 | Arduino | a rewrite of the IK core around a task queue, without servo output yet | +| [`2016-ssc32-processing-port/`](2016-ssc32-processing-port/) | ~2016–2018 | Arduino + SSC-32 | the Processing simulator's classes ported to Arduino, driving the SSC-32 again | +| [`2018-unity-sim/`](2018-unity-sim/) | 2018–2023 | PC + SSC-32, later the Teensy | Unity computes the walking and drives the robot: first the SSC-32 over serial, from 2019 through the remote | +| [`2019-teensy-nrf24/`](2019-teensy-nrf24/) | 2019–2022 | Teensy 3.6 on the robot (replaces the SSC-32), Teensy remote with Nextion screen, nRF24L01 | servo passthrough: Unity → remote over USB → radio → robot | +| [`2026-current/`](2026-current/) | 2026– | Teensy 3.6 robot, Teensy 4.1 remote, Fusion 360 designed parts | IK, gait, body pose and IMU stabilisation on the robot; the unchanged firmware also runs inside Unity | + +## Repository notes + +- Photos, videos, PDFs, Office files, CAD and other binaries are stored with **Git LFS** (see `.gitattributes`). + A normal clone downloads them; set `GIT_LFS_SKIP_SMUDGE=1` to clone only the code. +- Files are stored exactly as they were (no line-ending conversion), so old code is byte-for-byte the original. +- This repo was put together in October 2026 from the Gitea repos `Hexapod_2027`, `Hexapod`, `Hexapod-App`, + `Hexapod-processing`, `Hexapod_Simulation_Unity`, `remote` and `Hexapod-Archief`, the NAS folder + `Projecten\Electronics\Hexapod`, the Arduino sketchbook and the Fusion 360 exports. The history of every repo + except `Hexapod-Archief` is kept (its own history only held the same photos and videos again). Old code + versions that only existed as rar files or backup folders are dated commits. diff --git a/original-frame/README.md b/original-frame/README.md new file mode 100644 index 0000000..ab0f87f --- /dev/null +++ b/original-frame/README.md @@ -0,0 +1,12 @@ +# Original frame (2009–2023) + +The mechanical design every version up to 2023 was built on. The 2026 robot has a new design, see +`../2026-current/hardware/fusion360/`. + +| File | Date | What | +|---|---|---| +| `poot.dxf` | 2009-10 | leg ("poot") | +| `hexapod been.dxf` | 2009-12 | leg ("been") | +| `poot2.dwg` | 2011-04 | leg, second version | +| `body.dxf`, `Body.jpg` | 2011-07 | body plate, for the Arduino Mega + SSC-32 rebuild | +| `bracket.dxf` | 2011-07 | servo bracket |