File |
Line |
org\opentrafficsim\road\gtu\lane\AbstractLaneBasedGTU.java |
1612 |
org\opentrafficsim\road\gtu\lane\AbstractLaneBasedGTU2.java |
1279 |
super.destroy();
}
/** {@inheritDoc} */
@Override
public final Bounds getBounds()
{
double dx = 0.5 * getLength().doubleValue();
double dy = 0.5 * getWidth().doubleValue();
return new BoundingBox(new Point3d(-dx, -dy, 0.0), new Point3d(dx, dy, 0.0));
}
/** {@inheritDoc} */
@Override
public final LaneBasedStrategicalPlanner getStrategicalPlanner()
{
return (LaneBasedStrategicalPlanner) super.getStrategicalPlanner();
}
/** {@inheritDoc} */
@Override
public final LaneBasedStrategicalPlanner getStrategicalPlanner(final Time time)
{
return (LaneBasedStrategicalPlanner) super.getStrategicalPlanner(time);
}
/** {@inheritDoc} */
@Override
public RoadNetwork getNetwork()
{
return (RoadNetwork) super.getPerceivableContext();
}
/** {@inheritDoc} */
@Override
public Speed getDesiredSpeed()
{
Time simTime = getSimulator().getSimulatorTime();
if (this.desiredSpeedTime == null || this.desiredSpeedTime.si < simTime.si)
{
InfrastructurePerception infra =
getTacticalPlanner().getPerception().getPerceptionCategoryOrNull(InfrastructurePerception.class);
SpeedLimitInfo speedInfo;
if (infra == null)
{
speedInfo = new SpeedLimitInfo();
speedInfo.addSpeedInfo(SpeedLimitTypes.MAX_VEHICLE_SPEED, getMaximumSpeed());
}
else
{
// Throw.whenNull(infra, "InfrastructurePerception is required to determine the desired speed.");
speedInfo = infra.getSpeedLimitProspect(RelativeLane.CURRENT).getSpeedLimitInfo(Length.ZERO);
}
this.cachedDesiredSpeed =
Try.assign(() -> getTacticalPlanner().getCarFollowingModel().desiredSpeed(getParameters(), speedInfo),
"Parameter exception while obtaining the desired speed.");
this.desiredSpeedTime = simTime;
}
return this.cachedDesiredSpeed;
}
/** {@inheritDoc} */
@Override
public Acceleration getCarFollowingAcceleration()
{
Time simTime = getSimulator().getSimulatorTime();
if (this.carFollowingAccelerationTime == null || this.carFollowingAccelerationTime.si < simTime.si)
{
LanePerception perception = getTacticalPlanner().getPerception();
// speed
EgoPerception<?, ?> ego = perception.getPerceptionCategoryOrNull(EgoPerception.class);
Throw.whenNull(ego, "EgoPerception is required to determine the speed.");
Speed speed = ego.getSpeed();
// speed limit info
InfrastructurePerception infra = perception.getPerceptionCategoryOrNull(InfrastructurePerception.class);
Throw.whenNull(infra, "InfrastructurePerception is required to determine the desired speed.");
SpeedLimitInfo speedInfo = infra.getSpeedLimitProspect(RelativeLane.CURRENT).getSpeedLimitInfo(Length.ZERO);
// leaders
NeighborsPerception neighbors = perception.getPerceptionCategoryOrNull(NeighborsPerception.class);
Throw.whenNull(neighbors, "NeighborsPerception is required to determine the car-following acceleration.");
PerceptionCollectable<HeadwayGTU, LaneBasedGTU> leaders = neighbors.getLeaders(RelativeLane.CURRENT);
// obtain
this.cachedCarFollowingAcceleration =
Try.assign(() -> getTacticalPlanner().getCarFollowingModel().followingAcceleration(getParameters(), speed,
speedInfo, leaders), "Parameter exception while obtaining the desired speed.");
this.carFollowingAccelerationTime = simTime;
}
return this.cachedCarFollowingAcceleration;
}
/** {@inheritDoc} */
@Override
public final TurnIndicatorStatus getTurnIndicatorStatus()
{
return this.turnIndicatorStatus.get();
}
/** {@inheritDoc} */
@Override
public final TurnIndicatorStatus getTurnIndicatorStatus(final Time time)
{
return this.turnIndicatorStatus.get(time);
}
/** {@inheritDoc} */
@Override
public final void setTurnIndicatorStatus(final TurnIndicatorStatus turnIndicatorStatus)
{
this.turnIndicatorStatus.set(turnIndicatorStatus);
}
/** {@inheritDoc} */
@Override |
File |
Line |
org\opentrafficsim\road\gtu\lane\tactical\following\IDMOld.java |
160 |
org\opentrafficsim\road\gtu\lane\tactical\following\IDMPlusOld.java |
177 |
}
/** {@inheritDoc} */
@Override
public final String getLongName()
{
return String.format("%s (a=%.1fm/s\u00b2, b=%.1fm/s\u00b2, s0=%.1fm, tSafe=%.1fs, delta=%.2f)", getName(),
this.a.getSI(), this.b.getSI(), this.s0.getSI(), this.tSafe.getSI(), this.delta);
}
/** {@inheritDoc} */
@Override
public final void setA(final Acceleration a)
{
this.a = a;
}
/** {@inheritDoc} */
@Override
public final void setT(final Duration t)
{
this.tSafe = t;
}
/** {@inheritDoc} */
@Override
public final void setFspeed(final double fSpeed)
{
this.delta = fSpeed;
}
// The following is inherited from CarFollowingModel
/** {@inheritDoc} */
@Override
public final Speed desiredSpeed(final Parameters parameters, final SpeedLimitInfo speedInfo) throws ParameterException
{
throw new UnsupportedOperationException("Old car-following model does not support desired speed.");
}
/** {@inheritDoc} */
@Override
public final Length desiredHeadway(final Parameters parameters, final Speed speed) throws ParameterException
{
throw new UnsupportedOperationException("Old car-following model does not support desired headway.");
}
/** {@inheritDoc} */
@Override
public final Acceleration followingAcceleration(final Parameters parameters, final Speed speed,
final SpeedLimitInfo speedInfo, final PerceptionIterable<? extends Headway> leaders) throws ParameterException
{
Length headway;
Speed leaderSpeed;
if (leaders.isEmpty())
{
headway = new Length(Double.MAX_VALUE, LengthUnit.SI);
leaderSpeed = speed;
}
else
{
Headway leader = leaders.first();
headway = leader.getDistance();
leaderSpeed = leader.getSpeed();
}
return this.computeAcceleration(speed, speedInfo.getSpeedInfo(SpeedLimitTypes.MAX_VEHICLE_SPEED), leaderSpeed, headway,
speedInfo.getSpeedInfo(SpeedLimitTypes.FIXED_SIGN));
}
/** {@inheritDoc} */
@Override
public final String toString()
{
return "IDMOld [s0=" + this.s0 + ", a=" + this.a + ", b=" + this.b + ", tSafe=" + this.tSafe + ", stepSize=" |
File |
Line |
org\opentrafficsim\road\gtu\lane\AbstractLaneBasedGTU.java |
185 |
org\opentrafficsim\road\gtu\lane\AbstractLaneBasedGTU2.java |
186 |
this.currentLanes = new HistoricalLinkedHashMap<>(historyManager);
this.turnIndicatorStatus = new HistoricalValue<>(historyManager, TurnIndicatorStatus.NOTPRESENT);
}
/**
* @param strategicalPlanner LaneBasedStrategicalPlanner; the strategical planner (e.g., route determination) to use
* @param initialLongitudinalPositions Set<DirectedLanePosition>; the initial positions of the car on one or more
* lanes with their directions
* @param initialSpeed Speed; the initial speed of the car on the lane
* @throws NetworkException when the GTU cannot be placed on the given lane
* @throws SimRuntimeException when the move method cannot be scheduled
* @throws GTUException when initial values are not correct
* @throws OTSGeometryException when the initial path is wrong
*/
@SuppressWarnings("checkstyle:designforextension")
public void init(final LaneBasedStrategicalPlanner strategicalPlanner,
final Set<DirectedLanePosition> initialLongitudinalPositions, final Speed initialSpeed)
throws NetworkException, SimRuntimeException, GTUException, OTSGeometryException
{
Throw.when(null == initialLongitudinalPositions, GTUException.class, "InitialLongitudinalPositions is null");
Throw.when(0 == initialLongitudinalPositions.size(), GTUException.class, "InitialLongitudinalPositions is empty set");
DirectedPoint lastPoint = null;
for (DirectedLanePosition pos : initialLongitudinalPositions)
{
// Throw.when(lastPoint != null && pos.getLocation().distance(lastPoint) > initialLocationThresholdDifference.si,
// GTUException.class, "initial locations for GTU have distance > " + initialLocationThresholdDifference);
lastPoint = pos.getLocation();
}
DirectedPoint initialLocation = lastPoint;
// Give the GTU a 1 micrometer long operational plan, or a stand-still plan, so the first move and events will work
Time now = getSimulator().getSimulatorTime();
try
{
if (initialSpeed.si < OperationalPlan.DRIFTING_SPEED_SI)
{
this.operationalPlan
.set(new OperationalPlan(this, initialLocation, now, new Duration(1E-6, DurationUnit.SECOND)));
}
else
{
OTSPoint3D p2 = new OTSPoint3D(initialLocation.x + 1E-6 * Math.cos(initialLocation.getRotZ()),
initialLocation.y + 1E-6 * Math.sin(initialLocation.getRotZ()), initialLocation.z);
OTSLine3D path = new OTSLine3D(new OTSPoint3D(initialLocation), p2);
this.operationalPlan.set(OperationalPlanBuilder.buildConstantSpeedPlan(this, path, now, initialSpeed));
}
}
catch (OperationalPlanException e)
{
throw new RuntimeException("Initial operational plan could not be created.", e);
} |
File |
Line |
org\opentrafficsim\road\gtu\lane\AbstractLaneBasedGTU.java |
514 |
org\opentrafficsim\road\gtu\lane\AbstractLaneBasedGTU2.java |
364 |
newLinkPositionsLC.put(lane.getLane().getParentLink(), adjusted.si / lane.getLength().si);
// upstream
if (dir < 1)
{
Length rear = lane.getDirection().isPlus() ? position.plus(getRear().getDx()) : position.minus(getRear().getDx());
Length before = null;
if (lane.getDirection().isPlus() && rear.si < 0.0)
{
before = rear.neg();
}
else if (lane.getDirection().isMinus() && rear.si > lane.getLength().si)
{
before = rear.minus(lane.getLength());
}
if (before != null)
{
GTUDirectionality upDir = lane.getDirection();
ImmutableMap<Lane, GTUDirectionality> upstream = lane.getLane().upstreamLanes(upDir, getGTUType());
if (!upstream.isEmpty())
{
Lane upLane = null;
for (Lane nextUp : upstream.keySet())
{ |
File |
Line |
org\opentrafficsim\road\gtu\lane\tactical\following\IDMOld.java |
80 |
org\opentrafficsim\road\gtu\lane\tactical\following\IDMPlusOld.java |
86 |
public IDMOld(final Acceleration a, final Acceleration b, final Length s0, final Duration tSafe, final double delta)
{
this.a = a;
this.b = b;
this.s0 = s0;
this.tSafe = tSafe;
this.delta = delta;
}
/**
* Desired speed (taking into account the urge to drive a little faster or slower than the posted speed limit).
* @param speedLimit Speed; the speed limit
* @param followerMaximumSpeed Speed; the maximum speed that the follower can drive
* @return DoubleScalarRel<SpeedUnit>; the desired speed
*/
private Speed vDes(final Speed speedLimit, final Speed followerMaximumSpeed)
{
return new Speed(Math.min(this.delta * speedLimit.getSI(), followerMaximumSpeed.getSI()), SpeedUnit.SI);
}
/** {@inheritDoc} */
@Override
public final Acceleration computeAcceleration(final Speed followerSpeed, final Speed followerMaximumSpeed,
final Speed leaderSpeed, final Length headway, final Speed speedLimit)
{
return computeAcceleration(followerSpeed, followerMaximumSpeed, leaderSpeed, headway, speedLimit, DEFAULT_STEP_SIZE);
}
/** {@inheritDoc} */
@Override
public final Acceleration computeAcceleration(final Speed followerSpeed, final Speed followerMaximumSpeed,
final Speed leaderSpeed, final Length headway, final Speed speedLimit, final Duration stepSize)
{ |
File |
Line |
org\opentrafficsim\road\network\lane\conflict\ConflictBuilder.java |
472 |
org\opentrafficsim\road\network\lane\conflict\ConflictBuilder.java |
585 |
Length longitudinalPosition2 = lane2.getLength().times(f2start);
Length length1 = lane1.getLength().times(Math.abs(f1end - f1start));
Length length2 = lane2.getLength().times(Math.abs(f2end - f2start));
// Get geometries
OTSLine3D geometry1 = getGeometry(lane1, f1start, f1end, widthGenerator);
OTSLine3D geometry2 = getGeometry(lane2, f2start, f2end, widthGenerator);
// Determine conflict rule
ConflictRule conflictRule;
if (lane1.getParentLink().getPriority().isBusStop() || lane2.getParentLink().getPriority().isBusStop())
{
Throw.when(lane1.getParentLink().getPriority().isBusStop() && lane2.getParentLink().getPriority().isBusStop(),
IllegalArgumentException.class, "Merge conflict between two links with bus stop priority not supported.");
conflictRule = new BusStopConflictRule(simulator);
}
else
{
conflictRule = new DefaultConflictRule();
}
// Make conflict
Conflict.generateConflictPair(ConflictType.MERGE, conflictRule, permitted, lane1, longitudinalPosition1, length1, dir1, |
File |
Line |
org\opentrafficsim\road\gtu\lane\perception\categories\neighbors\AccPerception.java |
53 |
org\opentrafficsim\road\gtu\lane\perception\categories\neighbors\CaccPerception.java |
54 |
public AccPerception(final LanePerception perception, final HeadwayGtuType sensors)
{
super(perception);
this.sensors = sensors;
}
/** {@inheritDoc} */
@Override
public void updateAll() throws GTUException, NetworkException, ParameterException
{
// lazy evaluation
}
/** {@inheritDoc} */
@Override
public PerceptionCollectable<HeadwayGTU, LaneBasedGTU> getLeaders()
{
return computeIfAbsent("leaders", () -> computeLeaders());
}
/**
* Computes leaders.
* @return perception iterable for leaders
*/
private PerceptionCollectable<HeadwayGTU, LaneBasedGTU> computeLeaders()
{
try
{
LaneStructureRecord record = getPerception().getLaneStructure().getRootRecord();
Length pos = record.getStartDistance().neg();
pos = record.getDirection().isPlus() ? pos.plus(getGtu().getFront().getDx())
: pos.minus(getGtu().getFront().getDx());
boolean ignoreIfUpstream = true;
return new DownstreamNeighboursIterableACC(getGtu(), record, Length.max(Length.ZERO, pos), |
File |
Line |
org\opentrafficsim\road\gtu\lane\AbstractLaneBasedGTU.java |
962 |
org\opentrafficsim\road\gtu\lane\AbstractLaneBasedGTU2.java |
993 |
throw new GTUException(this + " is not on any lane of Link " + link);
}
/** caching of time field for last stored position(s). */
private double cachePositionsTime = Double.NaN;
/** caching of last stored position(s). */
private Map<Integer, Length> cachedPositions = new LinkedHashMap<>();
/** {@inheritDoc} */
@Override
@SuppressWarnings("checkstyle:designforextension")
public Length position(final Lane lane, final RelativePosition relativePosition, final Time when) throws GTUException
{
int cacheIndex = 0;
if (CACHING)
{
cacheIndex = 17 * lane.hashCode() + relativePosition.hashCode();
Length l;
if (when.si == this.cachePositionsTime && (l = this.cachedPositions.get(cacheIndex)) != null)
{
// PK verify the result; uncomment if you don't trust the cache
// this.cachedPositions.clear();
// Length difficultWay = position(lane, relativePosition, when);
// if (Math.abs(l.si - difficultWay.si) > 0.00001)
// {
// System.err.println("Whoops: cache returns bad value for GTU " + getId());
// }
CACHED_POSITION++;
return l;
}
if (when.si != this.cachePositionsTime)
{
this.cachedPositions.clear();
this.cachePositionsTime = when.si;
}
}
NON_CACHED_POSITION++;
synchronized (this.lock)
{ |
File |
Line |
org\opentrafficsim\road\gtu\lane\tactical\util\lmrs\Cooperation.java |
49 |
org\opentrafficsim\road\gtu\lane\tactical\util\lmrs\Cooperation.java |
129 |
Acceleration a = new Acceleration(Double.MAX_VALUE, AccelerationUnit.SI);
double dCoop = params.getParameter(DCOOP);
Speed ownSpeed = perception.getPerceptionCategory(EgoPerception.class).getSpeed();
RelativeLane relativeLane = new RelativeLane(lat, 1);
for (HeadwayGTU leader : Synchronization.removeAllUpstreamOfConflicts(Synchronization.removeAllUpstreamOfConflicts(
perception.getPerceptionCategory(NeighborsPerception.class).getLeaders(relativeLane), perception,
relativeLane), perception, RelativeLane.CURRENT))
{
Parameters params2 = leader.getParameters();
double desire = lat.equals(LateralDirectionality.LEFT) ? params2.getParameter(DRIGHT)
: lat.equals(LateralDirectionality.RIGHT) ? params2.getParameter(DLEFT) : 0;
if (desire >= dCoop && (leader.getSpeed().gt0() || leader.getDistance().gt0())) |
File |
Line |
org\opentrafficsim\road\gtu\lane\AbstractLaneBasedGTU.java |
560 |
org\opentrafficsim\road\gtu\lane\AbstractLaneBasedGTU2.java |
410 |
}
}
}
// downstream
if (dir > -1)
{
Length front =
lane.getDirection().isPlus() ? position.plus(getFront().getDx()) : position.minus(getFront().getDx());
Length passed = null;
if (lane.getDirection().isPlus() && front.si > lane.getLength().si)
{
passed = front.minus(lane.getLength());
}
else if (lane.getDirection().isMinus() && front.si < 0.0)
{
passed = front.neg();
}
if (passed != null)
{
LaneDirection next = lane.getNextLaneDirection(this); |
File |
Line |
org\opentrafficsim\road\network\factory\LaneFactory.java |
447 |
org\opentrafficsim\road\network\factory\LaneFactory.java |
516 |
final CrossSectionLink link = makeLink(network, name, from, to, intermediatePoints, simulator);
Lane[] result = new Lane[laneCount];
Length width = new Length(4.0, LengthUnit.METER);
for (int laneIndex = 0; laneIndex < laneCount; laneIndex++)
{
// Be ware! LEFT is lateral positive, RIGHT is lateral negative.
Length latPosAtStart = new Length((-0.5 - laneIndex - laneOffsetAtStart) * width.getSI(), LengthUnit.SI);
Length latPosAtEnd = new Length((-0.5 - laneIndex - laneOffsetAtEnd) * width.getSI(), LengthUnit.SI);
result[laneIndex] =
makeLane(link, "lane." + laneIndex, laneType, latPosAtStart, latPosAtEnd, width, speedLimit, simulator);
}
return result;
} |
File |
Line |
org\opentrafficsim\road\gtu\lane\tactical\following\FixedAccelerationModel.java |
119 |
org\opentrafficsim\road\gtu\lane\tactical\following\SequentialFixedAccelerationModel.java |
187 |
}
/** {@inheritDoc} */
@Override
public final void setA(final Acceleration a)
{
//
}
/** {@inheritDoc} */
@Override
public final void setT(final Duration t)
{
//
}
/** {@inheritDoc} */
@Override
public final void setFspeed(final double fSpeed)
{
//
}
// The following is inherited from CarFollowingModel
/** {@inheritDoc} */
@Override
public final Speed desiredSpeed(final Parameters parameters, final SpeedLimitInfo speedInfo) throws ParameterException
{
return null;
}
/** {@inheritDoc} */
@Override
public final Length desiredHeadway(final Parameters parameters, final Speed speed) throws ParameterException
{
return null;
}
/** {@inheritDoc} */
@Override
public final Acceleration followingAcceleration(final Parameters parameters, final Speed speed,
final SpeedLimitInfo speedInfo, final PerceptionIterable<? extends Headway> leaders) throws ParameterException
{
return null;
} |
File |
Line |
org\opentrafficsim\road\gtu\lane\AbstractLaneBasedGTU.java |
242 |
org\opentrafficsim\road\gtu\lane\AbstractLaneBasedGTU2.java |
258 |
addLaneToGtu(lane, directedLanePosition.getPosition(), directedLanePosition.getGtuDirection()); // enter lane part 1
}
// init event
DirectedLanePosition referencePosition = getReferencePosition();
fireTimedEvent(LaneBasedGTU.LANEBASED_INIT_EVENT,
new Object[] { getId(), initialLocation, getLength(), getWidth(), referencePosition.getLane(),
referencePosition.getPosition(), referencePosition.getGtuDirection(), getGTUType() },
getSimulator().getSimulatorTime());
// register the GTU on the lanes
for (DirectedLanePosition directedLanePosition : initialLongitudinalPositions)
{
Lane lane = directedLanePosition.getLane();
lane.addGTU(this, directedLanePosition.getPosition()); // enter lane part 2
}
// initiate the actual move
super.init(strategicalPlanner, initialLocation, initialSpeed);
this.referencePositionTime = Double.NaN; // remove cache, it may be invalid as the above init results in a lane change
}
/**
* {@inheritDoc} All lanes the GTU is on will be left.
*/
@Override
public void setParent(final GTU gtu) throws GTUException |
File |
Line |
org\opentrafficsim\road\gtu\lane\tactical\LaneBasedGTUFollowingDirectedChangeTacticalPlanner.java |
294 |
org\opentrafficsim\road\gtu\lane\tactical\LaneBasedGTUFollowingDirectedChangeTacticalPlanner.java |
341 |
if (simplePerception.getParallelHeadwaysLeft().isEmpty())
{
Collection<Headway> sameLaneTraffic = new LinkedHashSet<>();
// TODO should it be getObjectType().isGtu() or !getObjectType().isDistanceOnly() ?
// XXX Object & GTU
if (simplePerception.getForwardHeadwayGTU() != null
&& simplePerception.getForwardHeadwayGTU().getObjectType().isGtu())
{
sameLaneTraffic.add(simplePerception.getForwardHeadwayGTU());
}
if (simplePerception.getBackwardHeadway() != null
&& simplePerception.getBackwardHeadway().getObjectType().isGtu())
{
sameLaneTraffic.add(simplePerception.getBackwardHeadway());
}
DirectedLaneChangeModel dlcm = new DirectedAltruistic(getPerception());
DirectedLaneMovementStep dlms = dlcm.computeLaneChangeAndAcceleration(laneBasedGTU,
LateralDirectionality.LEFT, sameLaneTraffic, simplePerception.getNeighboringHeadwaysLeft(), |
File |
Line |
org\opentrafficsim\road\gtu\lane\AbstractLaneBasedGTU.java |
1590 |
org\opentrafficsim\road\gtu\lane\AbstractLaneBasedGTU2.java |
1261 |
}
}
}
if (dlp != null && dlp.getLane() != null)
{
Lane referenceLane = dlp.getLane();
fireTimedEvent(LaneBasedGTU.LANEBASED_DESTROY_EVENT,
new Object[] { getId(), location, getOdometer(), referenceLane, dlp.getPosition(), dlp.getGtuDirection() },
getSimulator().getSimulatorTime());
}
else
{
fireTimedEvent(LaneBasedGTU.LANEBASED_DESTROY_EVENT,
new Object[] { getId(), location, getOdometer(), null, Length.ZERO, null },
getSimulator().getSimulatorTime());
} |
File |
Line |
org\opentrafficsim\road\gtu\lane\tactical\util\lmrs\Cooperation.java |
36 |
org\opentrafficsim\road\gtu\lane\tactical\util\lmrs\Cooperation.java |
72 |
org\opentrafficsim\road\gtu\lane\tactical\util\lmrs\Cooperation.java |
116 |
Cooperation PASSIVE = new Cooperation()
{
@Override
public Acceleration cooperate(final LanePerception perception, final Parameters params, final SpeedLimitInfo sli,
final CarFollowingModel cfm, final LateralDirectionality lat, final Desire ownDesire)
throws ParameterException, OperationalPlanException
{
if ((lat.isLeft() && !perception.getLaneStructure().getExtendedCrossSection().contains(RelativeLane.LEFT))
|| (lat.isRight() && !perception.getLaneStructure().getExtendedCrossSection().contains(RelativeLane.RIGHT)))
{
return new Acceleration(Double.MAX_VALUE, AccelerationUnit.SI);
}
Acceleration b = params.getParameter(ParameterTypes.B); |
File |
Line |
org\opentrafficsim\road\gtu\lane\AbstractLaneBasedGTU.java |
1497 |
org\opentrafficsim\road\gtu\lane\AbstractLaneBasedGTU2.java |
1184 |
}
return positions;
}
/** {@inheritDoc} */
@Override
public final double fractionalPosition(final Lane lane, final RelativePosition relativePosition, final Time when)
throws GTUException
{
return position(lane, relativePosition, when).getSI() / lane.getLength().getSI();
}
/** {@inheritDoc} */
@Override
public final double fractionalPosition(final Lane lane, final RelativePosition relativePosition) throws GTUException
{
return position(lane, relativePosition).getSI() / lane.getLength().getSI();
}
/** {@inheritDoc} */
@Override
public final void addTrigger(final Lane lane, final SimEventInterface<SimTimeDoubleUnit> event)
{ |
File |
Line |
org\opentrafficsim\road\gtu\lane\perception\categories\neighbors\AccPerception.java |
124 |
org\opentrafficsim\road\gtu\lane\perception\categories\neighbors\CaccPerception.java |
125 |
DownstreamNeighboursIterableACC(final LaneBasedGTU perceivingGtu, final LaneRecord<?> root,
final Length initialPosition, final Length maxDistance, final RelativePosition relativePosition,
final HeadwayGtuType headwayGtuType, final RelativeLane lane, final boolean ignoreIfUpstream)
{
super(perceivingGtu, root, initialPosition, maxDistance, relativePosition, headwayGtuType, lane, ignoreIfUpstream);
}
/** {@inheritDoc} */
@Override
protected Entry getNext(final LaneRecord<?> record, final Length position, final Integer counter) throws GTUException
{
Entry next;
do
{
next = super.getNext(record, position, counter);
}
// skip leaders that are not the direct leader and that are not CACC
while (next != null && first() != null); |
File |
Line |
org\opentrafficsim\road\gtu\generator\AbstractGTUGeneratorOld.java |
345 |
org\opentrafficsim\road\gtu\generator\AbstractGTUGeneratorOld.java |
405 |
double distanceM = cumDistanceSI + otherGTU.position(theLane, otherGTU.getRear(), when).getSI() - lanePositionSI;
if (distanceM > 0 && distanceM <= maxDistanceSI)
{
return new HeadwayGTUSimple(otherGTU.getId(), otherGTU.getGTUType(), new Length(distanceM, LengthUnit.SI),
otherGTU.getLength(), otherGTU.getWidth(), otherGTU.getSpeed(), otherGTU.getAcceleration(), null);
}
return new HeadwayDistance(Double.MAX_VALUE);
}
// Continue search on successor lanes.
if (cumDistanceSI + theLane.getLength().getSI() - lanePositionSI < maxDistanceSI)
{
// is there a successor link?
if (theLane.nextLanes(this.gtuType).size() > 0) |
File |
Line |
org\opentrafficsim\road\gtu\lane\control\LinearCACC.java |
34 |
org\opentrafficsim\road\gtu\lane\control\PloegCACC.java |
32 |
public LinearCACC(final DelayedActuation delayedActuation)
{
super(delayedActuation);
}
/** {@inheritDoc} */
@Override
public Acceleration getFollowingAcceleration(final LaneBasedGTU gtu,
final PerceptionCollectable<HeadwayGTU, LaneBasedGTU> leaders, final Parameters settings) throws ParameterException
{
HeadwayGTU leader = leaders.first();
if (leader.getAcceleration() == null)
{
// ACC mode
return super.getFollowingAcceleration(gtu, leaders, settings);
}
double es =
leader.getDistance().si - gtu.getSpeed().si * settings.getParameter(TDCACC).si - settings.getParameter(X0).si;
double ev = leader.getSpeed().si - gtu.getSpeed().si; |