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.
 
 
 
 
 
 
Vehicle Researcher 9ac425abaf openpilot v0.9.9 release 13 hours ago
..
board openpilot v0.9.9 release 13 hours ago
certs openpilot v0.9.4 release 2 years ago
crypto openpilot v0.9.4 release 2 years ago
docs openpilot v0.9.7 release 11 months ago
drivers openpilot v0.9.8 release 1 month ago
examples openpilot v0.9.8 release 1 month ago
python openpilot v0.9.8 release 1 month ago
release openpilot v0.9.8 release 1 month ago
tests openpilot v0.9.8 release 1 month ago
.gitignore openpilot v0.9.8 release 1 month ago
.pre-commit-config.yaml openpilot v0.9.8 release 1 month ago
Dockerfile openpilot v0.9.8 release 1 month ago
Jenkinsfile openpilot v0.9.8 release 1 month ago
LICENSE openpilot v0.9.8 release 1 month ago
README.md openpilot v0.9.8 release 1 month ago
SConscript openpilot v0.9.8 release 1 month ago
SConstruct openpilot v0.9.8 release 1 month ago
__init__.py openpilot v0.9.8 release 1 month ago
mypy.ini openpilot v0.9.7 release 11 months ago
panda.png openpilot v0.9.7 release 11 months ago
pyproject.toml openpilot v0.9.8 release 1 month ago
setup.cfg openpilot v0.9.7 release 11 months ago
setup.py openpilot v0.9.8 release 1 month ago

README.md

Welcome to panda

panda tests panda drivers

panda speaks CAN and CAN FD, and it runs on STM32F413 and STM32H725.

Directory structure

.
├── board           # Code that runs on the STM32
├── drivers         # Drivers (not needed for use with Python)
├── python          # Python userspace library for interfacing with the panda
├── tests           # Tests and helper programs for panda

Safety Model

panda is compiled with safety firmware provided by opendbc. See details about the car safety models, safety testing, and code rigor in that repository.

Code Rigor

The panda firmware is written for its use in conjunction with openpilot. The panda firmware, through its safety model, provides and enforces the openpilot safety. Due to its critical function, it's important that the application code rigor within the board folder is held to high standards.

These are the CI regression tests we have in place:

  • A generic static code analysis is performed by cppcheck.
  • In addition, cppcheck has a specific addon to check for MISRA C:2012 violations. See current coverage.
  • Compiler options are relatively strict: the flags -Wall -Wextra -Wstrict-prototypes -Werror are enforced.
  • The safety logic is tested and verified by unit tests for each supported car variant. to ensure that the behavior remains unchanged.
  • A hardware-in-the-loop test verifies panda's functionalities on all active panda variants, including:
    • additional safety model checks
    • compiling and flashing the bootstub and app code
    • receiving, sending, and forwarding CAN messages on all buses
    • CAN loopback and latency tests through USB and SPI

The above tests are themselves tested by:

In addition, we run the ruff linter and mypy on panda's Python library.

Usage

Setup dependencies:

# Ubuntu
sudo apt-get install dfu-util gcc-arm-none-eabi python3-pip libffi-dev git clang-17

# macOS
brew install --cask gcc-arm-embedded
brew install python3 dfu-util gcc@13

Clone panda repository and install:

git clone https://github.com/commaai/panda.git
cd panda

# install dependencies
pip install -e .[dev]

# install panda
python setup.py install

See the Panda class for how to interact with the panda.

For example, to receive CAN messages:

>>> from panda import Panda
>>> panda = Panda()
>>> panda.can_recv()

And to send one on bus 0:

>>> from opendbc.car.structs import CarParams
>>> panda.set_safety_mode(CarParams.SafetyModel.allOutput)
>>> panda.can_send(0x1aa, b'message', 0)

Note that you may have to setup udev rules for Linux, such as

sudo tee /etc/udev/rules.d/11-panda.rules <<EOF
SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="3801", ATTRS{idProduct}=="ddcc", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="3801", ATTRS{idProduct}=="ddee", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="bbaa", ATTRS{idProduct}=="ddcc", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="bbaa", ATTRS{idProduct}=="ddee", MODE="0666"
EOF
sudo udevadm control --reload-rules && sudo udevadm trigger

The panda jungle uses different udev rules. See the repo for instructions.

Software interface support

As a universal car interface, it should support every reasonable software interface.

Licensing

panda software is released under the MIT license unless otherwise specified.