VW MQB: Support for preempted HCA state
Description
VW steering racks support multiple external control channels:
- DSR (Driver Steering Recommendation, steering input from stability control)
- HCA (Heading Control Assist / Lane Assist)
- PLA (Park Assist)
Only one control channel can be active at a time, and in case of multiple control attempts, there is a defined order. DSR takes precedence over HCA. openpilot currently doesn't handle this well, because we don't see that control has been lost.
This PR adds support for the HCA preempted state, treating it as a temporary steering fault. This will let the driver know that we don't currently have steering control. It should also improve recovery, since it appears we can't exit the preempted state until openpilot returns to HCA ready/inactive.
- [x] Requires commaai/opendbc#1036.
Verification
End user testing in progress.
Route
Broken: b96e474d786172a7/00000075--e14beeb3ae, b96e474d786172a7/0000007f--19df962556
Fixed: pending end user testing
Additional Info
I think this is both an openpilot problem and a vehicle problem. This user is seeing an unusual amount of DSR interventions in what are otherwise normal driving situations. I noted a difference in wheel speed/tire circumference between his front and rear axles, which can be confusing for stability control. The owner asserts all four tires are matched type/brand and age, so there may be wear, inflation, or load issues. openpilot should be robust in the face of this problem, but something is odd with his vehicle to be the only one known to expose this bug regularly.
Thanks for contributing to openpilot! In order for us to review your PR as quickly as possible, check the following:
- Convert your PR to a draft unless it's ready to review
- Read the contributing docs
- Before marking as "ready for review", ensure:
- the goal is clearly stated in the description
- all the tests are passing
- the change is something we merge
- include a route or your device' dongle ID if relevant
Released from draft, ready for review.
I haven't received feedback from the end user yet, but this is a rare event that takes awhile to reproduce, and this is a very simple change with little downside risk. I was mainly looking to see if recovery was automatic; detection alone would be sufficient.
I request this be added to 0.9.7 milestones.