43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
|
from columbus import entities, observables
|
||
|
|
||
|
import random as random_dont_use
|
||
|
|
||
|
|
||
|
def parseObs(obsConf):
|
||
|
# Parsing Observable Definitions
|
||
|
if type(obsConf) == list:
|
||
|
obs = []
|
||
|
for i, c in enumerate(obsConf):
|
||
|
obs.append(parseObs(c))
|
||
|
if len(obs) == 1:
|
||
|
return obs[0]
|
||
|
else:
|
||
|
return observables.CompositionalObservable(obs)
|
||
|
|
||
|
if obsConf['type'] == 'State':
|
||
|
conf = {k: v for k, v in obsConf.items() if k not in ['type']}
|
||
|
return observables.StateObservable(**conf)
|
||
|
elif obsConf['type'] == 'Compass':
|
||
|
conf = {k: v for k, v in obsConf.items() if k not in ['type']}
|
||
|
return observables.CompassObservable(**conf)
|
||
|
elif obsConf['type'] == 'RayCast':
|
||
|
chans = []
|
||
|
for chan in obsConf.get('chans', []):
|
||
|
chans.append(getattr(entities, chan))
|
||
|
conf = {k: v for k, v in obsConf.items() if k not in ['type', 'chans']}
|
||
|
return observables.RayObservable(chans=chans, **conf)
|
||
|
elif obsConf['type'] == 'CNN':
|
||
|
conf = {k: v for k, v in obsConf.items() if k not in ['type']}
|
||
|
return observables.CnnObservable(**conf)
|
||
|
elif obsConf['type'] == 'Dummy':
|
||
|
conf = {k: v for k, v in obsConf.items() if k not in ['type']}
|
||
|
return observables.Observable(**conf)
|
||
|
else:
|
||
|
raise Exception('Unknown Observable selected')
|
||
|
|
||
|
|
||
|
def soft_int(num):
|
||
|
i = int(num)
|
||
|
r = num - i
|
||
|
return i + int(random_dont_use.random() < r)
|