commaai / opendbc

a Python API for your car
MIT License
1.9k stars 1.11k forks source link

Toyota ICE 8-Speed and CVT winds up/jerks clutch when sending negative ACC values #1162

Open rockerrock137 opened 1 year ago

rockerrock137 commented 1 year ago

Describe the bug

Current ACC for Toyota often sends negative values in the ACC command which results in:

This issue is very apparent when running in Experimental mode as the ACC signal is often +/- zero point.

Obviously, constantly changing the CVT ratio and engaging/disengaging torque converter lockup isn't good for the transmission long term. It's also uncomfortable for passengers as there is a constant "catch" feeling from the drivetrain. More often in experimental, less often in chill, but still noticeable.

I've experimented with increasing the deadzone, which seems to work well. Note that hybrid effects may be less noticeable due to the unique way gearing is (or isn't) a factor.

An A/B test could be as simple as comparing stock ACC behavior route to an OP controlled route. It would also be beneficial to also log engine RPM, or some other value representative of transmission operation.

Ideally, we'd mock stock behavior and send 0 accel to coast and positive int to accel when ego car speed changes are minor. This can be accomplished by the deadzone, but I think that maybe a deadzone on negative acc commands could be beneficial to not gimp gas commands; although, I have not noticed bad behavior by a general deadzone; long just feels smoother, even for experimental.

These values seem to work well

tune.deadzoneBP = [0., 9.]
tune.deadzoneV = [.0, .25]

Looks like there is already a TODO in longcontrol.py, so this enhancement should fit in well

image

Which car does this affect?

Toyota ICE Automatic Transmissions

Provide a route where the issue occurs

0976603847a63139|2023-04-19--15-53-54

openpilot version

5a4452e3c636d8e4d8ea9b4456f5821c943342b2

Additional info

No response

asdfasd2312 commented 1 year ago

I concur.

https://discord.com/channels/771493367246094347/771495215570747403/1100872546863296602

ntegan1 commented 1 year ago

I have a TSSP ICE CVT corolla and would definitely like OP to interact with the powertrain more closely to how stock ACC does as its longitudinal policy is designed/tuned for each car.

One major difference I've noticed is that on downhills, my stock ACC will coast with engine braking for at least a few dozen seconds (unless there's a lead car or the set speed is decreased) before applying friction braking.
Also the acceleration requested when at a standstill in SnG is much smaller (and variable) in magnitude with stock ACC compared to OP's constant -2.0 value.

Logging and analyzing engine RPM for consideration in longitudinal policy / tuning sounds like it could be a good idea. Engine RPM is already logged as a raw CAN message but it doesn't appear to be parsed by carstate.py into the CarState cereal message.
I find that my slow weak Corolla will floor it to redline-ish RPM when increasing speed sometimes which is undesirable for comfort / tuning purposes.