This commit is contained in:
2026-04-29 08:22:47 +02:00
parent 3f870d7462
commit caf5d29f73
4 changed files with 39 additions and 35 deletions
+24 -23
View File
@@ -45,11 +45,10 @@ d'analyse distantes.
| Plateforme | Raspberry Pi 4 — Debian Linux |
---
## Fonctionnalités
- Pilotage du bras CNC en GRBL — déplacement automatique puits par puits
- calibration des multi-puits avec synchro base de données
- Calibration des multi-puits avec synchro base de données
- Acquisition image haute définition via ArduCam (OpenCV + Picamera2)
- Stockage des frames en base time série ReductStore
- Sessions de scan paramétrables (grille complète ou sélection de puits)
@@ -62,29 +61,28 @@ d'analyse distantes.
- Interface administration Django (sqlite3 ou mariadb ou postgresql)
- Suivi de progression des tâches longues par polling
## Planaire simulation de mouvement aléatoire
Supporte plusieurs planaires avec paramètres configurables via django ou csv.
Supporte plusieurs planaires avec paramètres configurables via arguments CLI.
Export CSV par planaire compatible EthoVision XT.
Seuils EthoVision par défaut (configurables en arguments) :
### Seuils EthoVision par défaut (configurables via django ou csv)
- Immobile : déplacement < 0.2 mm/s
- Mobile : 0.2 à 1.5 mm/s
- Très mobile : > 1.5 mm/s
- **Immobile** : déplacement < 0.2 mm/s
- **Mobile** : 0.2 à 1.5 mm/s
- **Très mobile** : > 1.5 mm/s
- EthoVision CSV frames CSV summary
- ========== ========== ===========
- movedCenter-pointTotalmm total_distance_mm movedCenter_pointTotal_mm
- VelocityCenter-pointMeanmm/s velocity_mm_s velocity_mean_mm_s
- MovementMoving moving, duration_moving_s movement_moving_duration_s
- MovementNot Moving duration_stopped_s movement_not_moving_duration_s
- ImmobileFrequency / Duration mobility_state mobility_immobile_frequency/duration_s
- MobileFrequency / Duration mobility_state mobility_mobile_frequency/duration_s
- Highly mobileFrequency / Duration mobility_state mobility_highly_mobile_frequency/duration_s
| EthoVision | CSV frames | CSV summary |
|---|---|---|
| movedCenter-pointTotalmm | total_distance_mm | movedCenter_pointTotal_mm |
| VelocityCenter-pointMeanmm/s | velocity_mm_s | velocity_mean_mm_s |
| MovementMoving | moving, duration_moving_s | movement_moving_duration_s |
| MovementNot Moving | duration_stopped_s | movement_not_moving_duration_s |
| ImmobileFrequency / Duration | mobility_state | mobility_immobile_frequency/duration_s |
| MobileFrequency / Duration | mobility_state | mobility_mobile_frequency/duration_s |
| Highly mobileFrequency / Duration | mobility_state | mobility_highly_mobile_frequency/duration_s |
### Métriques calculées
Métriques calculées :
- Distance totale parcourue (mm) → movedCenter-pointTotalmm
- Vitesse instantanée (mm/s) → VelocityCenter-pointMeanmm/s
- Durée cumulée en mouvement (s) → MovementMoving
@@ -92,11 +90,14 @@ Métriques calculées :
- Fréquence et durée par état de mobilité → Mobility state (EthoVision)
- Distance à la paroi (mm) → thigmotactisme
Comportements simulés :
- Thigmotactisme : attraction vers la paroi (--thigmotaxis)
- Phototactisme : fuite de la lumière (--photo-mode, --photo-strength)
- Chimiotactisme : attraction vers une source de nourriture (--chemo-strength)
- Inter-individus : évitement de contact, agrégation, répulsion chimique
### Comportements
- **Thigmotactisme** : attraction vers la paroi (--thigmotaxis)
- **Phototactisme** : fuite de la lumière (--photo-mode, --photo-strength)
- **Chimiotactisme** : attraction vers une source de nourriture (--chemo-strength)
- **Inter-individus** : évitement de contact, agrégation, répulsion chimique
---
## Architecture
+3
View File
@@ -196,6 +196,9 @@ def on_exports_done(results: list, session_id: str):
@shared_task
def scanning(session_id: str):
"""
Scanning différé.
"""
try:
scanner = task_manager.scanner
scanner.cam.set_median(is_median=False)
@@ -9,7 +9,7 @@
{% block content %}
<div class="w3-row w3-black">
<div class="w3-col w3-center" style="width:20%">
<div class="w3-col w3-center" style="width:25%">
<div class="w3-row w3-row-padding">
<div class="w3-col w3-margin-bottom">
{% trans 'Position multi-puit' %}<br>
@@ -109,10 +109,10 @@
</div>
</div>
</div>
<div class="w3-col" style="width: 60%">
<div class="w3-col" style="width: 50%">
{% include 'scanner/scan-image.html' %}
</div>
<div class="w3-col w3-center" style="width: 20%">
<div class="w3-col w3-center" style="width: 25%">
<div class="w3-row w3-row-padding">
<div class="w3-col">
<div class="w3-right-align w3-small"><span id="_ts"></span></div>
@@ -30,8 +30,8 @@
{% block content %}
<div id="replay-grid" class="w3-black">
{% if image %}
<div class="w3-card-4 w3-border" style="min-width: 640px">
<img id="_replay_img" src="{{ image }}" style="width: 100%">
<div class="w3-card-4 w3-border">
<img id="_replay_img" src="{{ image }}" style="max-width: 800px;">
<div class="w3-bar w3-padding-small w3-light-grey">
<span class="w3-bar-item w3-marging-right w3-dark-xlight" >{{ uuid }}</span>
<button id="_replay_play" class="w3-bar-item w3-btn"><i class="fa-solid fa-play"></i></button>