Skip to content

Commit 57da40e

Browse files
committed
reseting lateral speed after completing continous lane change and before the next angle computation. refs #11882, alternativ to fix #12139
1 parent 97139a8 commit 57da40e

6 files changed

+17
-1
lines changed

src/microsim/MSLaneChanger.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,6 @@ MSLaneChanger::change() {
293293
if (vehicle->getLaneChangeModel().isChangingLanes() && !vehicle->getLaneChangeModel().alreadyChanged()) {
294294
return continueChange(vehicle, myCandi);
295295
}
296-
vehicle->getLaneChangeModel().setSpeedLat(0);
297296
if (!myAllowsChanging || vehicle->getLaneChangeModel().alreadyChanged() || vehicle->isStoppedOnLane()) {
298297
registerUnchanged(vehicle);
299298
if (vehicle->isStoppedOnLane()) {

src/microsim/MSLaneChangerSublane.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,7 @@ MSLaneChangerSublane::abortLCManeuver(MSVehicle* vehicle) {
281281
vehicle->getLaneChangeModel().setSpeedLat(0);
282282
vehicle->getLaneChangeModel().setManeuverDist(0.);
283283
vehicle->getLaneChangeModel().updateTargetLane();
284+
//vehicle->computeAngle();
284285
}
285286

286287

src/microsim/MSVehicle.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -4308,6 +4308,8 @@ MSVehicle::executeMove() {
43084308
if (myType->getVehicleClass() == SVC_EMERGENCY) {
43094309
setEmergencyBlueLight(MSNet::getInstance()->getCurrentTimeStep());
43104310
}
4311+
// must be done before angle computation
4312+
myLaneChangeModel->resetSpeedLat();
43114313
// State needs to be reset for all vehicles before the next call to MSEdgeControl::changeLanes
43124314
if (myActionStep) {
43134315
// check (#2681): Can this be skipped?

src/microsim/lcmodels/MSAbstractLaneChangeModel.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,15 @@ MSAbstractLaneChangeModel::setSpeedLat(double speedLat) {
426426
mySpeedLat = speedLat;
427427
}
428428

429+
430+
void
431+
MSAbstractLaneChangeModel::resetSpeedLat() {
432+
if (MSGlobals::gLaneChangeDuration > 0 && !isChangingLanes()) {
433+
setSpeedLat(0);
434+
}
435+
}
436+
437+
429438
bool
430439
MSAbstractLaneChangeModel::updateCompletion() {
431440
const bool pastBefore = pastMidpoint();

src/microsim/lcmodels/MSAbstractLaneChangeModel.h

+4
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,10 @@ class MSAbstractLaneChangeModel {
560560
return mySpeedLat;
561561
}
562562

563+
/* @brief reset the angle (in case no lane changing happens in this step
564+
* and the maneuver was finished in the previous step) */
565+
virtual void resetSpeedLat();
566+
563567
/// @brief return the lateral speed of the current lane change maneuver
564568
double getAccelerationLat() const {
565569
return myAccelerationLat;

src/microsim/lcmodels/MSLCM_LC2013.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -1076,6 +1076,7 @@ MSLCM_LC2013::prepareStep() {
10761076
scaledDelta = deltaPosLat * myVehicle.getSpeed() / myVehicle.getLane()->getSpeedLimit();
10771077
}
10781078
myVehicle.setLateralPositionOnLane(oldPosLat + scaledDelta);
1079+
setSpeedLat(DIST2SPEED(scaledDelta));
10791080
}
10801081
}
10811082

0 commit comments

Comments
 (0)