Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
00dfa3f
Feat : Creation du fichier backend qui permettra de recupererles inf…
ExoRoy Nov 1, 2025
9337d68
Feat : Ajout de la vision de la camera
ExoRoy Nov 4, 2025
c783228
Fix: mis Ip arduin o pour le site
ExoRoy Nov 4, 2025
b16d93a
fix : import
ExoRoy Nov 4, 2025
59fce7b
Feat : Creation du seerveur et adapdation de backend
ExoRoy Nov 4, 2025
9a94768
Même chose que precedament
ExoRoy Nov 4, 2025
43f7e15
suppression du serveur de cette branch)
ExoRoy Nov 5, 2025
dece7b4
Ajout du serveur a la branch main manager. Attention pas encore eu la…
ExoRoy Nov 5, 2025
b187753
Merge branch 'main-manager' into backend
ExoRoy Nov 5, 2025
58e9f80
test
ExoRoy Nov 5, 2025
b13868d
test
ExoRoy Nov 5, 2025
9b0f22e
Merge branch 'main-manager' into backend
ExoRoy Nov 5, 2025
35dced8
rest
ExoRoy Nov 5, 2025
37af357
Merge branch 'main' into backend
ExoRoy Nov 21, 2025
72a490a
Merge remote-tracking branch 'origin/main-manager' into backend
ExoRoy Nov 21, 2025
48e3e34
tkt
ExoRoy Nov 21, 2025
77ebb65
Je pleure a cause des probleme de conflits
ExoRoy Nov 22, 2025
bcfa7f7
modif webapp
ExoRoy Nov 27, 2025
298f903
ajout dependance pas faire attention
ExoRoy Dec 19, 2025
2d3e8a8
Merge remote-tracking branch 'origin/main-manager' into backend
ExoRoy Dec 19, 2025
644dcb4
modif du backend a test quand je serai sur des fonctions a use
ExoRoy Dec 19, 2025
caf3199
Merge branch 'main-manager' into backend
Cbampeta Jan 9, 2026
fbabfda
feat: test de backend.py
Cbampeta Jan 10, 2026
a51bdc9
feat: rajout du frontend et du backend simple avec implementation du …
Cbampeta Jan 10, 2026
f88f004
feat : oublie de app.js oups
Cbampeta Jan 10, 2026
3b1916c
feat : suppression de truc inutile
Cbampeta Jan 10, 2026
eb09ea3
Merge branch 'main-manager' into backend
Cbampeta Jan 10, 2026
949da5b
feat: rajout de lien complet
Cbampeta Jan 10, 2026
e3406dd
feat: rajout du lancement automatique du backend et de la camera au l…
Cbampeta Jan 11, 2026
61fbe87
rajout du stream du lidar pour le recupe sur le site
Cbampeta Jan 11, 2026
b9c9755
feat: rajout la possibilité de stream le lidar
Cbampeta Jan 11, 2026
3f465d7
fix: petit fix dans le stream du lidar
Cbampeta Jan 11, 2026
7c671cd
feat : rajout a la page lidar et au backend pour afficher les points …
Cbampeta Jan 11, 2026
82c2d6f
fix: fix de l'apperçue du lidar dans le site
Cbampeta Jan 11, 2026
fc26b54
fix : test
Cbampeta Jan 11, 2026
887d8ab
fix : fix du lidat
Cbampeta Jan 11, 2026
7511ebd
fix : fix du lidar sur le site
Cbampeta Jan 11, 2026
fdb25b6
feat: rajout de property pour direction_d et vitesse_d. pour plus de …
Cbampeta Jan 11, 2026
2323ce2
feat: rajout de la vitesse demander et direction demander au site
Cbampeta Jan 11, 2026
d0545b9
feat: rajout de websocket dans les dependance
Cbampeta Jan 11, 2026
3d6d66f
rajout de websockets
Cbampeta Jan 11, 2026
72b232f
feat : rajout de la consigne réel et de la direction demandé
Cbampeta Jan 11, 2026
db15261
feat: rajout de la visualisation de la diférence entre vitesse_réel e…
Cbampeta Jan 11, 2026
100d15f
fix : suppression d'un fichier inutile
Cbampeta Jan 13, 2026
1a9656d
fix:passage avec un system de wobsocket pour moin de log impossible
Cbampeta Jan 14, 2026
667acf4
fix: soucis dans poweroff fix (un log qui bloqué le poweroff
Cbampeta Jan 14, 2026
b93d2c9
feat: rajout du fait que le lidar et la camera sont clicable pour pou…
Cbampeta Jan 15, 2026
ef88bad
fix: vue pour lorsque la voiture recule
Cbampeta Jan 15, 2026
364eabd
feat: suppression de chose inutile
Cbampeta Jan 16, 2026
723af24
fix: pour que mat soit content (suppression dosssier inutile et chang…
Cbampeta Jan 24, 2026
a4d07b0
fix: changement des nom des variable en anglais
Cbampeta Jan 26, 2026
e617139
feat: for happy matthias
Cbampeta Jan 26, 2026
90b10b3
feat: minus error
Cbampeta Jan 26, 2026
be57b1a
feat: pour le genti matthias
Cbampeta Jan 26, 2026
d11c7e9
fix: oublie de crochet)
Cbampeta Jan 26, 2026
a8ebf97
feat: rajout du logo de autotech en haut à gauche de la page
Cbampeta Jan 27, 2026
6dc82f1
fix la top barre du site avec le logo
Cbampeta Jan 27, 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
6 changes: 6 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ authors = [
]

dependencies = [

]

[project.optional-dependencies]
Expand Down Expand Up @@ -64,4 +65,9 @@ rpi = [
"matplotlib>=3.10.5",
"opencv-python>=4.12.0.88",
"scipy>=1.15.3",
"websockets>=16.0",
"fastapi>=0.128.0",
"uvicorn>=0.40.0",
"websocket>=0.2.1",
"websockets>=16.0",
]
14 changes: 7 additions & 7 deletions scripts/commande_PS4.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def envoie_donnee(Voiture): #si utilisation de la voiture directement
bus = smbus.SMBus(1)
while True:
try :
data = struct.pack('<ff', float(round(Voiture.vitesse_mms)), float(round(Voiture.direction_d)))
data = struct.pack('<ff', float(round(Voiture.vitesse_mms)), float(round(Voiture.direction)))
bus.write_i2c_block_data(SLAVE_ADDRESS, 0, list(data))
#time.sleep(0.00005)
except Exception as e:
Expand Down Expand Up @@ -64,20 +64,20 @@ def kill(self):
self.running = False

@property
def vitesse_d(self):
def target_speed(self):
return self.controller.vitesse_mms

@property
def direction_d(self):
return self.controller.direction_d
def direction(self):
return self.controller.direction

class MyController(Controller):

def __init__(self, **kwargs):
super().__init__(**kwargs)
self.log = logging.getLogger(__name__)
self.vitesse_mms = 0 # vitesse initiale en métre par milliseconde
self.direction_d = 0 # angle initiale des roues en degrés
self.direction = 0 # angle initiale des roues en degrés
self.filtered = 0
self.alpha = 0.3
self.running = 0
Expand Down Expand Up @@ -120,12 +120,12 @@ def on_R1_release(self):
def on_L3_right(self,value):
# print("x_r :", value, "degré : ",map_range(value,-32767, 32767, 60, 120))
dir = map_range(value, 0, 32767, 0, MAX_ANGLE)
self.direction_d = dir
self.direction = dir

def on_L3_left(self,value):
#print("x_r :", value, "degré : ",map_range(value,-32767, 0, -MAX_ANGLE, 0 ))
dir = self.stable_direction(value)
self.direction_d = dir
self.direction = dir


def on_L2_press(self, value):
Expand Down
12 changes: 6 additions & 6 deletions scripts/remote_control_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

def envoie_donnee():
global vitesse_m, direction_d
global vitesse_m, direction
while True:
packet = struct.pack("ff", vitesse_m, direction_d)
packet = struct.pack("ff", vitesse_m, direction)
sock.sendto(packet, ("192.168.1.10", 5556))
time.sleep(0.05)

###################################################
# Paramètres véhicule
###################################################
direction_d = 0
direction = 0
vitesse_m = 0

vitesse_max_m_s_soft = 2
Expand All @@ -30,9 +30,9 @@ def map_range(x, in_min, in_max, out_min, out_max):
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min

def set_direction_degre(angle_degre):
global direction_d
direction_d = angle_degre
print(direction_d, vitesse_m)
global direction
direction = angle_degre
print(direction, vitesse_m)

def set_vitesse_m_ms(vit):
global vitesse_m
Expand Down
8 changes: 7 additions & 1 deletion src/HL/Autotech_constant.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
TEXT_LEFT_OFFSET = 3 # Offset from the left of the screen to ensure no cuttoff



script_dir = os.path.dirname(os.path.abspath(__file__))
MODEL_PATH = os.path.join(script_dir, "model_CNN1D.onnx") # Allows the model to be loaded from the same directory as the script regardless of the current working directory (aka where the script is run from)

Expand All @@ -59,4 +60,9 @@
# In our case Higher temperature means less agressive driving and lower temperature means more aggressive driving.


LOGGING_LEVEL = logging.DEBUG # can be either NOTSET, DEBUG, INFO, WARNING, ERROR, CRITICAL
LOGGING_LEVEL = logging.DEBUG # can be either NOTSET, DEBUG, INFO, WARNING, ERROR, CRITICAL

#Startup
CAMERA_STREAM_ON_START = True #If True the camera stream will start at the launch of the car
BACKEND_ON_START = True #If True the backend will start at the launch of the car
LIDAR_STREAM_ON_START = True #If True the lidar stream will start at the launch of the car
19 changes: 18 additions & 1 deletion src/HL/Serveur_mq.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
from src.HL.actionneur_capteur.Camera import ProgramStreamCamera
from src.HL.programme.module_initialisation import Initialisation
from src.HL.programme.Car import Ai_Programme
from backend import BackendAPI

from Autotech_constant import I2C_NUMBER_DATA_RECEIVED, I2C_SLEEP_RECEIVED, I2C_SLEEP_ERROR_LOOP, TEXT_HEIGHT, TEXT_LEFT_OFFSET

Expand Down Expand Up @@ -77,7 +78,14 @@ def __init__(self):

self.initialisation_module = Initialisation(self,Camera,Lidar,ToF, I2c_arduino)

self.programme = [SshProgramme(), self.initialisation_module, Ai_Programme(self), PS4ControllerProgram(), RemoteControl(), ProgramStreamCamera(self), Poweroff()]
self.programme = [SshProgramme(),
self.initialisation_module,
Ai_Programme(self),
PS4ControllerProgram(),
RemoteControl(),
ProgramStreamCamera(self),
BackendAPI(self, host="0.0.0.0", port=8001, site_dir="/home/intech/CoVAPSy/src/HL/site_controle"),
Poweroff()]
self.log.debug("Programmes chargés: %s", [type(p).__name__ for p in self.programme])

# donnée de l'écran
Expand All @@ -101,6 +109,15 @@ def tof(self):
@property
def arduino_I2C(self):
return self.initialisation_module.arduino_I2C

@property
def target_speed(self):
return self.programme[self.last_programme_control].target_speed

@property
def direction(self):
return self.programme[self.last_programme_control].direction

#-----------------------------------------------------------------------------------------------------
# affichage de l'écrans
#-----------------------------------------------------------------------------------------------------
Expand Down
6 changes: 5 additions & 1 deletion src/HL/actionneur_capteur/Camera.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def outputframe(self, frame, keyframe=True):

from src.HL.programme.Camera_serv import StreamServer, StreamHandler, StreamOutput, frame_buffer
from src.HL.programme.programme import Program
from src.HL.Autotech_constant import PORT_STREAMING_CAMERA, SIZE_CAMERA_X, SIZE_CAMERA_Y, FRAME_RATE, CAMERA_QUALITY, STREAM_PATH
from src.HL.Autotech_constant import PORT_STREAMING_CAMERA, SIZE_CAMERA_X, SIZE_CAMERA_Y, FRAME_RATE, CAMERA_QUALITY, STREAM_PATH, CAMERA_STREAM_ON_START

class ProgramStreamCamera(Program):
def __init__(self,serveur):
Expand All @@ -50,6 +50,10 @@ def __init__(self,serveur):
self.serveur = serveur
self.running = False
self.controls_car = False

if CAMERA_STREAM_ON_START:
self.start()


@property
def camera(self):
Expand Down
7 changes: 4 additions & 3 deletions src/HL/actionneur_capteur/masterI2C.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class I2c_arduino:
def __init__(self,serveur):
self.log = logging.getLogger(__name__)
self.serveur = serveur
self.vitesse_r = 0
self.current_speed = 0
self.send_running = True
self.receive_running = True

Expand All @@ -32,8 +32,9 @@ def start_send(self):
self.log.info("Thread I2C loop démarré")
while self.send_running:
try :
data = struct.pack('<ff', float(round(self.serveur.programme[self.serveur.last_programme_control].vitesse_d)), float(round(self.serveur.programme[self.serveur.last_programme_control].direction_d)))
data = struct.pack('<ff', float(round(self.serveur.target_speed)), float(round(self.serveur.direction)))
self.bus.write_i2c_block_data(SLAVE_ADDRESS, 0, list(data))
time.sleep(1e-5) # Short delay to prevent overwhelming the bus
except Exception as e:
self.log.error("Erreur I2C write: %s", e, exc_info=True)
time.sleep(I2C_SLEEP_ERROR_LOOP)
Expand All @@ -52,7 +53,7 @@ def start_received(self):
# on enregistre les valeur
self.voltage_lipo = list_valeur[0]
self.voltage_nimh = list_valeur[1]
self.vitesse_r = list_valeur[2]
self.current_speed = list_valeur[2]
else:
self.log.warning("I2C: taille inattendue (%d au lieu de %d)", len(data), length)
time.sleep(I2C_SLEEP_RECEIVED)
Loading