autoverse-cli 0.28.1__tar.gz → 0.28.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/PKG-INFO +1 -1
  2. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/pyproject.toml +1 -1
  3. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/autoverse_cli.egg-info/PKG-INFO +1 -1
  4. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/app_version.py +1 -1
  5. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/launcher.py +10 -13
  6. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/race_cloud.py +1 -0
  7. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/race_cloud_cfg_util.py +30 -4
  8. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/race_cloud_util.py +26 -6
  9. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/LICENSE +0 -0
  10. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/README.md +0 -0
  11. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/setup.cfg +0 -0
  12. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/autoverse_cli.egg-info/SOURCES.txt +0 -0
  13. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/autoverse_cli.egg-info/dependency_links.txt +0 -0
  14. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/autoverse_cli.egg-info/entry_points.txt +0 -0
  15. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/autoverse_cli.egg-info/requires.txt +0 -0
  16. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/autoverse_cli.egg-info/top_level.txt +0 -0
  17. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/__init__.py +0 -0
  18. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/argparse_help.py +0 -0
  19. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/avrs.py +0 -0
  20. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/can_tool.py +0 -0
  21. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/can_tool_util.py +0 -0
  22. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/cfg.py +0 -0
  23. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/launcher_util.py +0 -0
  24. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/race_cloud_bridge_can.py +0 -0
  25. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/race_cloud_fwd_api.py +0 -0
  26. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/change_camera.py +0 -0
  27. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/code_booz.py +0 -0
  28. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/demo.py +0 -0
  29. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/dump_sim_config.py +0 -0
  30. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/environment.py +0 -0
  31. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/fault_injection.py +0 -0
  32. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/get_object_config.py +0 -0
  33. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/get_web_viz_meta.py +0 -0
  34. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/leaderboard.py +0 -0
  35. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/list_sim_objects.py +0 -0
  36. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/log_path.py +0 -0
  37. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/misc.py +0 -0
  38. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/move_to_landmark.py +0 -0
  39. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/npc.py +0 -0
  40. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/race_control.py +0 -0
  41. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/request.py +0 -0
  42. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/reset_to_track.py +0 -0
  43. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/rest_request.py +0 -0
  44. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/restart.py +0 -0
  45. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/scenario_control.py +0 -0
  46. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/spawn_object.py +0 -0
  47. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/teleport.py +0 -0
  48. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/toggle_hud.py +0 -0
  49. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/vd.py +0 -0
  50. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/vehicle_input.py +0 -0
  51. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/requests/vehicle_replay.py +0 -0
  52. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/shell_completion.py +0 -0
  53. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/simconfig.py +0 -0
  54. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/simconfig_util.py +0 -0
  55. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/tests.py +0 -0
  56. {autoverse_cli-0.28.1 → autoverse_cli-0.28.3}/src/avrs/util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: autoverse-cli
3
- Version: 0.28.1
3
+ Version: 0.28.3
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.28.1"
3
+ version = "0.28.3"
4
4
  dependencies = [
5
5
  "boto3",
6
6
  "cantools",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: autoverse-cli
3
- Version: 0.28.1
3
+ Version: 0.28.3
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
@@ -2,7 +2,7 @@ import http.client
2
2
  import json
3
3
 
4
4
  def get_app_version():
5
- return '0.28.1'
5
+ return '0.28.2'
6
6
 
7
7
  def check_app_is_latest():
8
8
  pass
@@ -115,7 +115,7 @@ class AvrsLauncher:
115
115
 
116
116
  # Check if variant is valid (for backwards compatibility, we still proceed even if invalid)
117
117
  variant_is_invalid = False
118
- if args.variant not in ["staged", "feature"]:
118
+ if args.variant != "staged":
119
119
  # Ensure variants are loaded
120
120
  if 'variants' not in self.cfg:
121
121
  (dl_keys_ok, dl_keys_status, self.cfg) = try_get_launcher_download_keys(self.cfg)
@@ -128,7 +128,7 @@ class AvrsLauncher:
128
128
  sys.stderr.write('Warning: "{}" is not a known variant. Available variants: {}\n'.format(
129
129
  args.variant, self.cfg['variants']))
130
130
 
131
- variant_to_query = "autoverse" if args.variant in ["staged", "feature"] else args.variant
131
+ variant_to_query = "autoverse" if args.variant == "staged" else args.variant
132
132
 
133
133
  # Get latest build info from API
134
134
  build_info_ok, build_info_status, latest_version, staged_version, build_info = get_launcher_build_info(
@@ -139,19 +139,11 @@ class AvrsLauncher:
139
139
 
140
140
  if args.variant == "staged":
141
141
  print('{}'.format(staged_version))
142
- elif args.variant == "feature":
143
- feature_info = build_info.get('feature', {})
144
- if isinstance(feature_info, str):
145
- try:
146
- feature_info = json.loads(feature_info)
147
- except json.JSONDecodeError:
148
- pass
149
- print('{}'.format(json.dumps(feature_info)))
150
142
  else:
151
143
  print('{}'.format(latest_version))
152
144
  if variant_is_invalid:
153
- # Explain that the output is the default/prod variant version, not the requested variant
154
- sys.stderr.write('Note: The version shown above is the production version of the default variant, not "{}"\n'.format(
145
+ # Explain that the variant name was not recognized
146
+ sys.stderr.write('Note: "{}" is not a known variant; showing the prod version value returned by the build info\n'.format(
155
147
  args.variant))
156
148
 
157
149
  def download_simulator(self, args):
@@ -207,10 +199,15 @@ class AvrsLauncher:
207
199
  target_version = args.target_version
208
200
  print('attempting to download specified version: {}'.format(target_version))
209
201
 
210
- package_zip_name = 'autoverse-linux-{}.zip'.format(target_version)
211
202
  package_name = 'autoverse-linux'
203
+ package_zip_name = '{}-{}.zip'.format(package_name, target_version)
204
+
205
+ if args.variant == 'feature':
206
+ package_zip_name = '{}-feature.zip'.format(package_name)
212
207
  if target_version == 'feature':
213
208
  args.variant = 'feature'
209
+ package_zip_name = '{}-feature.zip'.format(package_name)
210
+
214
211
  bucket_path = '{}/{}'.format(args.variant, package_zip_name)
215
212
  dl_path = os.path.join(args.install_path, package_zip_name)
216
213
  unzip_path = os.path.join(args.install_path, package_name)
@@ -229,6 +229,7 @@ class AvrsRaceCloud(AvrsApiRequest):
229
229
  ok, response = call_race_cloud_api(connection_request)
230
230
  if not ok:
231
231
  print('connect api error: {}'.format(response))
232
+ return
232
233
 
233
234
  ok, rbody, sim_ip = get_api_script_response(response)
234
235
  if not ok:
@@ -78,13 +78,13 @@ def register_received_vehicle(team_name, slot, cfg_data, bsu_vcan, kistler_vcan,
78
78
  if eav24 is None:
79
79
  return (False, 'no eav24 payload found')
80
80
 
81
- logger.info('disabling perception for received vehicle config')
82
- eav24['body']['bLidarEnabled'] = False
81
+ #logger.info('disabling perception for received vehicle config')
82
+ # eav24['body']['bLidarEnabled'] = False
83
83
  eav24['body']['bCameraEnabled'] = False
84
84
  eav24['body']['bRadarEnabled'] = False
85
- eav24['body']['bPublishGroundTruth'] = False
85
+ # eav24['body']['bPublishGroundTruth'] = False
86
86
  eav24['body']['bPublishInputs'] = False
87
- eav24['body']['bRenderHudInWorld'] = True
87
+ eav24['body']['bRenderHudInWorld'] = False
88
88
 
89
89
  # do not disable HUD
90
90
  #logger.info('disabling hud for received vehicle config')
@@ -208,6 +208,32 @@ def register_received_vehicle(team_name, slot, cfg_data, bsu_vcan, kistler_vcan,
208
208
  logger.info("opponentGroundTruthDsd rate was > 100. clamping")
209
209
  gtc["body"]["opponentGroundTruthDsd"]["rateHz"] = 100
210
210
 
211
+ # clamp lidar rates
212
+ for payload in cfg_object['payloads']:
213
+ if payload['typeName'].lower() == 'genericlidaripd':
214
+ lidar_rate = payload.get("body", {}).get("sensorDesc", {}).get("dataStream", {}).get("rateHz", 0)
215
+ if lidar_rate > 20:
216
+ instance_name = payload.get("body", {}).get("componentConfig", {}).get("instanceName", "unknown")
217
+ logger.info("lidar {} rate was > 20. clamping".format(instance_name))
218
+ payload["body"]["sensorDesc"]["dataStream"]["rateHz"] = 20
219
+
220
+ # clamp camera rates
221
+ for payload in cfg_object['payloads']:
222
+ if payload['typeName'].lower() == 'camerasensor':
223
+ camera_rate = payload.get("body", {}).get("sensorDesc", {}).get("dataStream", {}).get("rateHz", 0)
224
+ if camera_rate > 20:
225
+ instance_name = payload.get("body", {}).get("componentConfig", {}).get("instanceName", "unknown")
226
+ logger.info("camera {} rate was > 20. clamping".format(instance_name))
227
+ payload["body"]["sensorDesc"]["dataStream"]["rateHz"] = 20
228
+
229
+ # clamp radar rates
230
+ for payload in cfg_object['payloads']:
231
+ if payload['typeName'].lower() == 'radarsensor':
232
+ radar_rate = payload.get("body", {}).get("sensorDesc", {}).get("dataStream", {}).get("rateHz", 0)
233
+ if radar_rate > 20:
234
+ instance_name = payload.get("body", {}).get("componentConfig", {}).get("instanceName", "unknown")
235
+ logger.info("radar {} rate was > 20. clamping".format(instance_name))
236
+ payload["body"]["sensorDesc"]["dataStream"]["rateHz"] = 20
211
237
 
212
238
  # do not allow default object name (collision)
213
239
  if cfg_object['name'] == 'eav24':
@@ -375,10 +375,30 @@ def call_race_cloud_api(body):
375
375
  return (True, response.read().decode('utf-8'))
376
376
 
377
377
  def get_api_script_response(raw):
378
- decoded = json.loads(raw)['body']
379
378
  logger = logging.getLogger('avrs')
380
- logger.info('race cloud api response: {}'.format(decoded))
381
- if decoded['script_response']['statusCode'] != 200:
382
- return (False, 'inner response had bad status code {}'.format(decoded))
383
- #print(decoded)
384
- return (True, json.loads(decoded['script_response']['body']), decoded['sim_private_ip'])
379
+ try:
380
+ parsed = json.loads(raw)
381
+ decoded = parsed['body']
382
+
383
+ # Handle double-encoded JSON (body is a string instead of dict)
384
+ if isinstance(decoded, str):
385
+ decoded = json.loads(decoded)
386
+
387
+ logger.info('race cloud api response: {}'.format(decoded))
388
+
389
+ if 'script_response' not in decoded:
390
+ return (False, 'missing script_response in response: {}'.format(decoded), None)
391
+
392
+ if decoded['script_response']['statusCode'] != 200:
393
+ return (False, 'inner response had bad status code {}'.format(decoded), None)
394
+
395
+ return (True, json.loads(decoded['script_response']['body']), decoded['sim_private_ip'])
396
+ except json.JSONDecodeError as e:
397
+ logger.error('failed to parse API response as JSON: {}'.format(e))
398
+ return (False, 'invalid JSON response: {}'.format(raw[:500]), None)
399
+ except KeyError as e:
400
+ logger.error('missing expected key in API response: {}'.format(e))
401
+ return (False, 'missing key {} in response: {}'.format(e, raw[:500]), None)
402
+ except Exception as e:
403
+ logger.error('unexpected error parsing API response: {}'.format(e))
404
+ return (False, 'error parsing response: {}'.format(e), None)
File without changes
File without changes
File without changes