示例#1
0
    float GetFollowerIDMAcc(IDMInfo myIDMInfo, DriverBehavior followingDriver)
    {
        if (myIDMInfo.followingS <= 0)
        {
            return(-Algebra.Infinity);
        }

        float desiredDist = followingDriver.s0 +
                            Mathf.Max(0f, myIDMInfo.followingV * followingDriver.T + myIDMInfo.followingV * myIDMInfo.followingDeltaV / (2 * Mathf.Sqrt(followingDriver.a * followingDriver.b)));

        return(followingDriver.a * (1f - Mathf.Pow(myIDMInfo.followingV / followingDriver.v0, followingDriver.delta) - Mathf.Pow(desiredDist / myIDMInfo.followingS, 2)));
    }
示例#2
0
    float GetFollowerIDMAccWithoutMe(IDMInfo myIDMInfo, DriverBehavior followingDriver)
    {
        IDMInfo partialInfoForFollower = new IDMInfo
        {
            laneNo   = myIDMInfo.laneNo,
            leadingS = myIDMInfo.followingS + myIDMInfo.leadingS,
            leadingV = myIDMInfo.leadingV,
            myV      = myIDMInfo.followingV
        };

        return(GetIDMAcc(partialInfoForFollower, followingDriver));
    }
示例#3
0
    float GetIDMAcc(IDMInfo iDMInfo, DriverBehavior driver)
    {
        if (iDMInfo.leadingS <= 0)
        {
            //if would collide
            return(-Algebra.Infinity);
        }

        float desiredDist = driver.s0 +
                            Mathf.Max(0f, iDMInfo.myV * driver.T + iDMInfo.myV * iDMInfo.deltaV / (2 * Mathf.Sqrt(driver.a * driver.b)));

        return(driver.a * (1f - Mathf.Pow(iDMInfo.myV / driver.v0, driver.delta) - Mathf.Pow(desiredDist / iDMInfo.leadingS, 2)));
    }
示例#4
0
    void InitDictionary()
    {
        driverActivities = new Dictionary <string, DriverActivity>();
        driverBehaviors.ForEach(d =>
        {
            string className        = d.GetType().Name;
            DriverActivity activity = new DriverActivity();
            activity.behaviorName   = d.behaviorName;

            driverActivities.Add(className, activity);

            d.maxValueChanged.AddListener(args =>
            {
                DriverBehavior driverBehavior = (DriverBehavior)args.sender;
                activity.maxValue             = driverBehavior.maxValue;
            });

            d.minValueChanged.AddListener(args =>
            {
                DriverBehavior driverBehavior = (DriverBehavior)args.sender;
                activity.minValue             = driverBehavior.minValue;
            });

            d.avgValueChanged.AddListener(args =>
            {
                DriverBehavior driverBehavior = (DriverBehavior)args.sender;
                activity.avgValue             = driverBehavior.avg;
            });

            d.ErrorOccurred.AddListener(args =>
            {
                DriverBehavior driverBehavior = (DriverBehavior)args.sender;

                activity.missteps.Add(new DriverMisstep(driverBehavior.CurrentValue, driverBehavior.diffValue, new Vector3(0, 0, 0), Quaternion.identity));

                activity.errorsCount = driverBehavior.errorsCount;
            });
        });
    }