STATUS: In progress
First drive: 9/20/2024

Chevy Volt openpilot car port

I built a custom harness to enable openpilot in my 2018 Chevy Volt. openpilot is an open-source project allowing self-driving to cars equipped with adaptive cruise control (ACC) and lane keeping assist (LKA) systems. The Volt has been compatible for many years, however due to recent changes, the old harness was deprecated and removed from support. This project aimed to re-port the car, and make improvements along the way, like enabling automatic emergency braking.

Old harness design

The original port of the Volt was done in 2018, when openpilot was a very new project. Little was understood about the car CAN architecture across many makes, and was mostly based around the Toyota network design. This involves connecting a front mounted radar to the forward facing camera, and connecting the camera to the car.

GM however, did not do this. They connected the radar and camera separately to a module in the rear called the ASCM. Since the workings of this module were rather unknown, it was found the easiest solution was to run a switched power to it, turn off the module, and emulate it over the OBD-II port.

This works quite well, however comes with some major downsides:

  • No automatic emergency braking while openpilot is enabled

  • openpilot MUST do the longitudinal control of the car (gas/brakes)

  • openpilot’s emulation of the messages resulted in errors when the car booted

  • if openpilot crashes, the car reverts immediately back to full manual control

The approach

Since 2018, many other GM vehicles have been ported, including most of the Chevy/GMC/Cadillac lineup. GM used various different architectures over the years, and this would come to my advantage.

My goal was to fix all the issues above. I was okay with losing openpilot longitudinal control, as long as the safety issues were addressed. While reverse-engineering the car, it was found that the exact method of how the car sent its messages was different than expected.

The assumption was: the front camera was connected to the powertrain (PT) CAN bus AND the object detection (OBJ) CAN bus, and the ASCM was connected to PT, OBJ, and chassis (CH). When the ASCM is disabled, it was presumed that would mute the camera’s messages so we could send our own LKA command over PT.

However, this was not the case. In lower trim Volts, Bolts, and other cars, the camera is connected to only the PT bus since they don’t have a radar module. On the Volts with ACC, this is not the case, they only talk on CH, and the ASCM will send the LKA commands itself. This is what I was going to take advantage of.

Building a harness

So once this crucial piece of information was figured out, it was not that hard to create a harness to make this work.

I obtained the connectors for the ASCM based on mid-2000s GM radio connectors, which happen to be identical and readily available. I was able to cut the PT bus in half at the module, and set up the car harness to intercept just the PT bus. This was routed to the front of the car using a 10ft USB-C extension cable, which is how the Comma3 hardware talks to the rest of the car.

After testing it in the car, there were no more errors when the C3 booted up! Now just need to make some software to run this thing.

Software port

Remember that all those other GM cars were ported? Well this was very helpful when doing this port. GM did some cost savings when going to the newer 2019+ cars and many of them got rid of the radar and ASCM for a camera only solution. These are known as CAM cars. Well, the programming on the CAM cars is almost identical to the ASCM behavior, so it only required some minor differences to port everything.

Some of the differences include:

  • Not checking for AEB message since the ASCM sends this on CH instead of PT

  • Ignoring cruise-status message, which does not report valid information on 2018. This would normally tell you if the car was in standard CC or adaptive CC, but this feature was not released till 2019

  • Changing the location of the brake position message, since the Volt engine control unit (ECU) will shut off certain messages when the ASCM is active.

Results & what’s next

I have had this in my car for close to 3,000 miles now. It drives great, and having all my safety features back is wonderful. I have not had any issues with errors or other problems on my car like I did with the previous hardware solution. I have also had a few other Volt owners switch to my port with praise.

I however, have lost the ability for openpilot to control the gas/brakes of the car. The ASCM uses two busses to control the car instead of 1, which Comma3 is not able to intercept both at the same time. This is going to be updated soon with the addition of the sASCM hardware, which will add a CAN gateway to the CH bus and allow messages to be sent over the PT bus and have them forwarded to the ASCM. In this case, this will be the ultimate solution having AEB and full openpilot control at the same time.