A library that handles communication with a comma.ai Panda interface device. Simple demos collect data from the panda (grey version) to the screen.
- Required - libusb-1.0-0-dev
- Optional - libcurses5-dev
- Included - NMEAParser
The core of this library is based on libusb, the default version installable through Ubuntu's apt-get.
An optional example for data visualization is based on ncurses. If desired to run this example, libcurses needs to be installed but is not required
The NMEAParser is already included as a modified version with some bug fixes and added features.
- Bugs fixed:
- Incomplete time precision for seconds in RMC strings
- Year calculation incorrect byte offset resulting in incorrect year parsings
- Additional features:
- ZDA NMEA message parsing
These instructions were successful on a Raspberry pi 4 running Ubuntu 18.04
$ sudo apt-get install libusb-1.0-0-dev
$ sudo apt-get install libncurses5-dev
$ mkdir build
$ cd build
$ cmake ..
$ make
Barebones example showing a minimal implementation
$ sudo ./panda
This example listens to the GPS and when data is valid, synchronizes the system clock to the GPS's UTC if the difference is larger than a defined delta.
$ sudo ./pandaSetTime
An example that currently plots GPS data to the console in a pretty fashion. This also takes arguments for various data collection and tuning.
$ sudo ./pandaCurses
Save NMEA strings to a file named nmeaFile.txt:
$ sudo ./pandaCurses -g nmeaFile.txt
Run with USB in synchronous mode (default is asynchronous):
$ sudo ./pandaCurses -u s
The library is self-documenting using Doxygen, producing both HTML and LaTex. Generate the documentation as follows:
$ doxygen doxygen.conf
If you do not have doxyen, you may install using, on Ubuntu:
$ sudo apt-get install doxygen
On macOS with amcport:
$ sudo port install doxygen
- Panda GPS interface
- Isochronous USB transfer
- CAN frame parsing
- CAN frame handling
- ROS based publishing
- Testing