openpilot docs

How to contribute#

Our software is open source so you can solve your own problems without needing help from others. And if you solve a problem and are so kind, you can upstream it for the rest of the world to use. Check out our post about externalization.

Development is coordinated through Discord and GitHub.

Getting Started#

What contributions are we looking for?#

openpilot's priorities are safety, stability, quality, and features, in that order. openpilot is part of comma's mission to solve self-driving cars while delivering shippable intermediaries, and all development is towards that goal.

What gets merged?#

The probability of a pull request being merged is a function of its value to the project and the effort it will take us to get it merged. If a PR offers some value but will take lots of time to get merged, it will be closed. Simple, well-tested bug fixes are the easiest to merge, and new features are the hardest to get merged.

All of these are examples of good PRs: * typo fix: https://github.com/commaai/openpilot/pull/30678 * removing unused code: https://github.com/commaai/openpilot/pull/30573 * simple car model port: https://github.com/commaai/openpilot/pull/30245 * car brand port: https://github.com/commaai/openpilot/pull/23331

What doesn't get merged?#

First contribution#

Projects / openpilot bounties is the best place to get started and goes in-depth on what's expected when working on a bounty. There are a lot of bounties that don't require a comma fourThe latest hardware by comma.ai for running openpilot. More info at comma.ai/shop/comma-four. or a car.

Pull Requests#

Pull requests should be against the master branch.

A good pull request has all of the following: * a clearly stated purpose * every line changed directly contributes to the stated purpose * verification, i.e. how did you test your PR? * justification * if you've optimized something, post benchmarks to prove it's better * if you've improved your car's tuning, post before and after plots * passes the CI tests

Contributing without Code#

Contributing Training Data#

A guide for forks#

In order for your fork's data to be eligible for the training set: * Your cereal messaging structs must be compatible * The definitions of all the stock messaging structs must not change: Do not change how any of the fields are set, including everything from selfdriveState.enabled to carState.steeringAngleDeg. Instead, create your own structs and set them however you'd like. * Do not include cars that are not supported in upstream platforms: Instead, create new opendbc platforms for cars that you'd like to support outside of upstream, even if it's just a trim-level difference.