|
|
|
@ -6,6 +6,7 @@ import os
@@ -6,6 +6,7 @@ import os
|
|
|
|
|
import atexit |
|
|
|
|
import subprocess |
|
|
|
|
import threading |
|
|
|
|
import pathlib |
|
|
|
|
import errno |
|
|
|
|
from typing import Dict, List, TextIO, Optional |
|
|
|
|
|
|
|
|
@ -30,6 +31,7 @@ class Runner:
@@ -30,6 +31,7 @@ class Runner:
|
|
|
|
|
self.start_time = time.time() |
|
|
|
|
self.log_dir = log_dir |
|
|
|
|
self.log_filename = "" |
|
|
|
|
self.wait_until_complete = False |
|
|
|
|
|
|
|
|
|
def set_log_filename(self, log_filename: str) -> None: |
|
|
|
|
self.log_filename = log_filename |
|
|
|
@ -59,6 +61,9 @@ class Runner:
@@ -59,6 +61,9 @@ class Runner:
|
|
|
|
|
self.stop_thread = threading.Event() |
|
|
|
|
self.thread = threading.Thread(target=self.process_output) |
|
|
|
|
self.thread.start() |
|
|
|
|
if self.wait_until_complete: |
|
|
|
|
if self.wait(1.0) != 0: |
|
|
|
|
raise TimeoutError("Command not completed") |
|
|
|
|
|
|
|
|
|
def process_output(self) -> None: |
|
|
|
|
assert self.process.stdout is not None |
|
|
|
@ -197,13 +202,30 @@ class GzserverRunner(Runner):
@@ -197,13 +202,30 @@ class GzserverRunner(Runner):
|
|
|
|
|
self.env[var] = os.environ[var] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WaitforgzRunner(Runner): |
|
|
|
|
def __init__(self, |
|
|
|
|
workspace_dir: str, |
|
|
|
|
log_dir: str, |
|
|
|
|
model: str, |
|
|
|
|
case: str, |
|
|
|
|
verbose: bool): |
|
|
|
|
super().__init__(log_dir, model, case, verbose) |
|
|
|
|
self.name = "waitforgz" |
|
|
|
|
self.cwd = workspace_dir |
|
|
|
|
self.env = {"PATH": os.environ['PATH'], |
|
|
|
|
"HOME": os.environ['HOME']} |
|
|
|
|
script_dir = pathlib.Path(__file__).parent.absolute() |
|
|
|
|
self.cmd = os.path.join(script_dir, "waitforgz.sh") |
|
|
|
|
self.args = [] |
|
|
|
|
self.wait_until_complete = True |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GzmodelspawnRunner(Runner): |
|
|
|
|
def __init__(self, |
|
|
|
|
workspace_dir: str, |
|
|
|
|
log_dir: str, |
|
|
|
|
model: str, |
|
|
|
|
case: str, |
|
|
|
|
speed_factor: float, |
|
|
|
|
verbose: bool): |
|
|
|
|
super().__init__(log_dir, model, case, verbose) |
|
|
|
|
self.name = "gzmodelspawn" |
|
|
|
@ -214,21 +236,14 @@ class GzmodelspawnRunner(Runner):
@@ -214,21 +236,14 @@ class GzmodelspawnRunner(Runner):
|
|
|
|
|
workspace_dir + "/build/px4_sitl_default/build_gazebo", |
|
|
|
|
"GAZEBO_MODEL_PATH": |
|
|
|
|
workspace_dir + "/Tools/sitl_gazebo/models", |
|
|
|
|
"PX4_SIM_SPEED_FACTOR": str(speed_factor), |
|
|
|
|
"DISPLAY": os.environ['DISPLAY']} |
|
|
|
|
self.add_to_env_if_set("PX4_HOME_LAT") |
|
|
|
|
self.add_to_env_if_set("PX4_HOME_LON") |
|
|
|
|
self.add_to_env_if_set("PX4_HOME_ALT") |
|
|
|
|
self.cmd = "gz" |
|
|
|
|
self.args = ["model", "--spawn-file", workspace_dir + |
|
|
|
|
"/Tools/sitl_gazebo/models/" + |
|
|
|
|
self.model + "/" + self.model + ".sdf", |
|
|
|
|
"--model-name", self.model, |
|
|
|
|
"-x", "1.01", "-y", "0.98", "-z", "0.83"] |
|
|
|
|
|
|
|
|
|
def add_to_env_if_set(self, var: str) -> None: |
|
|
|
|
if var in os.environ: |
|
|
|
|
self.env[var] = os.environ[var] |
|
|
|
|
self.wait_until_complete = True |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GzclientRunner(Runner): |
|
|
|
|