openpilot 0.9.5

5 minute read

Driving model improvements

Farmville model

This release of openpilot includes a major architecture change to the driving models (#30392). We changed the architecture from using EfficientNets to using FastViTs. These models use a Hybrid Vision Transformer architecture and perform much better in all our tests. This is the biggest improvement we’ve shipped since the 0.9.0 model redesign.

The Non-Inflatable (#29003) model inputs navigation instructions in addition to the navigation features into the driving model. Navigation instructions are encoded as a ternary (left, straight, right) vector of length 50 (from -500 to +500 meters at a resolution of 20 meters). Adding this input improves Navigate on openpilot performance, especially when the map image is not enough to determine the maneuver type and its distance to ego.

Left: The raw map generated by openpilot, with the route marked in gray. Center: How the map looks after being compressed/decompressed by a neural net. Right: Rendered Navigation instructions vector

End-to-end lateral planning

Before this release, openpilot lateral and longitudinal planning relied on MPCs and some hand-coded logic to transform the model-predicted plan into an executable and smooth trajectory. With the New Lemon Pie model (#30209), we moved the lateral MPC and planner completely to our ground truth stack and inside the model, which means that the model directly outputs an executable lateral trajectory. In the next releases, we will do the same for longitudinal planning. Doing the planning as part of the model is an important step towards making the driving models more end-to-end.

openpilot Tools

MetaDrive: our new default simulator experience

Running openpilot on a PC should be as easy as possible for testing UI changes, refactors, and basic functionality. Our new simulator is a simple pip install (included with our standard dev dependencies) and is much more portable than our old CARLA simulator.

openpilot running in the MetaDrive simulator!

In the future, we’d like to have openpilot complete a loop around the MetaDrive world for every commit within CI as an end-to-end test of both the driving and general system, to ensure that basic functionality is never broken.

Testing: faster and easier

We have also done a lot of work improving our testing environment. Our goal for CI is to have everything run in under 10 minutes (#29380), which promotes faster development. On our 0.9.4 release commit, it took 35 minutes to run all the unit tests! It now takes 10 minutes in CI and 3.5 minutes on our local development machines.

As part of this effort, openpilot now uses pytest, which allows for parallelization of tests and running the whole test suite with one command!

$ pytest -n auto --dist=loadscope

12 workers [2990 items]
2513 passed, 478 skipped in 212.28s (0:03:32)

Multilang contributions

  • Added Arabic language, translations thanks to royjr! (#25269, #29881)
  • Added French language, translations thanks to Korben00! (#29260)
  • Added Thai language, translations thanks to taperec (#25189) and Iamz (#29183)!
  • Added Turkish language, translations thanks to muhammetardayildiz! (#25765)
  • Chinese translation updates thanks to magicparty (#29993) and eFiniLan (#29310)!
  • Improvements to translation testing (#29441, #29439)
  • Korean translation updates thanks to hletrd (#30038) and crwusiz (#30073)!

UI updates

Bug fixes

  • Map: don’t reset view while panning or zooming (#29470)
  • Map: fix map ETA text alignment with certain languages (#29311)
  • Map: use the active lane type for exits and turns (#29159)
  • Networking: fix bug preventing current network from being highlighted (#29396)


  • Map: add slight turn lane types (#29446)
  • Map: improve distance rounding (#29151)
  • Map: initialize speed filter at current speed (#29605)
  • Map: sort destinations by recent activity (#29079)
  • Networking: immediately show connecting status after tapping a network (#29378)


This release of openpilot continues to increase reliability within the car stack with a more thorough car interface fuzzing test, expanded test route coverage, and simplification in the car interface.

The car interface fuzzing test (#28530) is now run on a local Jenkins machine with hundreds of examples each commit (#29592) to catch less common bugs (#28539, #28030, #28404).

TestCarModel is used to catch bugs such as CAN errors and panda safety mismatches by replaying real user-supplied driving routes. We increased the number of routes tested from one per car platform, to one per every openpilot user! This allows us to be confident that no user will ever experience these kinds of regressions. (#26226)

We also made the CANParser parse all signals of each CAN message (opendbc#828), removing the need to specify which signals each car port reads. This simple change cut car-specific code by 11% (9,894 to 8,742 lines), speeding up car port development and maintenance, and shrinking opportunities for bugs like forgetting to specify a message signal. (#27773)

Bug fixes

  • Honda: handle buttons changing state without going unpressed (#26463)
  • Hyundai CAN FD: disallow Manual Speed Limit Assist for EVs (#29888)
  • Hyundai: log non-adaptive cruise state (#29880)
  • Hyundai: match panda standstill check (#29442)
  • Hyundai: show FCA indicator on all CAN platforms when using longitudinal (alpha) (#29484)
  • Hyundai: update driver braking signal to include regen braking from the user (#30424)
  • Ram: fix temporary steering fault on certain Ram 1500 models (#30280)
  • Subaru: ensure inactive gas is sent when canceling (#29362)
  • Toyota: fix incorrect steering wheel angle offset when angle rate is high (#30277)


  • Cleanup: parse all signals of each CAN message, reduces possible bugs and simplifies porting new cars! (#27773)
  • Fingerprinting: speed up fingerprinting when not an exact match (#29233)
  • GM: improve steering tune on Silverado 1500 2020-21 (#29540)
  • GM: new ignition signal excludes accessory mode and transitions quicker, hiding a fault (#29923)
  • Hyundai: allow alpha longitudinal for Ioniq Hybrid 2017-19 (#29778), Ioniq Electric 2020 (#29531), and Ioniq Plug-in Hybrid 2020-22 (#29777)
  • Nissan: allow B gear mode with openpilot (#29228)
  • Subaru: fixed occasional steering faults on certain cars (#29116)
  • Testing: car interface fuzzing test is now run longer to catch more bugs, all without testing in a car (#29592)
  • Testing: TestCarModel, a similar test that is run on real CAN data, is also now run on a larger route list. This tests more configurations of our supported cars (#26226)
  • Testing: check that the cruise state matches between panda and openpilot (#29423)
  • Toyota: improved fuzzy fingerprinting by understanding the ECU FW versions (#30015, #28641)
  • Toyota: show FCW indicator on the car’s HUD from openpilot (#25677)

Car Ports

  • Cadillac Escalade ESV 2019 support thanks to twilsonco! (#29913)
  • Hyundai Azera 2022 support thanks to sunnyhaibin! (#29876)
  • Hyundai Azera Hybrid 2020 support thanks to chanhojung and haram-KONA! (#29984)
  • Hyundai Custin 2023 support thanks to sunnyhaibin and Saber422! (#29476)
  • Hyundai Ioniq 6 2023 support thanks to sunnyhaibin and alamo3! (#29486)
  • Hyundai Kona Electric 2023 (Korean version) support thanks to sunnyhaibin and haram-KONA! (#28725)
  • Kia K8 Hybrid (with HDA II) 2023 support thanks to sunnyhaibin! (#29899)
  • Kia Optima Hybrid 2019 support (#29992)
  • Kia Sorento Hybrid 2023 support thanks to sunnyhaibin! (#29322)
  • Lexus GS F 2016 support thanks to snyperifle! (#30245)
  • Lexus IS 2023 support thanks to L3R5! (#29257)

Join the team

We’re hiring great engineers to own and work on all parts of the openpilot stack. If anything here interests you, apply for a job or join us on GitHub! We’re also offering a cash hiring bounty if you refer someone.