edge/tools/lib
tonesto7 a97cdb588a
Merged in experimental (SP 2024.06.05-1964) (#8)
* sync with alan-polk/dev-c3-app

* updated readme.md

* udpates to readme

* new image

* removed dead links

* fix typo in utilize

* no lane change smoothing in a curve

* updated logo

* add back support sunnypilot to readme.md

* updated lane change logic

* updated tuning on lane change modifiers

* 0.5 on right lane changes

* right is positive in comma world

* updated lane change tuning

* self.right_lc_modifier = 0.80

* self.right_lc_modifier = 0.70

* apply curvature limits after all calculations instead of before.

* use absolute value of apply_curvature when detecting lane change.

* if steeringPressed and abs(steeringAngleDeg) > 45:

* Merged in sunnypilot v2024.05.24-1822

* Fixed 23-24 Escape carname in sunnypilot_carname.json

* fixed missing torque data override for FORD_ESCAPE_MK4_23REFRESH

* additional LMC2 variables.

* bp readme.md

* Fixed issues with explorer mk6 after recent merge

* Merged in latest sp-dev changes into experimental

* create desired_curvature as a calculated value

* Only apply curvature limits once (#6)

* Only apply curvature limits once

* create immediate_curvature.

* safety limits before lane changes

* Merged SP Dev 2024.06.05-1964

---------

Co-authored-by: alan-polk <56047663+alan-polk@users.noreply.github.com>
2024-06-08 11:01:21 -04:00
..
tests Merged in experimental (SP 2024.06.05-1964) (#8) 2024-06-08 11:01:21 -04:00
README.md sunnypilot v2024.04.30-1666 2024-04-30 20:59:55 +00:00
__init__.py sunnypilot v2024.04.30-1666 2024-04-30 20:59:55 +00:00
api.py sunnypilot v2024.04.30-1666 2024-04-30 20:59:55 +00:00
auth.py sunnypilot v2024.04.30-1666 2024-04-30 20:59:55 +00:00
auth_config.py sunnypilot v2024.04.30-1666 2024-04-30 20:59:55 +00:00
azure_container.py Merged in experimental (SP 2024.06.05-1964) (#8) 2024-06-08 11:01:21 -04:00
bootlog.py sunnypilot v2024.04.30-1666 2024-04-30 20:59:55 +00:00
cache.py sunnypilot v2024.04.30-1666 2024-04-30 20:59:55 +00:00
comma_car_segments.py Merged in experimental (SP 2024.06.05-1964) (#8) 2024-06-08 11:01:21 -04:00
exceptions.py sunnypilot v2024.04.30-1666 2024-04-30 20:59:55 +00:00
filereader.py sunnypilot v2024.04.30-1666 2024-04-30 20:59:55 +00:00
framereader.py sunnypilot v2024.04.30-1666 2024-04-30 20:59:55 +00:00
helpers.py Merged in experimental (SP 2024.06.05-1964) (#8) 2024-06-08 11:01:21 -04:00
kbhit.py sunnypilot v2024.04.30-1666 2024-04-30 20:59:55 +00:00
live_logreader.py sunnypilot v2024.04.30-1666 2024-04-30 20:59:55 +00:00
logreader.py Merged in experimental (SP 2024.06.05-1964) (#8) 2024-06-08 11:01:21 -04:00
openpilotci.py sunnypilot v2024.04.30-1666 2024-04-30 20:59:55 +00:00
openpilotcontainers.py sunnypilot v2024.04.30-1666 2024-04-30 20:59:55 +00:00
route.py Merged in experimental (SP 2024.06.05-1964) (#8) 2024-06-08 11:01:21 -04:00
sanitizer.py sunnypilot v2024.04.30-1666 2024-04-30 20:59:55 +00:00
url_file.py sunnypilot v2024.04.30-1666 2024-04-30 20:59:55 +00:00
vidindex.py sunnypilot v2024.04.30-1666 2024-04-30 20:59:55 +00:00

README.md

LogReader

Route is a class for conveniently accessing all the logs from your routes. The LogReader class reads the non-video logs, i.e. rlog.bz2 and qlog.bz2. There's also a matching FrameReader class for reading the videos.

from openpilot.tools.lib.route import Route
from openpilot.tools.lib.logreader import LogReader

r = Route("a2a0ccea32023010|2023-07-27--13-01-19")

# get a list of paths for the route's rlog files
print(r.log_paths())

# and road camera (fcamera.hevc) files
print(r.camera_paths())

# setup a LogReader to read the route's first rlog
lr = LogReader(r.log_paths()[0])

# print out all the messages in the log
import codecs
codecs.register_error("strict", codecs.backslashreplace_errors)
for msg in lr:
  print(msg)

# setup a LogReader for the route's second qlog
lr = LogReader(r.log_paths()[1])

# print all the steering angles values from the log
for msg in lr:
  if msg.which() == "carState":
    print(msg.carState.steeringAngleDeg)

Segment Ranges

We also support a new format called a "segment range":

344c5c15b34f2d8a   /   2024-01-03--09-37-12   /     2:6    /       q
[   dongle id     ] [       timestamp        ] [ selector ]  [ query type]

you can specify which segments from a route to load

lr = LogReader("a2a0ccea32023010|2023-07-27--13-01-19/4")   # 4th segment
lr = LogReader("a2a0ccea32023010|2023-07-27--13-01-19/4:6") # 4th and 5th segment
lr = LogReader("a2a0ccea32023010|2023-07-27--13-01-19/-1")  # last segment
lr = LogReader("a2a0ccea32023010|2023-07-27--13-01-19/:5")  # first 5 segments
lr = LogReader("a2a0ccea32023010|2023-07-27--13-01-19/1:")  # all except first segment

and can select which type of logs to grab

lr = LogReader("a2a0ccea32023010|2023-07-27--13-01-19/4/q") # get qlogs
lr = LogReader("a2a0ccea32023010|2023-07-27--13-01-19/4/r") # get rlogs (default)