compatibility with Python 2.7

master
arne 2019-12-02 19:23:10 +01:00
parent 9b73084e09
commit b1c49f987e
3 changed files with 32 additions and 15 deletions

2
map.py
View File

@ -1,6 +1,6 @@
import numpy as np
import matplotlib.pyplot as plt
from skimage.morphology import remove_small_holes
# from skimage.morphology import remove_small_holes
from PIL import Image

View File

@ -1,7 +1,7 @@
import numpy as np
import math
from map import Map
from bresenham import bresenham
from skimage.draw import line
import matplotlib.pyplot as plt
import matplotlib.patches as plt_patches
from scipy.signal import savgol_filter
@ -297,8 +297,8 @@ class ReferencePath:
# Get Bresenham paths to all possible cells
paths = []
for t_x, t_y in zip(tn_x, tn_y):
path = list(bresenham(wp_x, wp_y, t_x, t_y))
paths.append(path)
x_list, y_list = line(wp_x, wp_y, t_x, t_y)
paths.append(zip(x_list, y_list))
# Compute minimum distance to border cell
min_width = max_width
@ -340,7 +340,7 @@ class ReferencePath:
lb_p = self.map.w2m(wp.border_cells[1][0], wp.border_cells[1][1])
# Compute path from left border cell to right border cell
path = list(bresenham(ub_p[0], ub_p[1], lb_p[0], lb_p[1]))
x_list, y_list = line(ub_p[0], ub_p[1], lb_p[0], lb_p[1])
# Initialize upper and lower bound of drivable area to
# upper bound of path
@ -351,7 +351,7 @@ class ReferencePath:
ub_ls, lb_ls = ub_p, ub_p
# Iterate over path from left border to right border
for x, y in path:
for x, y in zip(x_list, y_list):
# If cell is free, update lower bound
if self.map.data[y, x] == 1:
lb_o = (x, y)

View File

@ -1,5 +1,13 @@
import numpy as np
from abc import ABC, abstractmethod
from abc import abstractmethod
try:
from abc import ABC
except:
# for Python 2.7
from abc import ABCMeta
class ABC(object):
__metaclass__ = ABCMeta
pass
import matplotlib.pyplot as plt
import matplotlib.patches as plt_patches
import math
@ -26,14 +34,16 @@ class TemporalState:
self.y = y
self.psi = psi
self.members = ['x', 'y', 'psi']
def __iadd__(self, other):
"""
Overload Sum-Add operator.
:param other: numpy array to be added to state vector
"""
for state_id, state in enumerate(vars(self).values()):
vars(self)[list(vars(self).keys())[state_id]] += other[state_id]
for state_id in range(len(self.members)):
vars(self)[self.members[state_id]] += other[state_id]
return self
@ -48,16 +58,21 @@ class SpatialState(ABC):
@abstractmethod
def __init__(self):
self.members = None
pass
def __getitem__(self, item):
return list(vars(self).values())[item]
if isinstance(item, int):
members = [self.members[item]]
else:
members = self.members[item]
return [vars(self)[key] for key in members]
def __setitem__(self, key, value):
vars(self)[list(vars(self).keys())[key]] = value
vars(self)[self.members[key]] = value
def __len__(self):
return len(vars(self))
return len(self.members)
def __iadd__(self, other):
"""
@ -65,15 +80,15 @@ class SpatialState(ABC):
:param other: numpy array to be added to state vector
"""
for state_id, state in enumerate(vars(self).values()):
vars(self)[list(vars(self).keys())[state_id]] += other[state_id]
for state_id in range(len(self.members)):
vars(self)[self.members[state_id]] += other[state_id]
return self
def list_states(self):
"""
Return list of names of all states.
"""
return list(vars(self).keys())
return self.members
class SimpleSpatialState(SpatialState):
@ -91,6 +106,8 @@ class SimpleSpatialState(SpatialState):
self.e_psi = e_psi
self.t = t
self.members = ['e_y', 'e_psi', 't']
####################################
# Spatial Bicycle Model Base Class #