diff --git a/docs/CARS.md b/docs/CARS.md index 7e98d32743..473149afd5 100644 --- a/docs/CARS.md +++ b/docs/CARS.md @@ -140,7 +140,7 @@ Community Maintained Cars and Features | Subaru | Impreza 2017-19 | EyeSight | Stock | 0mph | 0mph | | Volkswagen| Arteon 20214 | Driver Assistance | Stock | 0mph | 0mph | | Volkswagen| Atlas 2018-19 | Driver Assistance | Stock | 0mph | 0mph | -| Volkswagen| California 20214 | Driver Assistance | Stock | 0mph | 0mph | +| Volkswagen| California 20214 | Driver Assistance | Stock | 0mph | 32mph | | Volkswagen| e-Golf 2014, 2019-20 | Driver Assistance | Stock | 0mph | 0mph | | Volkswagen| Golf 2015-20 | Driver Assistance | Stock | 0mph | 0mph | | Volkswagen| Golf Alltrack 2017-18 | Driver Assistance | Stock | 0mph | 0mph | diff --git a/selfdrive/car/volkswagen/carcontroller.py b/selfdrive/car/volkswagen/carcontroller.py index 52a077df2a..97f00008bd 100644 --- a/selfdrive/car/volkswagen/carcontroller.py +++ b/selfdrive/car/volkswagen/carcontroller.py @@ -39,7 +39,7 @@ class CarController(): # torque value. Do that anytime we happen to have 0 torque, or failing that, # when exceeding ~1/3 the 360 second timer. - if enabled and not (CS.out.standstill or CS.out.steerError or CS.out.steerWarning): + if enabled and CS.out.vEgo > CS.CP.minSteerSpeed and not (CS.out.standstill or CS.out.steerError or CS.out.steerWarning): new_steer = int(round(actuators.steer * P.STEER_MAX)) apply_steer = apply_std_steer_torque_limits(new_steer, self.apply_steer_last, CS.out.steeringTorque, P) self.steer_rate_limited = new_steer != apply_steer diff --git a/selfdrive/car/volkswagen/interface.py b/selfdrive/car/volkswagen/interface.py index b24ff05dc3..ccdfeea14c 100644 --- a/selfdrive/car/volkswagen/interface.py +++ b/selfdrive/car/volkswagen/interface.py @@ -94,6 +94,7 @@ class CarInterface(CarInterfaceBase): elif candidate == CAR.TRANSPORTER_T61: ret.mass = 1926 + STD_CARGO_KG ret.wheelbase = 3.00 # SWB, LWB is 3.40, TBD how to detect difference + ret.minSteerSpeed = 14.0 elif candidate == CAR.AUDI_A3_MK3: ret.mass = 1335 + STD_CARGO_KG @@ -135,16 +136,13 @@ class CarInterface(CarInterfaceBase): ret.mass = 1505 + STD_CARGO_KG ret.wheelbase = 2.84 - # TODO: get actual value, for now starting with reasonable value for - # civic and scaling by mass and wheelbase - ret.rotationalInertia = scale_rot_inertia(ret.mass, ret.wheelbase) + else: + raise ValueError("unsupported car %s" % candidate) - # TODO: start from empirically derived lateral slip stiffness for the civic and scale by - # mass and CG position, so all cars will have approximately similar dyn behaviors + ret.rotationalInertia = scale_rot_inertia(ret.mass, ret.wheelbase) ret.centerToFront = ret.wheelbase * 0.45 ret.tireStiffnessFront, ret.tireStiffnessRear = scale_tire_stiffness(ret.mass, ret.wheelbase, ret.centerToFront, tire_stiffness_factor=tire_stiffness_factor) - return ret # returns a car.CarState @@ -182,6 +180,14 @@ class CarInterface(CarInterfaceBase): if self.CS.parkingBrakeSet: events.add(EventName.parkBrake) + # Low speed steer alert hysteresis logic + if ret.vEgo < (self.CP.minSteerSpeed + 1.): + self.low_speed_alert = True + elif ret.vEgo > (self.CP.minSteerSpeed + 2.): + self.low_speed_alert = False + if self.low_speed_alert: + events.add(EventName.belowSteerSpeed) + ret.events = events.to_msg() ret.buttonEvents = buttonEvents