v0.1.3
This commit is contained in:
@@ -14,7 +14,7 @@ from argparse import ArgumentParser
|
||||
from pathlib import Path
|
||||
from robogauge import ROBOGAUGE_ROOT_DIR
|
||||
|
||||
def pares_path(path):
|
||||
def parse_path(path):
|
||||
if "{ROBOGAUGE_ROOT_DIR}" in str(path):
|
||||
path = str(path).replace("{ROBOGAUGE_ROOT_DIR}", ROBOGAUGE_ROOT_DIR)
|
||||
return path
|
||||
@@ -47,10 +47,13 @@ def parse_args():
|
||||
parser = ArgumentParser()
|
||||
parameters = [
|
||||
{"name": "--task-name", "type": str, "default": "base", "help": "Name of the task to run."},
|
||||
{"name": "--experiment-name", "type": str, "default": "base", "help": "Name of the experiment to run."},
|
||||
{"name": "--experiment-name", "type": str, "help": "Name of the experiment to run."},
|
||||
{"name": "--headless", "action": "store_true", "default": False, "help": "Run in headless mode."},
|
||||
{"name": "--save-video", "action": "store_true", "default": False, "help": "Save video output."},
|
||||
]
|
||||
for param in parameters:
|
||||
parser.add_argument(param['name'], **{k: v for k, v in param.items() if k != 'name'})
|
||||
return parser.parse_args()
|
||||
args = parser.parse_args()
|
||||
if args.experiment_name is None:
|
||||
args.experiment_name = f"{args.task_name}_exp"
|
||||
return args
|
||||
|
||||
@@ -14,6 +14,7 @@ import time
|
||||
import logging
|
||||
from pathlib import Path
|
||||
from robogauge import ROBOGAUGE_ROOT_DIR
|
||||
from torch.utils.tensorboard import SummaryWriter
|
||||
|
||||
class LogColor:
|
||||
""" ANSI color codes """
|
||||
@@ -49,6 +50,10 @@ class ColorFormatter(logging.Formatter):
|
||||
|
||||
|
||||
class Logger:
|
||||
logger: logging.Logger = None
|
||||
log_dir: Path = None
|
||||
writer: SummaryWriter = None
|
||||
|
||||
def create(self,
|
||||
experiment_name,
|
||||
console_output=True, color_output=True,
|
||||
@@ -93,6 +98,12 @@ class Logger:
|
||||
fh = logging.FileHandler(path_log_file, mode=save_file_mode, encoding='utf-8')
|
||||
fh.setFormatter(file_formatter)
|
||||
self.logger.addHandler(fh)
|
||||
|
||||
def create_tensorboard(self, run_name: str):
|
||||
if self.writer is not None:
|
||||
self.writer.close()
|
||||
self.writer = SummaryWriter(str(self.log_dir / run_name))
|
||||
self.info(f"Tensorboard writer created at: {self.log_dir / run_name}")
|
||||
|
||||
def debug(self, msg, *args, **kwargs):
|
||||
self.logger.debug(msg, *args, **kwargs, stacklevel=2)
|
||||
@@ -108,6 +119,19 @@ class Logger:
|
||||
|
||||
def critical(self, msg, *args, **kwargs):
|
||||
self.logger.critical(msg, *args, **kwargs, stacklevel=2)
|
||||
|
||||
def log(self, value, tag, step):
|
||||
""" Log scalar value to tensorboard
|
||||
|
||||
Args:
|
||||
value (float): scalar value
|
||||
tag (str): tag name
|
||||
step (int): step number
|
||||
"""
|
||||
if self.writer is not None:
|
||||
self.writer.add_scalar(tag, value, step)
|
||||
else:
|
||||
self.warning("Tensorboard writer is not initialized, skipping log.")
|
||||
|
||||
logger = Logger()
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ class TaskRegister():
|
||||
robot_cfg = self.robot_cfgs[name]
|
||||
return sim_cfg, gauger_cfg, robot_cfg
|
||||
|
||||
def make_pipeline(self, name, args=None, sim_cfg=None, gauger_cfg=None, robot_cfg=None):
|
||||
def make_pipeline(self, name, args=None, sim_cfg=None, gauger_cfg=None, robot_cfg=None, run_name='0'):
|
||||
default_cfgs = self.get_cfgs(name)
|
||||
if sim_cfg is None:
|
||||
sim_cfg = default_cfgs[0]
|
||||
@@ -44,7 +44,7 @@ class TaskRegister():
|
||||
if args is not None:
|
||||
self.update_args_to_cfg(sim_cfg, gauger_cfg, robot_cfg, args)
|
||||
pipeline_class = self.get_pipeline_class(name)
|
||||
return pipeline_class(sim_cfg, robot_cfg, gauger_cfg)
|
||||
return pipeline_class(run_name, sim_cfg, robot_cfg, gauger_cfg)
|
||||
|
||||
def update_args_to_cfg(self, sim_cfg, gauger_cfg, robot_cfg, args):
|
||||
if args.headless is not None:
|
||||
|
||||
Reference in New Issue
Block a user