Formula Student Autonomous Systems
The code for the main driverless system
Loading...
Searching...
No Matches
mapFile.py
Go to the documentation of this file.
1from ruamel.yaml import YAML
2from ruamel.yaml.comments import CommentedMap as OrderedDict
3from pathlib import Path
4import numpy as np
5
6from guiLogic import landmarkType
7
9 def __init__(self, f) -> None:
10 self.f = f
11
12
13 def write(self, s):
14 self.f.write(self.__clean_yaml(s.decode('utf-8')))
15
16
17 def __clean_yaml(self, yaml_file: str) -> str:
18 yaml_file = yaml_file.replace("'", "")
19 return yaml_file
20
22 if(string == "blue"):
23 return landmarkType.BLUE
24 elif(string == "yellow"):
25 return landmarkType.YELLOW
26 elif(string == "small-orange"):
27 return landmarkType.ORANGE
28 elif(string == "big-orange"):
29 return landmarkType.BIG_ORANGE
30 elif(string == "timekeeping"):
31 return landmarkType.TIMEKEEPING
32 elif(string == "invisible"):
33 return landmarkType.INVISIBLE
34
35 return landmarkType.UNDEFINED
36
38 if(type == landmarkType.BLUE):
39 return "blue"
40 elif(type == landmarkType.YELLOW):
41 return "yellow"
42 elif(type == landmarkType.ORANGE):
43 return "small-orange"
44 elif(type == landmarkType.BIG_ORANGE):
45 return "big-orange"
46 elif(type == landmarkType.TIMEKEEPING):
47 return "timekeeping"
48 elif(type == landmarkType.INVISIBLE):
49 return "invisible"
50 return "unknown"
51
52def writeYaml(fileName, cones, leftLane, rightLane, timeKeeping, startPose, earthToTrack):
53 path = Path(fileName)
54 start_position = startPose[0]
55 start_orientation = startPose[1]
56 originGeodeticCoordinates = earthToTrack[0]
57 originENURotation = earthToTrack[1]
58
59 left = []
60 right = []
61 time_keeping = []
62 unknown = []
63 for c in cones:
64 unknown.append({"position": f"[{c[0][0]}, {c[0][1]}, {c[0][2]}]", "class": landmarkTypeToString(c[1])})
65 for c in leftLane:
66 left.append({"position": f"[{c[0][0]}, {c[0][1]}, {c[0][2]}]", "class": landmarkTypeToString(c[1])})
67 for c in rightLane:
68 right.append({"position": f"[{c[0][0]}, {c[0][1]}, {c[0][2]}]", "class": landmarkTypeToString(c[1])})
69 for c in timeKeeping:
70 time_keeping.append({"position": f"[{c[0][0]}, {c[0][1]}, {c[0][2]}]", "class": landmarkTypeToString(c[1])})
71
72 version_number = 1.0
73 yaml_dict = OrderedDict({
74 "track": OrderedDict({
75 "version": str(version_number),
76 "lanesFirstWithLastConnected" : True,
77 "start": OrderedDict({
78 "position": f'[{start_position[0]}, {start_position[1]}, {start_position[2]}]',
79 "orientation": f'[{start_orientation[0]}, {start_orientation[1]}, {start_orientation[2]}]'}),
80 "earthToTrack": OrderedDict({
81 "position": f'[{originGeodeticCoordinates[0]}, {originGeodeticCoordinates[1]}, {originGeodeticCoordinates[2]}]',
82 "orientation": f'[{originENURotation[0]}, {originENURotation[1]}, {originENURotation[2]}]'}),
83 "left": left,
84 "right": right,
85 "time_keeping": time_keeping,
86 "unknown": unknown
87 })
88 })
89 with open(path, 'w+') as f:
90 yaml_dumper = My_Yaml_Dump(f)
91 yaml = YAML()
92 yaml.dump(yaml_dict, yaml_dumper)
93 return
94
95
96def readYaml(fileName):
97 path = Path(fileName)
98
99 yaml=YAML(typ='safe') # default, if not specfied, is 'rt' (round-trip)
100 data = yaml.load(path)
101
102 unkownCones = []
103 leftCones = []
104 rightCones = []
105 timekeeping = []
106 lanesFirstWithLastConnected = False
107 startPose = [np.zeros(3), np.zeros(3)]
108 earthToTrack = [np.zeros(3), np.zeros(3)]
109 if('lanesFirstWithLastConnected') in data['track']:
110 lanesFirstWithLastConnected = bool(data['track']['lanesFirstWithLastConnected'])
111 if('start') in data['track']:
112 startPose = [np.array(data['track']['start']['position']), np.array(data['track']['start']['orientation'])]
113 if('earthToTrack') in data['track']:
114 earthToTrack = [np.array(data['track']['earthToTrack']['position']), np.array(data['track']['earthToTrack']['orientation'])]
115 for c in data['track']['left']:
116 leftCones.append([np.array(c['position']), c['class']])
117 for c in data['track']['right']:
118 rightCones.append([np.array(c['position']), c['class']])
119 for c in data['track']['time_keeping']:
120 # overwrite class as timekeeping
121 timekeeping.append([np.array(c['position']), landmarkTypeToString(landmarkType.TIMEKEEPING)])
122 for c in data['track']['unknown']:
123 unkownCones.append([np.array(c['position']), c['class']])
124 return (unkownCones, leftCones, rightCones, timekeeping, lanesFirstWithLastConnected, startPose, earthToTrack)
None __init__(self, f)
Definition mapFile.py:9
str __clean_yaml(self, str yaml_file)
Definition mapFile.py:17
stringToLandmarkType(string)
Definition mapFile.py:21
landmarkTypeToString(type)
Definition mapFile.py:37
writeYaml(fileName, cones, leftLane, rightLane, timeKeeping, startPose, earthToTrack)
Definition mapFile.py:52
readYaml(fileName)
Definition mapFile.py:96