LESTAL / coquille /programme2.py
lucasfiotti
Simulation synchrone avec le lancement de l'interface + bouton supprimer + impossible de mettre deux noms identiques à une vidéo
8afa347
Raw
History Blame Contribute Delete
2.49 kB
import threading
from reachy_mini import ReachyMini, ReachyMiniApp
from reachy_mini.utils import create_head_pose
import numpy as np
import time
from pydantic import BaseModel
class Test(ReachyMiniApp):
# Optional: URL to a custom configuration page for the app
# eg. "http://localhost:8042"
custom_app_url: str | None = "http://0.0.0.0:8042"
# Optional: specify a media backend ("gstreamer", "gstreamer_no_video", "default", etc.)
# On the wireless, use gstreamer_no_video to optimise CPU usage if the app does not use video streaming
request_media_backend: str | None = None
def run(self, reachy_mini: ReachyMini, stop_event: threading.Event):
t0 = time.time()
antennas_enabled = True
sound_play_requested = False
# You can ignore this part if you don't want to add settings to your app. If you set custom_app_url to None, you have to remove this part as well.
# === vvv ===
class AntennaState(BaseModel):
enabled: bool
@self.settings_app.post("/antennas")
def update_antennas_state(state: AntennaState):
nonlocal antennas_enabled
antennas_enabled = state.enabled
return {"antennas_enabled": antennas_enabled}
@self.settings_app.post("/play_sound")
def request_sound_play():
nonlocal sound_play_requested
sound_play_requested = True
# === ^^^ ===
# Main control loop
while not stop_event.is_set():
t_start = time.time()
while time.time() - t_start < 15.0:
t = time.time() - t0
y_m = 0.03 * np.sin(2.0 * np.pi * 0.2 * t)
pitch_deg = 30.0 * np.sin(2.0 * np.pi * 0.6 * t)
head_pose = create_head_pose(y=y_m, pitch=pitch_deg, degrees=True)
reachy_mini.set_target(head=head_pose)
time.sleep(0.01)
t_start = time.time()
while time.time() - t_start < 15.0:
t = time.time() - t0
x_m = 0.03 * np.cos(2.0 * np.pi * 0.2 * t)
y_m = 0.03 * np.sin(2.0 * np.pi * 0.2 * t)
z_m = 0.0
head_pose = create_head_pose(x=x_m, y=y_m, z=z_m, degrees=True)
reachy_mini.set_target(head=head_pose)
time.sleep(0.01)
if __name__ == "__main__":
app = Test()
try:
app.wrapped_run()
except KeyboardInterrupt:
app.stop()