Interface de contrôle et d'imagerie astronomique avancée pour Raspberry Pi, optimisée pour le capteur IMX585 et les sessions en ciel profond, planétaire et solaire.
Dérivé de RPiCamera de Gordon999, entièrement réécrit avec une interface graphique Pygame native, un pipeline de traitement RAW12 et des modules d'imagerie avancée compilés avec Halide pour les accélérations critiques.
| Composant | Détail |
|---|---|
| Raspberry Pi 5 | Architecture aarch64 — Debian 12 Bookworm |
| Capteur | IMX585 (nécessite libcamera custom) |
| Écran | 7″ HDMI tactile recommandé — LCD Wiki |
| Stockage | NVMe SSD (recommandé, voire indispensable pour RAW12 haute cadence) |
| GPIO (optionnel) | Boutons externes mise au point / déclenchement |
| IMU (optionnel) | BNO085 à installer sur le RPI0 de la Minicam pour AstroHopper. Sur le RPI5: mise en station polaire / Finder |
pip3 install pygame opencv-python numpy matplotlib scipy scikit-image \
picamera2 gpiozero Pillow websocket-client astropy| Bibliothèque | Usage |
|---|---|
pygame |
Interface graphique, events, affichage preview |
opencv-python |
Traitement d'image, débayérisation, alignement |
numpy |
Calculs matriciels, pipeline RAW |
matplotlib |
Histogrammes RGB/luminance |
scipy |
Filtres, reconstruction d'axe polaire robuste (N≥4) |
scikit-image |
Détection de pics, imagerie planétaire |
picamera2 |
Interface Raspberry Pi Camera |
gpiozero |
Boutons GPIO externes |
Pillow |
Chargement/sauvegarde d'images |
websocket-client |
Communication MiniCam (caméra secondaire) |
astropy |
Position précise de Polaris (optionnel) |
# Outils de base
sudo apt install ffmpeg libcamera-dev libcamera-apps
# ASTAP — plate solving (Finder, Push-To, Polar Align)
# Télécharger le binaire ARM64 et les catalogues sur https://www.hnsky.org/astap.htm
sudo cp astap /usr/bin/astap
sudo chmod +x /usr/bin/astap
sudo mkdir -p /opt/astap
# Copier les catalogues G05 ou D05 dans /opt/astap/Le programme nécessite la libcamera modifiée par will12753 pour le support complet du capteur IMX585 (RAW12, tuning, contrôles avancés).
git clone https://github.com/remis-astr/Rpicamera2---Halide.git
cd Rpicamera2---HalideAucune étape de compilation Python n'est nécessaire. Les pipelines Halide sont précompilés en .so dans libastrostack/halide/.
Copier et adapter PiLCConfig104.txt à la racine du projet. Ce fichier contient tous les paramètres persistants (résolution, gains, latitude/longitude observateur, chemins de sauvegarde, etc.).
| Type | Répertoire |
|---|---|
| Photos / RAW | ~/Pictures/ (NVMe recommandé — la carte SD est trop lente pour le RAW12 haute cadence) |
| Vidéos | ~/Videos/ |
| Live Stacks | ~/stacks/live/ |
| Config | ~/PiLCConfig104.txt |
| Logs | ~/rpicamera2.log |
# Manuel
python3 RPiCamera2.py
Pour un démarrage automatique au boot, configurer start_rpicamera2.sh comme service systemd ou entrée autostart.
| Mode | Description |
|---|---|
| Preview | Aperçu temps réel avec histogramme, HFR/FWHM, SNR, AF |
| Still / RAW | Capture JPEG, PNG, RAW12 (DNG-compatible) |
| Vidéo | H.264, MJPEG, YUV420, RAW → SER (voir ci-dessous) |
| Timelapse / AllSky | Acquisition séquentielle, stacking timelapse |
Le mode zoom active un recadrage ROI sur le capteur, réduisant la résolution et augmentant significativement le framerate. Pour l'IMX585 :
| Résolution | FPS max |
|---|---|
| 640 × 480 | ~220 fps |
| 800 × 600 | ~178 fps |
| 1280 × 720 | ~150 fps |
| 1920 × 1080 | ~100 fps |
| 2880 × 2160 | ~51 fps |
Les vidéos YUV420 et RAW peuvent être converties automatiquement au format SER (avec timestamps, compatible RegiStax / AutoStakkert!3 / PIPP).
| Mode | Description |
|---|---|
| Live Stack DSO | Empilement temps réel RAW12 natif — pipeline Halide + GHS stretch |
| Lucky Stack RGB8 | Sélection des meilleures frames sur flux RGB8/YUV — score, alignement, stack, post-filtres |
| Lucky Stack RAW | Même pipeline mais en domaine Bayer RAW12 : score sur canal G1 linéaire, alignement sous-pixel, débayérisation unique en fin de stack — pas d'artefact ISP, 12 bits préservés |
| JSK Live | Pipeline HDR + débruitage pour ciel profond : RAW12 → stack (1–4 frames) → fusion HDR (médiane / moyenne / Mertens) → débayer → débruitage (bilatéral, Gaussian, médian, guided) → stretch. Accéléré ×16 via pipeline Halide AOT |
| Galaxy | Live stack pipeline HDR (JSK) avec enhancement galactique multi-échelle : réduction d'étoiles (ouverture morphologique) + filtre Frangi structurel modifié + USM multi-échelle. 3 presets : Elliptique, Spirale, Par la tranche |
| Moon Mineral | 6 presets scientifiques — saturation HSV, décorrélation PCA, faux-couleurs spectral NASA |
| Solar | Traitement dédié imagerie solaire |
| Collimation | Assistant de collimation par cercles concentriques |
Contrôle d'une deuxième caméra (Pi Zero / Pi 5) via WiFi ou USB-gadget :
| Sous-mode | Description |
|---|---|
| Live Stack | DSO sur la MiniCam en parallèle |
| Galaxy | Stack galaxies RAW |
| Lucky RAW | Lucky imaging RAW depuis la MiniCam |
| Solve (Push-To) | Plate solving ASTAP + synchronisation Stellarium via protocole LX200 |
| Finder | Vue grand champ pour pointage |
| Polar Align | Mise en station polaire de la table équatoriale (voir ci-dessous) |
Accessible depuis le bouton POLAR ALIGN du panneau MiniCam.
- Capturer N positions (3 à 6) — la table tourne sur ~14° pendant la session
- Plate solving ASTAP automatique sur chaque capture
- Calcul de l'axe : produit vectoriel (N=3) ou moindres carrés robuste scipy (N≥4)
- Résultat : ΔAlt et ΔAz en arcminutes avec carte polaire Pygame (NCP, Polaris rotatif, flèche de correction)
- Guidage live : phases LIVE_ALT et LIVE_AZ avec feedback IMU en temps réel
Précision typique avec ASTAP (~5") et 14° d'arc : ±2–10' selon le nombre de captures.
RPiCamera2.py # Programme principal (~20 000 lignes)
polar_alignment.py # Calculs purs mise en station (coordonnées, axe, IMU)
polar_widgets.py # Widget carte polaire Pygame
polar_align_screen.py # Interface mise en station (machine à états 5 phases)
start_rpicamera2.sh # Script de lancement
PiLCConfig104.txt # Configuration persistante
libastrostack/
├── session.py # Pipeline Live Stack RAW12
├── lucky_imaging.py # Lucky stack RGB/RAW
├── jsk_live.py # Pipeline JSK planétaire
├── mineral_moon.py # Traitement lune minérale
├── solar.py # Traitement solaire
├── minicam.py # Interface caméra secondaire
├── platesolve.py # Plate solving ASTAP
├── stellarium_client.py # Protocole LX200 / Stellarium
├── aligner.py # Alignement inter-frames
├── stretch.py # GHS, Arcsinh, Log, MTF
├── finder/ # Mode Finder + Push-To + IMU AstroHopper
└── halide/ # Pipelines Halide AOT (.so précompilés ARM64)
Le module IMU utilise un BNO085 connecté à la MiniCam via I²C. La calibration des biais se fait depuis l'interface web de la MiniCam (http://<ip>:8000). Les axes sont remappés en convention Y-up avec zone morte configurable.
- Programme de base : Gordon999/RPiCamera — licence MIT
- libcamera IMX585 : will12753/libcamera-imx585
- Plate solving : ASTAP — Han Kleijn
- Capteur IMX585 : SOHO Enterprise
GPL-3.0 — voir fichier LICENSE.
Attributions tierces dans NOTICE.