autoverse-cli 0.6.0__tar.gz → 0.8.0__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/PKG-INFO +1 -1
  2. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/pyproject.toml +1 -1
  3. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/autoverse_cli.egg-info/PKG-INFO +1 -1
  4. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/autoverse_cli.egg-info/SOURCES.txt +2 -0
  5. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/app_version.py +1 -1
  6. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/avrs.py +6 -0
  7. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/requests/code_booz.py +5 -1
  8. autoverse_cli-0.8.0/src/avrs/requests/get_object_config.py +18 -0
  9. autoverse_cli-0.8.0/src/avrs/requests/misc.py +40 -0
  10. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/requests/request.py +1 -1
  11. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/requests/reserve_mv_slot.py +4 -4
  12. autoverse_cli-0.8.0/src/avrs/requests/teleport.py +22 -0
  13. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/requests/vehicle_replay.py +121 -10
  14. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/simconfig.py +15 -1
  15. autoverse_cli-0.8.0/src/avrs/simconfig_util.py +146 -0
  16. autoverse_cli-0.6.0/src/avrs/requests/teleport.py +0 -20
  17. autoverse_cli-0.6.0/src/avrs/simconfig_util.py +0 -70
  18. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/LICENSE +0 -0
  19. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/README.md +0 -0
  20. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/setup.cfg +0 -0
  21. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/autoverse_cli.egg-info/dependency_links.txt +0 -0
  22. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/autoverse_cli.egg-info/entry_points.txt +0 -0
  23. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/autoverse_cli.egg-info/requires.txt +0 -0
  24. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/autoverse_cli.egg-info/top_level.txt +0 -0
  25. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/__init__.py +0 -0
  26. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/argparse_help.py +0 -0
  27. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/can_tool.py +0 -0
  28. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/can_tool_util.py +0 -0
  29. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/cfg.py +0 -0
  30. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/launcher.py +0 -0
  31. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/launcher_util.py +0 -0
  32. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/requests/change_camera.py +0 -0
  33. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/requests/demo.py +0 -0
  34. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/requests/environment.py +0 -0
  35. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/requests/fault_injection.py +0 -0
  36. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/requests/list_sim_objects.py +0 -0
  37. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/requests/log_path.py +0 -0
  38. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/requests/move_to_landmark.py +0 -0
  39. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/requests/npc.py +0 -0
  40. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/requests/reset_to_track.py +0 -0
  41. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/requests/restart.py +0 -0
  42. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/requests/scenario_control.py +0 -0
  43. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/requests/toggle_hud.py +0 -0
  44. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/requests/vd.py +0 -0
  45. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/requests/vehicle_input.py +0 -0
  46. {autoverse_cli-0.6.0 → autoverse_cli-0.8.0}/src/avrs/tests.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: autoverse-cli
3
- Version: 0.6.0
3
+ Version: 0.8.0
4
4
  Summary: The Autoverse CLI
5
5
  Author-email: Dan Kamrath <dan.kamrath@autonomalabs.com>
6
6
  License: # End-User License Agreement (EULA) of the Autonoma AutoVerse CLI
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "autoverse-cli"
3
- version = "0.6.0"
3
+ version = "0.8.0"
4
4
  dependencies = [
5
5
  "boto3",
6
6
  "cantools"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: autoverse-cli
3
- Version: 0.6.0
3
+ Version: 0.8.0
4
4
  Summary: The Autoverse CLI
5
5
  Author-email: Dan Kamrath <dan.kamrath@autonomalabs.com>
6
6
  License: # End-User License Agreement (EULA) of the Autonoma AutoVerse CLI
@@ -24,8 +24,10 @@ src/avrs/requests/code_booz.py
24
24
  src/avrs/requests/demo.py
25
25
  src/avrs/requests/environment.py
26
26
  src/avrs/requests/fault_injection.py
27
+ src/avrs/requests/get_object_config.py
27
28
  src/avrs/requests/list_sim_objects.py
28
29
  src/avrs/requests/log_path.py
30
+ src/avrs/requests/misc.py
29
31
  src/avrs/requests/move_to_landmark.py
30
32
  src/avrs/requests/npc.py
31
33
  src/avrs/requests/request.py
@@ -2,7 +2,7 @@ import http.client
2
2
  import json
3
3
 
4
4
  def get_app_version():
5
- return '0.6.0'
5
+ return '0.8.0'
6
6
 
7
7
  def check_app_is_latest():
8
8
  pass
@@ -28,6 +28,8 @@ from avrs.requests.fault_injection import *
28
28
  from avrs.requests.change_camera import *
29
29
  from avrs.requests.toggle_hud import *
30
30
  from avrs.simconfig import *
31
+ from avrs.requests.get_object_config import *
32
+ from avrs.requests.misc import *
31
33
 
32
34
 
33
35
  def get_version():
@@ -78,6 +80,10 @@ def main():
78
80
  AvrsFaultInjectionRequests(sps, cfg)
79
81
  AvrsChangeCameraRequest(sps, cfg)
80
82
  AvrsToggleHudRequest(sps, cfg)
83
+ AvrsGetObjectConfigRequest(sps, cfg)
84
+ AvrsGetSimVersionRequest(sps, cfg)
85
+ AvrsPingRequest(sps, cfg)
86
+ AvrsConfigureSimLodRequest(sps, cfg)
81
87
 
82
88
  if os.environ.get('AVRS_WITH_DEMO', '0') == '1':
83
89
  AvrsDemoRequest(sps, cfg)
@@ -28,6 +28,9 @@ class AvrsCodeBoozStartLogging(AvrsApiRequest):
28
28
  psr.add_argument(
29
29
  '--rate-hz', type=float, default=100.0, help='the rate in hz to log data')
30
30
 
31
+ psr.add_argument(
32
+ '--csv-only-xyv', action='store_true', help='if true, will only record the x, y and velocity magnitude to csv')
33
+
31
34
  psr.set_defaults(func=self.send_request)
32
35
 
33
36
  def get_request_body(self, args):
@@ -35,7 +38,8 @@ class AvrsCodeBoozStartLogging(AvrsApiRequest):
35
38
  'Action': 'Start',
36
39
  'FileName': args.out_file,
37
40
  'RateHz': args.rate_hz,
38
- 'Format': args.format
41
+ 'Format': args.format,
42
+ 'bCsvOnlyXyv': args.csv_only_xyv
39
43
  }
40
44
 
41
45
  class AvrsCodeBoozStopLogging(AvrsApiRequest):
@@ -0,0 +1,18 @@
1
+ from avrs.requests.request import AvrsApiRequest
2
+
3
+ class AvrsGetObjectConfigRequest(AvrsApiRequest):
4
+ def __init__(self, parser, cfg):
5
+ AvrsApiRequest.__init__(self, parser, cfg, 'GetObjectConfig', '')
6
+ psr = parser.add_parser('get-object-config', help='returns the JSON structure of an objects configuration')
7
+
8
+ psr.add_argument(
9
+ '--target',
10
+ default='ego',
11
+ help='the simulated object to return config for')
12
+
13
+ psr.set_defaults(func=self.send_request)
14
+
15
+ def get_request_body(self, args):
16
+ self.target_object_id = args.target
17
+ return {
18
+ }
@@ -0,0 +1,40 @@
1
+ from avrs.requests.request import AvrsApiRequest
2
+
3
+ class AvrsGetSimVersionRequest(AvrsApiRequest):
4
+ def __init__(self, parser, cfg):
5
+ AvrsApiRequest.__init__(self, parser, cfg, 'GetVersion', 0)
6
+ psr = parser.add_parser('get-sim-version', help='get the version of the currently running simulator')
7
+ psr.set_defaults(func=self.send_request)
8
+
9
+ def get_request_body(self, args):
10
+ return {
11
+ }
12
+
13
+ class AvrsPingRequest(AvrsApiRequest):
14
+ def __init__(self, parser, cfg):
15
+ AvrsApiRequest.__init__(self, parser, cfg, 'GetVersion', 0)
16
+ psr = parser.add_parser('ping', help='ping the simulator to see if it is running and responsive')
17
+ psr.set_defaults(func=self.send_ping)
18
+
19
+ def send_ping(self, args):
20
+ try:
21
+ self.send_http_request(args)
22
+ except:
23
+ print('no')
24
+
25
+ class AvrsConfigureSimLodRequest(AvrsApiRequest):
26
+ def __init__(self, parser, cfg):
27
+ AvrsApiRequest.__init__(self, parser, cfg, 'ConfigureSimLod', 'lodctrl')
28
+ psr = parser.add_parser('set-lod', help='set the LOD of the sim, possibly reducing GPU overhead')
29
+
30
+ psr.add_argument(
31
+ 'lod',
32
+ type=int,
33
+ help='the new lod level to set. 0 is max lod, 1 is min lod')
34
+
35
+ psr.set_defaults(func=self.send_request)
36
+
37
+ def get_request_body(self, args):
38
+ return {
39
+ 'newLod': args.lod
40
+ }
@@ -18,7 +18,7 @@ class AvrsApiRequest:
18
18
  return {
19
19
  'TargetObjectId': self.target_object_id,
20
20
  'RequestType': self.request_type,
21
- 'bVerboseResponse': self.verbose,
21
+ 'bVerboseResponse': args.verbose or self.verbose,
22
22
  'RequestBody': body
23
23
  }
24
24
 
@@ -44,7 +44,7 @@ class ReserveMvSlot(AvrsApiRequest):
44
44
 
45
45
  psr.add_argument(
46
46
  '--badenia-can-name',
47
- default='vcan1',
47
+ default='vcan2',
48
48
  help='the name of the CAN interface to use for the bandanania CAN bus on the new vehicle')
49
49
 
50
50
  psr.add_argument(
@@ -75,9 +75,9 @@ class ReserveMvSlot(AvrsApiRequest):
75
75
  eav_init_pld = {
76
76
  'TypeName': 'Eav24Initializer',
77
77
  'Body': {
78
- 'BsuCanName': args.bsu_can_name,
79
- 'KistlerCanNam': args.kistler_can_name,
80
- 'BadeniaCanName': args.badenia_can_name,
78
+ 'bsuCanName': args.bsu_can_name,
79
+ 'kistlerCanNam': args.kistler_can_name,
80
+ 'badeniaCanName': args.badenia_can_name,
81
81
  'bHudEnabled': not args.disable_hud,
82
82
  'bEnableLidar': args.enable_lidar,
83
83
  'bEnableCameraSensor': args.enable_camera_sensor
@@ -0,0 +1,22 @@
1
+ from avrs.requests.request import AvrsApiRequest
2
+
3
+ class Teleport(AvrsApiRequest):
4
+ def __init__(self, parser, cfg):
5
+ AvrsApiRequest.__init__(self, parser, cfg, 'Teleport', "Ego")
6
+ psr = parser.add_parser('teleport', help='Teleports the car to the given x,y,z in either enu or lla.')
7
+ psr.add_argument('x', type=float, help='new x position (NED meters) or latitude (if frame is set to lla)')
8
+ psr.add_argument('y', type=float, help='new y position (NED meters) or longitude (if frame is set to lla)')
9
+ psr.add_argument('z', type=float, help='new z position (NED meters) or altitude (if frame is set to lla)')
10
+ psr.add_argument('--yaw', type=float, default=0.0, help='the yaw in degrees (0 north, + CW) to apply post teleport')
11
+ psr.add_argument('--frame', choices=['lla', 'ned'], default='ned', help='LLA or NED coordinate system.')
12
+ psr.set_defaults(func=self.send_request)
13
+
14
+
15
+ def get_request_body(self, args):
16
+ return {
17
+ "X": args.x,
18
+ "Y": args.y,
19
+ "Z": args.z,
20
+ "yaw": args.yaw,
21
+ "NavFrame": args.frame
22
+ }
@@ -79,6 +79,21 @@ class SpawnReplayVehicle(AvrsApiRequest):
79
79
  default=1,
80
80
  help='the number of npcs to spawn (only works with automatic name)')
81
81
 
82
+ psr.add_argument(
83
+ '--enable-front-lidar',
84
+ action='store_true',
85
+ help='if set, will enable the front lidar on the replay vehicle')
86
+
87
+ psr.add_argument(
88
+ '--enable-left-lidar',
89
+ action='store_true',
90
+ help='if set, will enable the left lidar on the replay vehicle')
91
+
92
+ psr.add_argument(
93
+ '--enable-right-lidar',
94
+ action='store_true',
95
+ help='if set, will enable the right lidar on the replay vehicle')
96
+
82
97
  # psr.add_argument(
83
98
  # '--enable-sensors',
84
99
  # type=bool,
@@ -119,32 +134,128 @@ class SpawnReplayVehicle(AvrsApiRequest):
119
134
  "bEnableKistlerCan": False,
120
135
  "bEnableBadeniaCan": False,
121
136
  "bHudEnabled": False,
122
- "bLidarEnabled": False,
137
+ "bLidarEnabled": True,
123
138
  "bCameraEnabled": False,
124
139
  "bPublishInputs": False,
125
140
  "bPublishGroundTruth": False
126
141
  }
127
142
 
143
+ lidar_front_pld = {
144
+ 'componentConfig': {
145
+ 'instanceName': 'lidar_front'
146
+ },
147
+ 'sensorDesc': {
148
+ 'frame': 'lidar_front',
149
+ 'leverarm': {
150
+ 'translation': {
151
+ 'x': 85,
152
+ 'y': 0,
153
+ 'z': 73
154
+ },
155
+ 'translationUnits': 'centimeters',
156
+ 'rotation': {
157
+ 'pitch': 0,
158
+ 'yaw': 0,
159
+ 'roll': 0
160
+ },
161
+ 'rotationUnits': 'degrees'
162
+ },
163
+ 'dataStream': {
164
+ 'streamName': 'lidar_front/points',
165
+ 'rateHz': 15
166
+ }
167
+ }
168
+ }
169
+
170
+ lidar_left_pld = {
171
+ 'componentConfig': {
172
+ 'instanceName': 'lidar_left'
173
+ },
174
+ 'sensorDesc': {
175
+ 'frame': 'lidar_left',
176
+ 'leverarm': {
177
+ 'translation': {
178
+ 'x': 15,
179
+ 'y': -20,
180
+ 'z': 82
181
+ },
182
+ 'translationUnits': 'centimeters',
183
+ 'rotation': {
184
+ 'pitch': 0,
185
+ 'yaw': 240,
186
+ 'roll': 0
187
+ },
188
+ 'rotationUnits': 'degrees'
189
+ },
190
+ 'dataStream': {
191
+ 'streamName': 'lidar_left/points',
192
+ 'rateHz': 15
193
+ }
194
+ }
195
+ }
196
+
197
+ lidar_right_pld = {
198
+ 'componentConfig': {
199
+ 'instanceName': 'lidar_right'
200
+ },
201
+ 'sensorDesc': {
202
+ 'frame': 'lidar_right',
203
+ 'leverarm': {
204
+ 'translation': {
205
+ 'x': 15,
206
+ 'y': 20,
207
+ 'z': 82
208
+ },
209
+ 'translationUnits': 'centimeters',
210
+ 'rotation': {
211
+ 'pitch': 0,
212
+ 'yaw': 120,
213
+ 'roll': 0
214
+ },
215
+ 'rotationUnits': 'degrees'
216
+ },
217
+ 'dataStream': {
218
+ 'streamName': 'lidar_right/points',
219
+ 'rateHz': 15
220
+ }
221
+ }
222
+ }
223
+
128
224
  plds = [
129
225
  {
130
- 'TypeName': 'WheeledVehicleReplayIpd',
131
- 'Body': replay_ipd
226
+ 'typeName': 'WheeledVehicleReplayIpd',
227
+ 'body': replay_ipd
228
+ },
229
+ {
230
+ 'typeName': 'Eav24Initializer',
231
+ 'body': eav_init_pld
232
+ },
233
+ {
234
+ 'typeName': 'GenericLidarIpd',
235
+ 'bEnabled': args.enable_front_lidar,
236
+ 'body': lidar_front_pld
237
+ },
238
+ {
239
+ 'typeName': 'GenericLidarIpd',
240
+ 'bEnabled': args.enable_left_lidar,
241
+ 'body': lidar_left_pld
132
242
  },
133
243
  {
134
- 'TypeName': 'Eav24Initializer',
135
- 'Body': eav_init_pld
244
+ 'typeName': 'GenericLidarIpd',
245
+ 'bEnabled': args.enable_right_lidar,
246
+ 'body': lidar_right_pld
136
247
  }
137
248
  ]
138
249
 
139
250
  if args.with_view_cameras:
140
251
  plds.append(
141
252
  {
142
- 'TypeName': 'InitializerTemplates',
143
- 'Body': {
144
- 'Templates': [
253
+ 'typeName': 'InitializerTemplates',
254
+ 'body': {
255
+ 'templates': [
145
256
  {
146
- 'PayloadType': 'SimViewTargetIpd',
147
- 'PayloadSpec': 'DefaultCarCams'
257
+ 'payloadType': 'SimViewTargetIpd',
258
+ 'payloadSpec': 'DefaultCarCams'
148
259
  }
149
260
  ]
150
261
  }
@@ -15,6 +15,17 @@ class AvrsSimConfig:
15
15
 
16
16
  sps = sim_config_parser.add_subparsers(required=True, help='sim-config options')
17
17
 
18
+ compare_parser = sps.add_parser(
19
+ 'compare-configs',
20
+ help='compare two sets of configuration files')
21
+ compare_parser.add_argument(
22
+ 'a',
23
+ help='the path to the first set of config files')
24
+ compare_parser.add_argument(
25
+ 'b',
26
+ help='the path to the second set of config files')
27
+ compare_parser.set_defaults(func=self.compare_configs)
28
+
18
29
  apply_preset_parser = sps.add_parser(
19
30
  'apply-preset',
20
31
  help='apply a preset configuration for a certain use-case')
@@ -58,4 +69,7 @@ the target
58
69
  return
59
70
 
60
71
  print('applying preset {} to sim install at {}'.format(args.preset_name, sim_path))
61
- apply_simconfig_preset(get_sim_saved_dir(sim_path), args.preset_name)
72
+ apply_simconfig_preset(get_sim_saved_dir(sim_path), args.preset_name)
73
+
74
+ def compare_configs(self, args):
75
+ compare_simconfig_defaults(args.a, args.b)
@@ -0,0 +1,146 @@
1
+ import os
2
+ import json
3
+
4
+ class SimConfigFiles():
5
+ def __init__(self, saved_dir):
6
+
7
+ self.required_files = {
8
+ 'main': os.path.join(saved_dir, 'simconfig.json'),
9
+ 'eav24': os.path.join(saved_dir, 'Objects', 'Eav24_default.json'),
10
+ 'yas': os.path.join(saved_dir, 'Environments', 'yasmarina_env.json')
11
+ }
12
+ self.files = {}
13
+
14
+ ok, status = self.valdiate()
15
+ if ok:
16
+ for name, path in self.required_files.items():
17
+ with open(path, 'r', encoding='utf-8') as f:
18
+ self.files[name] = json.load(f)
19
+
20
+ def valdiate(self):
21
+ for name, path in self.required_files.items():
22
+ if not os.path.exists(path):
23
+ return (False, '{} not found'.format(path))
24
+ return (True, '')
25
+
26
+ def save(self):
27
+ for name, path in self.required_files.items():
28
+ with open(path, 'w', encoding='utf-8') as f:
29
+ json.dump(self.files[name], f, ensure_ascii=False, indent=4)
30
+
31
+ def compare_simconfig_defaults(sim_saved_dir, new_defaults_dir):
32
+ old_cfg_files = SimConfigFiles(sim_saved_dir)
33
+ new_cfg_files = SimConfigFiles(new_defaults_dir)
34
+
35
+ ok, status = old_cfg_files.valdiate()
36
+ if not ok:
37
+ print(status)
38
+ return
39
+ ok, status = new_cfg_files.valdiate()
40
+ if not ok:
41
+ print(status)
42
+ return
43
+
44
+ print('comparing config files at {} with those at {}'.format(
45
+ sim_saved_dir, new_defaults_dir))
46
+
47
+ out_cpr = {}
48
+ compare_dicts(old_cfg_files.files['main'], new_cfg_files.files['main'], 'main', out_cpr)
49
+
50
+ #print('{}'.format(out_cpr))
51
+ print_simconfig_compare(out_cpr['main'])
52
+
53
+ def print_simconfig_compare(cpr):
54
+ for i in cpr['only_a']:
55
+ print('{} in a ({}) but not b'.format(i[0], i[1]))
56
+ for i in cpr['only_b']:
57
+ print('{} in b ({}) but not a'.format(i[0], i[1]))
58
+ for i in cpr['type_mismatch']:
59
+ print('{} ({}) does not match type {} ({})'.format(i[0], i[1], i[0], i[2]))
60
+ for i in cpr['value_mismatch']:
61
+ print('{} ({}) value does not match ({})'.format(i[0], i[1], i[2]))
62
+
63
+ for key, value in cpr['sub'].items():
64
+ print_simconfig_compare(value)
65
+
66
+ def compare_dicts(a, b, parent_key, out_checks):
67
+
68
+ only_a = []
69
+ only_b = []
70
+ type_mismatch = []
71
+ value_mismatch = []
72
+
73
+ out_checks[parent_key] = {}
74
+ out_checks[parent_key]['sub'] = {}
75
+
76
+
77
+ for key, value in a.items():
78
+ key_chain = '{}.{}'.format(parent_key, key)
79
+ if key not in b:
80
+ only_a.append((key_chain, value))
81
+ else:
82
+ if type(value) != type(b[key]):
83
+ type_mismatch.append((key_chain, type(value), type(b[key])))
84
+ elif isinstance(value, dict):
85
+ compare_dicts(value, b[key], key_chain, out_checks[parent_key]['sub'])
86
+ elif value != b[key]:
87
+ value_mismatch.append((key_chain, value, b[key]))
88
+
89
+ for key, value in b.items():
90
+ key_chain = '{}.{}'.format(parent_key, key)
91
+ if key not in a:
92
+ only_b.append((key_chain, value))
93
+
94
+ out_checks[parent_key]['only_a'] = only_a
95
+ out_checks[parent_key]['only_b'] = only_b
96
+ out_checks[parent_key]['type_mismatch'] = type_mismatch
97
+ out_checks[parent_key]['value_mismatch'] = value_mismatch
98
+
99
+ #print('only a \n {} \n\n'.format(only_a))
100
+ #print('only b \n {} \n\n'.format(only_b))
101
+ #print('type mismatch \n {} \n\n'.format(type_mismatch))
102
+ #print('value mismatch \n {} \n\n'.format(value_mismatch))
103
+ #print('sub_checks')
104
+
105
+
106
+
107
+ def apply_simconfig_preset(sim_saved_dir, preset_name):
108
+ cfg_files = SimConfigFiles(sim_saved_dir)
109
+ ok, status = cfg_files.valdiate()
110
+ if not ok:
111
+ print(status)
112
+ return
113
+
114
+ presets = {
115
+ 'default': apply_default_simconfig_preset,
116
+ 'lightweight': apply_lightweight_simconfig_preset,
117
+ 'a2rl': apply_a2rl_simconfig_preset
118
+ }
119
+ presets[preset_name](cfg_files)
120
+
121
+ def apply_default_simconfig_preset(cfg_files):
122
+ files = cfg_files.files
123
+
124
+ print('globally enabling ROS2 and CAN')
125
+ files['main']['interfaces']['bEnableRos2'] = True
126
+ files['main']['interfaces']['bEnableCan'] = True
127
+
128
+ print('ensuring default eav24 and yasmarina are reference in main config')
129
+ if not 'Environments/yasmarina_env.json' in files['main']['environmentPaths']:
130
+ print('missing yas environment. adding')
131
+ print('{}'.format(files['main']['environmentPaths']))
132
+ if not 'Objects/Eav24_default.json' in files['main']['objectTemplatePaths']:
133
+ print('missing eav24. adding')
134
+
135
+ cfg_files.save()
136
+
137
+
138
+ def apply_lightweight_simconfig_preset(cfg_files):
139
+ files = cfg_files.files
140
+
141
+ cfg_files.save()
142
+
143
+ def apply_a2rl_simconfig_preset(cfg_files):
144
+ files = cfg_files.files
145
+
146
+ cfg_files.save()
@@ -1,20 +0,0 @@
1
- from avrs.requests.request import AvrsApiRequest
2
-
3
- class Teleport(AvrsApiRequest):
4
- def __init__(self, parser, cfg):
5
- AvrsApiRequest.__init__(self, parser, cfg, 'Teleport', "Ego")
6
- psr = parser.add_parser('teleport', help='Teleports the car to the given x,y,z in either enu or lla.')
7
- psr.add_argument('x', type=float, help='new x position')
8
- psr.add_argument('y', type=float, help='new y position')
9
- psr.add_argument('z', type=float, help='new z position')
10
- #psr.add_argument('nav', help='lla or enu coordinate system.', nargs=1, choices=('lla', 'enu'))
11
- psr.set_defaults(func=self.send_request)
12
-
13
-
14
- def get_request_body(self, args):
15
- return {
16
- "X": args.x,
17
- "Y": args.y,
18
- "Z": args.z
19
- #'NavFrame': args.nav
20
- }
@@ -1,70 +0,0 @@
1
- import os
2
- import json
3
-
4
- class SimConfigFiles():
5
- def __init__(self, saved_dir):
6
-
7
- self.required_files = {
8
- 'main': os.path.join(saved_dir, 'simconfig.json'),
9
- 'eav24': os.path.join(saved_dir, 'Objects', 'Eav24_default.json'),
10
- 'yas': os.path.join(saved_dir, 'Environments', 'yasmarina_env.json')
11
- }
12
- self.files = {}
13
-
14
- ok, status = self.valdiate()
15
- if ok:
16
- for name, path in self.required_files.items():
17
- with open(path, 'r', encoding='utf-8') as f:
18
- self.files[name] = json.load(f)
19
-
20
- def valdiate(self):
21
- for name, path in self.required_files.items():
22
- if not os.path.exists(path):
23
- return (False, '{} not found'.format(path))
24
- return (True, '')
25
-
26
- def save(self):
27
- for name, path in self.required_files.items():
28
- with open(path, 'w', encoding='utf-8') as f:
29
- json.dump(self.files[name], f, ensure_ascii=False, indent=4)
30
-
31
- def apply_simconfig_preset(sim_saved_dir, preset_name):
32
- cfg_files = SimConfigFiles(sim_saved_dir)
33
- ok, status = cfg_files.valdiate()
34
- if not ok:
35
- print(status)
36
- return
37
-
38
- presets = {
39
- 'default': apply_default_simconfig_preset,
40
- 'lightweight': apply_lightweight_simconfig_preset,
41
- 'a2rl': apply_a2rl_simconfig_preset
42
- }
43
- presets[preset_name](cfg_files)
44
-
45
- def apply_default_simconfig_preset(cfg_files):
46
- files = cfg_files.files
47
-
48
- print('globally enabling ROS2 and CAN')
49
- files['main']['interfaces']['bEnableRos2'] = True
50
- files['main']['interfaces']['bEnableCan'] = True
51
-
52
- print('ensuring default eav24 and yasmarina are reference in main config')
53
- if not 'Environments/yasmarina_env.json' in files['main']['environmentPaths']:
54
- print('missing yas environment. adding')
55
- print('{}'.format(files['main']['environmentPaths']))
56
- if not 'Objects/Eav24_default.json' in files['main']['objectTemplatePaths']:
57
- print('missing eav24. adding')
58
-
59
- cfg_files.save()
60
-
61
-
62
- def apply_lightweight_simconfig_preset(cfg_files):
63
- files = cfg_files.files
64
-
65
- cfg_files.save()
66
-
67
- def apply_a2rl_simconfig_preset(cfg_files):
68
- files = cfg_files.files
69
-
70
- cfg_files.save()
File without changes
File without changes
File without changes