openpilot0/tools
Adeeb 1132e6e8d2 tools is no longer a separate repo (#1308)
old-commit-hash: 83d8dd4717
2020-04-01 22:34:41 -07:00
..
carcontrols initialize all messages in 1 line (#1206) 2020-03-05 17:32:52 -08:00
clib NUI comma api intergration (#1186) 2020-03-01 22:06:33 -08:00
lib support any number of top level dirs 2020-03-06 17:55:42 -08:00
livedm merge in tools 2020-01-17 10:07:22 -08:00
misc merge in tools 2020-01-17 10:07:22 -08:00
nui NUI comma api intergration (#1186) 2020-03-01 22:06:33 -08:00
replay mac fixes 2020-02-29 18:30:44 -08:00
sim add webcam to cameras (#1201) 2020-03-26 19:19:47 -07:00
ssh merge in tools 2020-01-17 10:07:22 -08:00
streamer initialize all messages in 1 line (#1206) 2020-03-05 17:32:52 -08:00
webcam update readme 2020-03-30 14:13:04 -07:00
LICENSE merge in tools 2020-01-17 10:07:22 -08:00
README.md tools is no longer a separate repo (#1308) 2020-04-01 22:34:41 -07:00
__init__.py merge in tools 2020-01-17 10:07:22 -08:00
openpilot_env.sh mac fixes 2020-02-29 18:30:44 -08:00
requirements.txt setup ubuntu improvements 2020-02-29 14:50:51 -08:00
steer.gif merge in tools 2020-01-17 10:07:22 -08:00
stream.gif merge in tools 2020-01-17 10:07:22 -08:00
ubuntu_setup.sh Docs/tools: Update Tensorflow to 2.1 in readme and build script (#1286) 2020-03-28 12:10:43 -07:00

README.md

openpilot tools

tools to facilitate development and debugging of openpilot

Imgur

Table of Contents

Requirements

openpilot tools and the following setup steps are developed and tested on Ubuntu 16.04, MacOS 10.14.2 and Python 3.7.3.

Setup

TODO: These instructions maybe outdated, follow ubuntu_setup.sh setup instructions

  1. Install native dependencies (Mac and Ubuntu sections listed below)

    Ubuntu

    • core tools

      sudo apt install git curl python-pip
      sudo pip install --upgrade pip>=18.0 pipenv
      
    • ffmpeg (tested with 3.3.2)

      sudo apt install ffmpeg libavformat-dev libavcodec-dev libavdevice-dev libavutil-dev libswscale-dev libavresample-dev libavfilter-dev
      
    • build tools

      sudo apt install autoconf automake clang clang-3.8 libtool pkg-config build-essential
      
    • libarchive-dev (tested with 3.1.2-11ubuntu0.16.04.4)

      sudo apt install libarchive-dev
      
    • qt python binding (tested with python-qt4, 4.11.4+dfsg-1build4)

      sudo apt install python-qt4
      
    • zmq 4.2.3 (required for replay)

      curl -LO https://github.com/zeromq/libzmq/releases/download/v4.2.3/zeromq-4.2.3.tar.gz
      tar xfz zeromq-4.2.3.tar.gz
      cd zeromq-4.2.3
      ./autogen.sh
      ./configure CPPFLAGS=-DPIC CFLAGS=-fPIC CXXFLAGS=-fPIC LDFLAGS=-fPIC --disable-shared --enable-static
      make
      sudo make install
      

    Mac

    • brew

      /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
      
    • core tools

      brew install git
      sudo pip install --upgrade pip pipenv
      xcode-select --install
      
    • ffmpeg (tested with 3.4.1)

      brew install ffmpeg
      
    • build tools

      brew install autoconf automake libtool llvm pkg-config
      
    • libarchive-dev (tested with 3.3.3)

      brew install libarchive
      
    • qt for Mac

      brew install qt
      
    • zmq 4.3.1 (required for replay)

      brew install zeromq
      
  2. Install Cap'n Proto

    curl -O https://capnproto.org/capnproto-c++-0.6.1.tar.gz
    tar xvf capnproto-c++-0.6.1.tar.gz
    cd capnproto-c++-0.6.1
    ./configure --prefix=/usr/local CPPFLAGS=-DPIC CFLAGS=-fPIC CXXFLAGS=-fPIC LDFLAGS=-fPIC --disable-shared --enable-static
    make -j4
    sudo make install
    
    cd ..
    git clone https://github.com/commaai/c-capnproto.git
    cd c-capnproto
    git submodule update --init --recursive
    autoreconf -f -i -s
    CFLAGS="-fPIC" ./configure --prefix=/usr/local
    make -j4
    sudo make install
    
  3. Clone openpilot if you haven't already

    git clone https://github.com/commaai/openpilot.git
    cd openpilot
    pipenv install # Install dependencies in a virtualenv
    pipenv shell # Activate the virtualenv
    

    For Mac users

    Recompile longitudinal_mpc for mac

    Navigate to:

    cd selfdrive/controls/lib/longitudinal_mpc
    make clean
    make
    
  4. Install tools dependencies

    cd tools
    pip install -r requirements.txt # Install tools dependencies in virtualenv
    
  5. Add openpilot to your PYTHONPATH.

    For bash users:

    echo 'export PYTHONPATH="$PYTHONPATH:<path-to-openpilot>"' >> ~/.bashrc
    source ~/.bashrc
    
  6. Add some folders to root

    sudo mkdir /data
    sudo mkdir /data/params
    sudo chown $USER /data/params
    
  7. Try out some tools!

Tool examples

Replay driving data

Hardware needed: none

unlogger.py replays data collected with chffrplus or openpilot.

Unlogger with remote data:

# Log in via browser
python lib/auth.py

# Start unlogger
python replay/unlogger.py <route-name>
#Example:
#python replay/unlogger.py '3533c53bb29502d1|2019-12-10--01-13-27'

# In another terminal you can run a debug visualizer:
python replay/ui.py   # Define the environmental variable HORIZONTAL is the ui layout is too tall

Unlogger with local data downloaded from device or https://my.comma.ai:

python replay/unlogger.py <route-name> <path-to-data-directory>

#Example:

#python replay/unlogger.py '99c94dc769b5d96e|2018-11-14--13-31-42' /home/batman/unlogger_data

#Within /home/batman/unlogger_data:
#  99c94dc769b5d96e|2018-11-14--13-31-42--0--fcamera.hevc
#  99c94dc769b5d96e|2018-11-14--13-31-42--0--rlog.bz2
#  ...

Imgur

LogReader with remote data

from tools.lib.logreader import LogReader
from tools.lib.route import Route
route = Route('3533c53bb29502d1|2019-12-10--01-13-27')
log_paths = route.log_paths()
events_seg0 = list(LogReader(log_paths[0]))
print(len(events_seg0), 'events logged in first segment')

Debug car controls

Hardware needed: panda, giraffe, joystick

Use the panda's OBD-II port to connect with your car and a usb cable to connect the panda to your pc. Also, connect a joystick to your pc.

joystickd.py runs a deamon that reads inputs from a joystick and publishes them over zmq. boardd.py sends the CAN messages from your pc to the panda. debug_controls is a mocked version of controlsd.py and uses input from a joystick to send controls to your car.

Usage:

python carcontrols/joystickd.py

# In another terminal:
selfdrive/boardd/tests/boardd_old.py # Make sure the safety setting is hardcoded to ALL_OUTPUT

# In another terminal:
python carcontrols/debug_controls.py

Imgur

Stream replayed CAN messages to EON

Hardware needed: 2 x panda, debug board, EON.

It is possible to replay CAN messages as they were recorded and forward them to a EON.  Connect 2 pandas to the debug board. A panda connects to the PC, the other panda connects to the EON.

Usage:

# With MOCK=1 boardd will read logged can messages from a replay and send them to the panda.
MOCK=1 selfdrive/boardd/tests/boardd_old.py

# In another terminal:
python replay/unlogger.py <route-name> <path-to-data-directory>

Imgur

Stream EON video data to a PC

Hardware needed: EON, comma Smays.

You can connect your EON to your pc using the Ethernet cable provided with the comma Smays and you'll be able to stream data from your EON, in real time, with low latency. A useful application is being able to stream the raw video frames at 20fps, as captured by the EON's camera.

Usage:

# ssh into the eon and run loggerd with the flag "--stream". In ../selfdrive/manager.py you can change:
# ...
# "loggerd": ("selfdrive/loggerd", ["./loggerd"]),
# ...
# with:
# ...
# "loggerd": ("selfdrive/loggerd", ["./loggerd", "--stream"]),
# ...

# On the PC:
# To receive frames from the EON and re-publish them. Set PYGAME env variable if you want to display the video stream
python streamer/streamerd.py

Imgur

Welcomed contributions

  • Documentation: code comments, better tutorials, etc..
  • Support for other platforms other than Ubuntu 16.04.
  • Performance improvements: the tools have been developed on high-performance workstations (12+ logical cores with 32+ GB of RAM), so they are not optimized for running efficiently. For example, ui.py might not be able to run real-time on most PCs.
  • More tools: anything that you think might be helpful to others.