Source code for udaan.models.quadrotor_cspayload.vfx

"""QuadrotorCsPayloadVfx — adds VPython real-time visualization to QuadrotorCsPayloadBase."""

import time as _time

import numpy as np

from .base import QuadrotorCsPayloadBase


[docs] class QuadrotorCsPayloadVfx(QuadrotorCsPayloadBase): """Quadrotor with cable-suspended payload and VPython 3D visualization."""
[docs] def __init__(self, **kwargs): super().__init__(**kwargs) from ...utils.vfx.quadrotor_cspayload_vfx import QuadrotorCSPayloadVFX self._vfx = QuadrotorCSPayloadVFX(l=self._cable_length) self._wall_start = None
[docs] def step(self, u, desired_att=None): super().step(u, desired_att=desired_att) if self._wall_start is None: self._wall_start = _time.monotonic() wall_elapsed = _time.monotonic() - self._wall_start sleep = self.t - wall_elapsed if sleep > 0: _time.sleep(sleep) self._vfx.update( self.state.payload_position, np.asarray(self.state.cable_attitude), np.asarray(self.state.orientation), )
[docs] def reset(self, **kwargs): super().reset(**kwargs) self._wall_start = None self._vfx.reset( self.state.payload_position, np.asarray(self.state.cable_attitude), np.asarray(self.state.orientation), )