Repo which contains tools to facilitate development and debugging of openpilot.
Table of Contents
- Tool examples
- Welcomed contributions
openpilot-tools and the following setup steps are developed and tested on Ubuntu 16.04, MacOS 10.14.2 and Python 2.7.
Install native dependencies (Mac and Ubuntu sections listed below)
sudo apt install git curl python-pip sudo pip install --upgrade pip>=18.0
ffmpeg (tested with 3.3.2)
sudo apt install ffmpeg libavformat-dev libavcodec-dev libavdevice-dev libavutil-dev libswscale-dev libavresample-dev libavfilter-dev
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
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install git sudo pip install --upgrade pip xcode-select --install
ffmpeg (tested with 3.4.1)
brew install ffmpeg
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
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
Clone openpilot if you haven't already
git clone https://github.com/commaai/openpilot.git cd openpilot
For Mac users
Recompile longitudinal_mpc for mac
cd selfdrive/controls/lib/longitudinal_mpc make clean make
Clone openpilot_tools within openpilot, and install dependencies
git clone https://github.com/commaai/openpilot-tools.git openpilot_tools cd openpilot_tools # sudo pip install if not using a venv pip install -r requirements.txt pip install -r ../requirements_openpilot.txt
Add openpilot to your
For bash users:
echo 'export PYTHONPATH="$PYTHONPATH:<path-to-openpilot>"' >> ~/.bashrc source ~/.bashrc
Add some folders to root
sudo mkdir /data sudo mkdir /data/params sudo chown $USER /data/params
Try out some tools!
Replay driving data
Hardware needed: none
You'll need to download log and camera files into a local directory. Download these from the footer of the comma explorer or SCP from your device.
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 # ... # 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
Debug car controls
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.
python carcontrols/joystickd.py # In another terminal: selfdrive/boardd/boardd.py # Make sure the safety setting is hardcoded to ALL_OUTPUT # In another terminal: python carcontrols/debug_controls.py
Stream replayed CAN messages to 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.
# With MOCK=1 boardd will read logged can messages from a replay and send them to the panda. MOCK=1 openpilot_tools/replay/boardd.py # In another terminal: python replay/unlogger.py <route-name> <path-to-data-directory>
Stream EON video data to a PC
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.
# 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
- 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.pymight not be able to run real-time on most PCs.
- More tools: anything that you think might be helpful to others.