diff --git a/Dockerfile b/Dockerfile index 46f2173..5206d2d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,10 +25,10 @@ RUN make px4_sitl_default RUN pip3 install typer-slim loguru sh -RUN apt-get install --yes virtualbox-guest-dkms virtualbox-guest-utils spice-vdagent qemu-guest-agent -RUN apt-get install --yes docker-compose-v2 firefox +# RUN apt-get install --yes virtualbox-guest-dkms virtualbox-guest-utils spice-vdagent qemu-guest-agent +RUN apt-get install --yes docker-compose-v2 #Install our desktop environment last -RUN apt-get install --yes --no-install-recommends lxqt sddm +# RUN apt-get install --yes --no-install-recommends lxqt sddm firefox COPY ./skel/ /opt/spiri-sdk/user-home-skeleton/ RUN cp -r /opt/spiri-sdk/user-home-skeleton/* /etc/skel/ diff --git a/skel/Desktop/simulated-drone/sim_drone.py b/skel/Desktop/simulated-drone/sim_drone.py index 7630aa0..4d7b8f4 100755 --- a/skel/Desktop/simulated-drone/sim_drone.py +++ b/skel/Desktop/simulated-drone/sim_drone.py @@ -1,6 +1,11 @@ #!/bin/env python3 -import typer, os, sys, contextlib +import typer +import os +import sys +import contextlib +import pathlib import time +import functools from loguru import logger import sh import atexit @@ -45,6 +50,9 @@ class outputLogger: elif message.startswith("ERROR"): message = message.lstrip("ERROR") logger.error(message) + elif message.startswith("DEBUG"): + message = message.lstrip("DEBUG") + logger.debug(message) else: logger.info(message) @@ -102,7 +110,7 @@ def wait_for_gazebo(timeout=60, interval=1): @app.command() -def start(sys_id: int = 1): +def start(sys_id: int = 1, extra_apps: list[pathlib.Path] = []): """Starts the simulated drone with a given sys_id, each drone must have it's own unique ID. """ @@ -131,14 +139,27 @@ def start(sys_id: int = 1): _bg=True, ) processes.append(docker_stack) + for extra_app in extra_apps: + logger.info(f"Starting app {extra_app}, this may take some time") + app_name = extra_app.stem + app_stack = sh.docker.compose( + "--project-name", + f"simulated_robot_{sys_id}_{app_name}", + "up", + _out=outputLogger(app_name, sys_id), + _err=sys.stderr, + _bg=True, + ) + processes.append(app_stack) @app.command() -def start_group(count: int = typer.Argument(min=1, max=10)): +@functools.wraps(start) +def start_group(count: int = typer.Argument(min=1, max=10), *args, **kwargs): """Start a group of robots""" for i in range(count): logger.info(f"start robot {i}") - start(sys_id=i + 1) + start(sys_id=i + 1, *args, **kwargs) if i == 0: wait_for_gazebo()