openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Dean Lee d6214690dc
replay: fix various synchronization and event handling issues (#34254)
4 months ago
..
lib rerun: fix rp_visualization TypeError (#33749) 7 months ago
tests replay: eliminate qt dependency (#34102) 5 months ago
.gitignore move replay from selfdrive/ui/replay to tools/replay (#24971) 3 years ago
README.md Typo on README.md of replay instructions (#33726) 7 months ago
SConscript replay: eliminate qt dependency (#34102) 5 months ago
__init__.py merge in tools 5 years ago
api.cc replay: replace HttpRequest with libcurl for accessing comma API (#33851) 5 months ago
api.h replay: replace HttpRequest with libcurl for accessing comma API (#33851) 5 months ago
camera.cc visionipc: remove RGB support (#33739) 7 months ago
camera.h Split cereal into cereal/msgq (#32631) 11 months ago
can_replay.py fix all codespell issues (#33194) 9 months ago
consoleui.cc replay: eliminate qt dependency (#34102) 5 months ago
consoleui.h replay: refactor ConsoleUI to remove Qt dependency (#33826) 6 months ago
filereader.cc replay: bug fixes and improvements (#32193) 1 year ago
filereader.h move replay from selfdrive/ui/replay to tools/replay (#24971) 3 years ago
framereader.cc replay: shared decoder context (#32255) 1 year ago
framereader.h camerad: remove `CameraType` enum from `camera_common.h` (#33588) 7 months ago
logreader.cc Deprecate controlsState state fields (#33437) 8 months ago
logreader.h camerad: remove `CameraType` enum from `camera_common.h` (#33588) 7 months ago
main.cc replay: eliminate qt dependency (#34102) 5 months ago
replay.cc replay: fix various synchronization and event handling issues (#34254) 4 months ago
replay.h replay: fix various synchronization and event handling issues (#34254) 4 months ago
route.cc replay: eliminate qt dependency (#34102) 5 months ago
route.h replay: eliminate qt dependency (#34102) 5 months ago
rp_visualization.py rerun: fix rp_visualization TypeError (#33749) 7 months ago
seg_mgr.cc replay: fix various synchronization and event handling issues (#34254) 4 months ago
seg_mgr.h replay: fix various synchronization and event handling issues (#34254) 4 months ago
timeline.cc replay: fix various synchronization and event handling issues (#34254) 4 months ago
timeline.h replay: fix various synchronization and event handling issues (#34254) 4 months ago
unlog_ci_segment.py azure_container: pass the filename explicitely when using get_url (#33407) 8 months ago
util.cc replay: eliminate qt dependency (#34102) 5 months ago
util.h replay: eliminate qt dependency (#34102) 5 months ago

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