Source code for concepts.simulator.tk.toy_1drobot_visualizer

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# File   : toy_1drobot_visualizer.py
# Author : Jiayuan Mao
# Email  : maojiayuan@gmail.com
# Date   : 04/29/2021
#
# This file is part of Project Concepts.
# Distributed under terms of the MIT license.

from typing import Optional
from collections import namedtuple
from concepts.simulator.tk.drawing_window import DrawingWindow


[docs]class Toy1DRobotVState(namedtuple('_Toy1DRobotVState', ['robot', 'object', 'goal'])): pass
[docs]class Toy1DRobotVisualizer(object):
[docs] def __init__(self, name='Toy1DRobot'): self.window = DrawingWindow(512 * 2, 116 * 2, -11, 11, 3, 8, title=name)
[docs] def draw( self, current: Toy1DRobotVState, predicted: Optional[Toy1DRobotVState] = None, text: Optional[str] = None, wait_key=True ): current = Toy1DRobotVState(*[float(x) if x is not None else None for x in current]) if predicted is not None: predicted = Toy1DRobotVState(*[float(x) if x is not None else None for x in predicted]) self.window.clear() self.window.drawText(0, 7.5, label="Blue: Robot; Red: Object; Green: Goal") if text is None: self.window.drawText(0, 7, label=text) self.window.drawText(0, 6, label="Observation") x = current.robot self.window.drawRect(x - 0.3, 5, x + 0.3, 5 + 0.3 * 2, color='blue') x = current.object self.window.drawRect(x - 0.3, 5, x + 0.3, 5 + 0.3 * 2, color='red') x = current.goal self.window.drawRect(x - 1, 5 - 0.2, x + 1, 5, color='green') if predicted is not None: self.window.drawText(0, 4.5, label="Prediction") x = predicted.object self.window.drawRect(x - 0.3, 5 - 1.5, x + 0.3, 5 - 1.5 + 0.3 * 2, color='#FF8888') x = predicted.goal self.window.drawRect(x - 1, 5 - 1.5 - 0.2, x + 1, 5 - 1.5, color='#88FF88') if wait_key: char = input('Press <Enter> to continue...') if char == 'q': raise KeyboardInterrupt