openpilot0/tools/replay
Maxime Desroches 50aac48fba
ci: faster unit_test (#34019)
* multiple

* CACHE

* ...

* cache

* now fast

* maybe

* bp

* vv

* slow

* fast

* fix

* faster

* ruff

* info

* timeout

* info

* more

* clean

* faster

* test

* collection time

* is this real?

* fix

* back

* clean

* just to make sure

* faster!
2024-11-13 21:27:23 -08:00
..
lib rerun: fix rp_visualization TypeError (#33749) 2024-10-08 14:50:55 -07:00
tests ci: faster unit_test (#34019) 2024-11-13 21:27:23 -08:00
.gitignore
README.md Typo on README.md of replay instructions (#33726) 2024-10-03 17:20:01 -07:00
SConscript replay: replace HttpRequest with libcurl for accessing comma API (#33851) 2024-11-12 14:34:12 -08:00
__init__.py
api.cc replay: replace HttpRequest with libcurl for accessing comma API (#33851) 2024-11-12 14:34:12 -08:00
api.h replay: replace HttpRequest with libcurl for accessing comma API (#33851) 2024-11-12 14:34:12 -08:00
camera.cc visionipc: remove RGB support (#33739) 2024-10-07 13:24:57 -07:00
camera.h Split cereal into cereal/msgq (#32631) 2024-06-06 14:31:56 -07:00
can_replay.py fix all codespell issues (#33194) 2024-08-05 15:25:02 -07:00
consoleui.cc replay: remove Qt dependency from Segment and Timeline (#33847) 2024-10-24 13:41:01 -07:00
consoleui.h replay: refactor ConsoleUI to remove Qt dependency (#33826) 2024-10-20 13:08:24 -07:00
filereader.cc replay: bug fixes and improvements (#32193) 2024-04-21 17:09:17 -07:00
filereader.h
framereader.cc replay: shared decoder context (#32255) 2024-04-24 19:44:18 -07:00
framereader.h camerad: remove `CameraType` enum from `camera_common.h` (#33588) 2024-09-19 10:33:24 -07:00
logreader.cc Deprecate controlsState state fields (#33437) 2024-09-03 14:40:23 -07:00
logreader.h camerad: remove `CameraType` enum from `camera_common.h` (#33588) 2024-09-19 10:33:24 -07:00
main.cc replay: refactor ConsoleUI to remove Qt dependency (#33826) 2024-10-20 13:08:24 -07:00
replay.cc replay: remove Qt dependency from Segment and Timeline (#33847) 2024-10-24 13:41:01 -07:00
replay.h cabana: refactor video widget for simplified layout and enhanced rendering (#33909) 2024-11-04 10:01:14 -08:00
route.cc replay: replace HttpRequest with libcurl for accessing comma API (#33851) 2024-11-12 14:34:12 -08:00
route.h replay: replace HttpRequest with libcurl for accessing comma API (#33851) 2024-11-12 14:34:12 -08:00
rp_visualization.py rerun: fix rp_visualization TypeError (#33749) 2024-10-08 14:50:55 -07:00
timeline.cc tools: fix replay build (#34017) 2024-11-13 13:52:07 -08:00
timeline.h replay: remove Qt dependency from Segment and Timeline (#33847) 2024-10-24 13:41:01 -07:00
unlog_ci_segment.py azure_container: pass the filename explicitely when using get_url (#33407) 2024-08-29 21:51:55 -07:00
util.cc replay: remove Qt dependency from Segment and Timeline (#33847) 2024-10-24 13:41:01 -07:00
util.h replay: remove Qt dependency from Segment and Timeline (#33847) 2024-10-24 13:41:01 -07:00

README.md

Replay

replay allows you to simulate a driving session by replaying all messages logged during the use of openpilot. This provides a way to analyze and visualize system behavior as if it were live.

Setup

Before starting a replay, you need to authenticate with your comma account using auth.py. This will allow you to access your routes from the server.

# Authenticate to access routes from your comma account:
python3 tools/lib/auth.py

Replay a Remote Route

You can replay a route from your comma account by specifying the route name.

# Start a replay with a specific route:
tools/replay/replay <route-name>

# Example:
tools/replay/replay 'a2a0ccea32023010|2023-07-27--13-01-19'

# Replay the default demo route:
tools/replay/replay --demo

Replay a Local Route

To replay a route stored locally on your machine, specify the route name and provide the path to the directory where the route files are stored.

# Replay a local route
tools/replay/replay <route-name> --data_dir="/path_to/route"

# Example:
# If you have a local route stored at /path_to_routes with segments like:
# a2a0ccea32023010|2023-07-27--13-01-19--0
# a2a0ccea32023010|2023-07-27--13-01-19--1
# You can replay it like this:
tools/replay/replay "a2a0ccea32023010|2023-07-27--13-01-19" --data_dir="/path_to_routes"

Send Messages via ZMQ

By default, replay sends messages via MSGQ. To switch to ZMQ, set the ZMQ environment variable.

# Start replay and send messages via ZMQ:
ZMQ=1 tools/replay/replay <route-name>

Usage

For more information on available options and arguments, use the help command:

$ tools/replay/replay -h
Usage: tools/replay/replay [options] route
Mock openpilot components by publishing logged messages.

Options:
  -h, --help             Displays this help.
  -a, --allow <allow>    whitelist of services to send
  -b, --block <block>    blacklist of services to send
  -c, --cache <n>        cache <n> segments in memory. default is 5
  -s, --start <seconds>  start from <seconds>
  -x <speed>             playback <speed>. between 0.2 - 3
  --demo                 use a demo route instead of providing your own
  --data_dir <data_dir>  local directory with routes
  --prefix <prefix>      set OPENPILOT_PREFIX
  --dcam                 load driver camera
  --ecam                 load wide road camera
  --no-loop              stop at the end of the route
  --no-cache             turn off local cache
  --qcam                 load qcamera
  --no-hw-decoder        disable HW video decoding
  --no-vipc              do not output video
  --all                  do output all messages including uiDebug, userFlag.
                         this may causes issues when used along with UI

Arguments:
  route                  the drive to replay. find your drives at
                         connect.comma.ai

Visualize the Replay in the Openpilot UI

To visualize the replay within the openpilot UI, run the following commands:

tools/replay/replay <route-name>
cd selfdrive/ui && ./ui

Try Radar Point Visualization with Rerun

To visualize radar points, run rp_visualization.py while tools/replay/replay is active.

tools/replay/replay <route-name>
python3 replay/rp_visualization.py

Work with plotjuggler

If you want to use replay with plotjuggler, you can stream messages by running:

tools/replay/replay <route-name>
tools/plotjuggler/juggle.py --stream

watch3

watch all three cameras simultaneously from your comma three routes with watch3

simply replay a route using the --dcam and --ecam flags:

# start a replay
cd tools/replay && ./replay --demo --dcam --ecam

# then start watch3
cd selfdrive/ui && ./watch3

Stream CAN messages to your device

Replay CAN messages as they were recorded using a panda jungle. The jungle has 6x OBD-C ports for connecting all your comma devices. Check out the jungle repo for more info.

In order to run your device as if it was in a car:

  • connect a panda jungle to your PC
  • connect a comma device or panda to the jungle via OBD-C
  • run can_replay.py
batman:replay$ ./can_replay.py -h
usage: can_replay.py [-h] [route_or_segment_name]

Replay CAN messages from a route to all connected pandas and jungles
in a loop.

positional arguments:
  route_or_segment_name
                        The route or segment name to replay. If not
                        specified, a default public route will be
                        used. (default: None)

optional arguments:
  -h, --help            show this help message and exit