Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
5136c41
Couche de liaison agnostique du transport, et premier capteur jusqu'à…
WilliamH07 Sep 11, 2026
f64b776
Corrections issues de la relecture croisée du firmware et de la pile ROS
WilliamH07 Sep 11, 2026
0940149
Le script de dépendances vérifie son propre résultat
WilliamH07 Sep 11, 2026
55ea777
Inclusion explicite de esp_attr.h pour IRAM_ATTR et WORD_ALIGNED_ATTR
WilliamH07 Sep 11, 2026
653d6d0
Enregistre le sous-module sh2 (v1.4.0, Apache 2.0)
WilliamH07 Sep 11, 2026
7b82ca9
Câblage du BNO085 : la broche d'adresse I2C devient MOSI en SPI
WilliamH07 Sep 11, 2026
a98aa9a
Latence d'émission, et journaux du firmware enfin visibles
WilliamH07 Sep 11, 2026
6d37c50
Instrumenter le chemin SPI, et corriger la mesure d'aller-retour
WilliamH07 Sep 11, 2026
c54f027
Montrer les en-têtes SHTP lus, pour cesser de raisonner à l'aveugle
WilliamH07 Sep 11, 2026
1955d28
Lecture SHTP en deux transactions séparées, et non CS maintenu bas
WilliamH07 Sep 11, 2026
2aad2a5
Emettre des zeros sur MOSI pendant les lectures SHTP
WilliamH07 Sep 11, 2026
ba0a38b
Reveiller le BNO085 avant d'ecrire, et corriger la mesure d'aller-retour
WilliamH07 Sep 11, 2026
d01d3bc
Consigner la latence de liaison mesuree : 1,57 ms aller simple
WilliamH07 Sep 11, 2026
ed9c10a
Verser les documents de conception de la carte safety_power
WilliamH07 Sep 19, 2026
a51fd36
Documenter l'installation, le flash et la verification de bout en bout
WilliamH07 Sep 19, 2026
a2126e3
Etalonner le BNO085 : activation, sauvegarde du DCD, et pilotage au banc
WilliamH07 Sep 20, 2026
36d81ea
Corriger le chemin d'ESP-IDF dans le guide de demarrage
WilliamH07 Sep 20, 2026
a718f9e
Garder le pilote d'IMU independant du protocole, et verrouiller l'accord
WilliamH07 Sep 20, 2026
5ac9e5c
Consommer IMU_CAL cote ROS, et alerter quand l'etalonnage n'est pas s…
WilliamH07 Sep 20, 2026
e027b46
Ne pas compter le reset d'initialisation du BNO085 comme un incident
WilliamH07 Sep 20, 2026
2625b1d
Montrer ce que imu_cal.py recoit vraiment
WilliamH07 Sep 20, 2026
a27c137
Ne plus redemarrer l'ESP32 en ouvrant le port serie
WilliamH07 Sep 20, 2026
f2f3b49
Versionner la mise en page Foxglove du banc
WilliamH07 Sep 20, 2026
5e9049b
Remettre l'ESP32 en mode execution a l'ouverture du port
WilliamH07 Sep 20, 2026
c7f2373
Consigner le piege du bootloader ROM dans le guide de demarrage
WilliamH07 Sep 20, 2026
df8b078
Documenter l'etat du banc IMU et ce qu'il reste a faire
WilliamH07 Sep 20, 2026
c6ac38b
Preparer le banc lidar : YDLIDAR X4 jusqu'a Foxglove
WilliamH07 Sep 20, 2026
f8720dc
Lidar X4 : la configuration qui marche, etablie par la mesure
WilliamH07 Sep 20, 2026
f93e2bf
Lidar : invalid_range_is_inf est sans effet, le compter correctement
WilliamH07 Sep 20, 2026
f3d4a2c
Documenter les deux bancs : ce qui marche, ce qui a casse, comment la…
WilliamH07 Sep 20, 2026
0b165cb
Banc moteurs : nœud MOTION sur un second ESP32, trois ZS-X11H depuis …
WilliamH07 Sep 21, 2026
23c42cd
gitignore : verrous git périmés laissés par l'outil de session
WilliamH07 Sep 21, 2026
b360a7c
chore: garde-fous anti-secrets (hook pre-commit, gitleaks, CI)
WilliamH07 Oct 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .githooks/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/sh
# Bloque les commits contenant des secrets. Installer : sh scripts/install-hooks.sh
set -eu
cd "$(git rev-parse --show-toplevel)"
python3 scripts/secret_scan.py
if command -v gitleaks >/dev/null 2>&1; then
if [ -f .gitleaks.toml ]; then gitleaks git --staged --redact --no-banner --config .gitleaks.toml
else gitleaks git --staged --redact --no-banner; fi
fi
74 changes: 74 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Intégration continue.
#
# Ce que la CI protège, concrètement : qu'un firmware et un calculateur qui ne
# parlent pas le même protocole ne puissent pas arriver jusqu'à l'établi. C'est
# le mode de défaillance le plus coûteux d'un système embarqué distribué, parce
# qu'il ne produit pas d'erreur — il produit des valeurs plausibles et fausses.

name: ci

on:
push:
branches: [main]
pull_request:

jobs:
protocole:
name: Protocole et tests hôte
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Python
uses: actions/setup-python@v5
with:
python-version: "3.12"

- run: pip install pyyaml

- name: Les fichiers générés correspondent au YAML
run: python3 firmware/protocol/generate.py --check

- name: Tests hôte du firmware
run: make -C firmware/test

- name: Accord entre les trois implémentations du protocole
run: python3 tools/check_protocol_sync.py

firmware:
name: Firmware ESP32
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- name: Compilation ESP-IDF
uses: espressif/esp-idf-ci-action@v1
with:
esp_idf_version: v5.5
target: esp32
path: firmware/esp32_safety

ros:
name: Workspace ROS 2 Jazzy
runs-on: ubuntu-latest
container: ros:jazzy-ros-base
steps:
- uses: actions/checkout@v4

- name: Dépendances
shell: bash
run: |
apt-get update
rosdep update
rosdep install --from-paths ros2_ws/src --ignore-src -y || true

- name: Construction et tests
shell: bash
run: |
source /opt/ros/jazzy/setup.bash
cd ros2_ws
colcon build --symlink-install
colcon test --event-handlers console_direct+
colcon test-result --verbose
23 changes: 23 additions & 0 deletions .github/workflows/secret-scan.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: secret-scan

on:
push:
pull_request:

permissions:
contents: read

jobs:
gitleaks:
name: Recherche de secrets (tout l'historique)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Gitleaks
run: |
docker run --rm -v "$PWD:/repo:ro" zricethezav/gitleaks:v8.24.2 \
git /repo --redact=100 --exit-code=1
- name: Scan sans dépendance
run: python3 scripts/secret_scan.py --all
14 changes: 10 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,16 @@ venv/
*.elf
*.bin.tmp

# PlatformIO / ESP-IDF
.pio/
.pioenvs/
.piolibdeps/
# ESP-IDF
# sdkconfig est regenere a partir de sdkconfig.defaults, qui lui est versionne.
sdkconfig
sdkconfig.old
managed_components/
dependencies.lock
firmware/*/build/

# Tests hote
firmware/test/build/

# EasyEDA and PCB output
*-backups/
Expand All @@ -50,3 +55,4 @@ bags/
.idea/
.DS_Store
Thumbs.db
stale-*
3 changes: 3 additions & 0 deletions .gitleaks.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
title = "Retriever secret scanning"
[extend]
useDefault = true
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "firmware/components/retriever_imu/vendor/sh2"]
path = firmware/components/retriever_imu/vendor/sh2
url = https://github.com/ceva-dsp/sh2.git
9 changes: 9 additions & 0 deletions CREDITS.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,19 @@ exactly that reason.
| [robot_localization](https://github.com/cra-ros-pkg/robot_localization) | BSD 3 Clause | State estimation |
| [ros2_socketcan](https://github.com/autowarefoundation/ros2_socketcan) | Apache 2.0 | CAN interface |
| [husky/husky](https://github.com/husky/husky) | BSD 3 Clause | Package naming conventions |
| [ceva-dsp/sh2](https://github.com/ceva-dsp/sh2) | Apache 2.0 | BNO085 sensor hub stack, vendored as a submodule at v1.4.0 and unmodified. The ESP32 SPI port is this project's own. |
| [foxglove_bridge](https://github.com/foxglove/ros-foxglove-bridge) | MIT | WebSocket bridge for visualisation |
| [diagnostic_updater](https://github.com/ros/diagnostics) | BSD 3 Clause | Diagnostics |

## Prior work by the author

Retriever follows a full rebuild of the [Niryo
One](https://github.com/NiryoRobotics/niryo_one), an open source six axis
robotic arm. That project is where most of the practical knowledge behind this
one came from.

## Algorithms

The serial framing uses Consistent Overhead Byte Stuffing, described in
Cheshire & Baker, *Consistent Overhead Byte Stuffing*, IEEE/ACM Transactions on
Networking, 1999. The implementation is this project's own; the idea is theirs.
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ measurable exit criterion at every stage.
|:-----:|----------------|-------|
| 1 | Architecture and CAD design complete | done |
| 2 | Chassis fabricated and assembled | **current** |
| 2b | First sensor published to ROS 2 over a transport-agnostic link | **current** |
| 3 | Power chain energised, no motor connected | next |
| 4 | Motors driven, wheels raised, all stop tests pass | planned |
| 5 | Autonomous outdoor navigation to a waypoint | planned |
Expand Down Expand Up @@ -138,6 +139,15 @@ ros2_ws/src/

## Documentation

**Where the work stands:** [HANDOFF — IMU](docs/HANDOFF-banc-imu.md) and
[HANDOFF — lidar](docs/HANDOFF-banc-lidar.md) — what runs today with measured
numbers, the silent defects found and how each one worked, and what is left to
do once the sensors are mounted. In French.

**Start here:** [Démarrage](docs/DEMARRAGE.md) — what to install, how to flash
the ESP32, how to build the ROS 2 workspace, and how to verify the IMU chain at
every stage, with the traps that have already cost a day each. In French.

The architecture dossier was written before construction began. It is in
French; an English summary is planned.

Expand All @@ -151,6 +161,7 @@ French; an English summary is planned.
| [05 Software](docs/architecture/05-reseau-code-tests-physique.md) | Network, code layout, test strategy |
| [06 BOM](docs/architecture/06-bom-fmea-schema-plan.md) | Bill of materials, FMEA, build plan |
| [07 Operator](docs/architecture/07-interface-operateur.md) | Operator console |
| [13 Software](docs/architecture/13-architecture-logicielle-liaison.md) | Link layer, firmware, ROS 2 chain, IMU bench |

Every claim in these documents carries a marker: verified against a datasheet,
community consensus, to be measured, or an explicit assumption. Nothing gets
Expand Down
Loading
Loading