Esempio n. 1
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="_koCV">Object of the <see cref="KO_CornverVariables"/> Class</param>
        /// <param name="_vCorner">Corner of the Vehicle which is being computed</param>
        /// <param name="_vehicle">The <see cref="Vehicle"/> item itself</param>
        public KO_Solver(ref KO_CornverVariables _koCV, ref KO_CentralVariables _koCentral, ref KO_SimulationParams _simpParams, VehicleCorner _vCorner, ref DesignForm _designForm, OptimizaionParameter _optParam)
        {
            KO_CV = _koCV;

            VCorner = _vCorner;

            KO_Central = _koCentral;

            SimParams = _simpParams;

            Design_Form = _designForm;

            optParam = _optParam;

            if (optParam == OptimizaionParameter.BumpSteer)
            {
                Initialize_Optimizer_BS();
            }
            else if (optParam == OptimizaionParameter.SpringMotionRatio)
            {
                Initialize_Optimizer_ActuationPoints_RockerPoints();
            }
            else if (optParam == OptimizaionParameter.ARBMotionRatio)
            {
            }
        }
        /// <summary>
        /// First OVerloaded Consturctor accepting <see cref="VehicleCorner"/>
        /// </summary>
        /// <param name="_vCorner"></param>
        public SetupChange_Outputs(VehicleCorner _vCorner)
        {
            Corner = _vCorner;

            Identifier = (int)Corner;

            ToeLinkInboard = new Point3D();

            SetBaseConvergence();
        }
        /// <summary>
        /// ---Used for Assymetric Suspensions---
        /// Method to Obtain the object of the <see cref="DesignForm"/> which is the Parent of this Form and Assign Parent Object of <see cref="actuationPointCompute'"/>
        /// </summary>
        /// <param name="_KOCentral"></param>
        /// <param name="_KO_CV"></param>
        /// <param name="_designForm"></param>
        public void Get_ParentObject_Data(ref KO_CentralVariables _KOCentral, ref KO_CornverVariables _KO_CV, DesignForm _designForm, VehicleCorner _vCorner, ref KO_SimulationParams _koSim)
        {
            KO_Central = _KOCentral;

            KO_CV_Main = _KO_CV;

            ParentObject = _designForm;

            VCorner_Main = _vCorner;

            Symmetry = false;

            KO_SimParams = _koSim;

            actuationPointCompute.Get_ParentObjectData(ref KO_CV_Main, ParentObject, VCorner_Main, DevelopmentStages.ActuationPoints);
        }
        /// <summary>
        /// ---Used for Assymetric Suspension---
        /// Method to obtain the <see cref="KO_CornverVariables"/> object corresponding to the corner which is calling the functions of this class and the <see cref="DesignForm"/> object which is the parent of this UserControl
        /// </summary>
        /// <param name="_koCV">Object of the <see cref="KO_CornverVariables"/></param>
        /// <param name="_designForm">Object of hte <see cref="DesignForm"/></param>
        public void Get_ParentObjectData(ref KO_CornverVariables _koCV, DesignForm _designForm, VehicleCorner _vCorner, DevelopmentStages _devStage)
        {
            VCorner_Main = _vCorner;

            KO_CV_Main = _koCV;
            KO_CV_Main.VCornerParams.Initialize_Points();

            Design_Form = _designForm;

            Set_SelectedIndices();

            CurrentDevStage = _devStage;

            UpdateListBox();

            SymmetricSuspension = false;
        }
        /// <summary>
        /// ---Used for Symmetry---
        /// Method to Obtain the object of the <see cref="DesignForm"/> which is the Parent of this Form and Assign Parent Object of <see cref="actuationPointCompute'"/>
        /// </summary>
        /// <param name="_KOCentral"></param>
        /// <param name="_KO_CV_Main"></param>
        /// <param name="_KO_CV_Counter"></param>
        /// <param name="_VCornerMain"></param>
        /// <param name="_VCornerCounter"></param>
        /// <param name="_designForm"></param>
        public void Get_ParentObject_Data(ref KO_CentralVariables _KOCentral, ref KO_CornverVariables _KO_CV_Main, ref KO_CornverVariables _KO_CV_Counter, VehicleCorner _VCornerMain, VehicleCorner _VCornerCounter, DesignForm _designForm, ref KO_SimulationParams _koSim)
        {
            KO_Central = _KOCentral;

            KO_CV_Main    = _KO_CV_Main;
            KO_CV_Counter = _KO_CV_Counter;

            ParentObject = _designForm;

            VCorner_Main    = _VCornerMain;
            VCorner_Counter = _VCornerCounter;

            Symmetry = true;

            KO_SimParams = _koSim;

            actuationPointCompute.Get_ParentObjectData(ref _KO_CV_Main, ref _KO_CV_Counter, ParentObject, VCorner_Main, _VCornerCounter, DevelopmentStages.ActuationPoints);
        }
        /// <summary>
        /// Constructor
        /// </summary>
        public KO_CornverVariables(VehicleCorner _vCorner)
        {
            VCorner = _vCorner;

            KO_MasterAdjs = new Dictionary <string, KO_AdjToolParams>();

            KO_ReqParams = new List <SuspensionParameters>();

            KO_ReqParams_Importance = new Dictionary <SuspensionParameters, double>();

            BumpSteerCurve = new CustomBumpSteerParams();

            CamberCurve = new CustomCamberCurve();

            Caster = new Angle();

            KPI = new Angle();

            VCornerParams = new VehicleCornerParams();

            Initialize_Default_MotionProfile();

            //ContactPatch = new Point3D();
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="_vCorner"></param>
        /// <param name="_vehicle"></param>
        /// <param name="_opIndex"></param>
        /// <returns></returns>
        public static Dictionary <string, object> AssignVehicleParams_PostKinematicsSolver(VehicleCorner _vCorner, Vehicle _vehicle, int _opIndex)
        {
            VehicleParams.Clear();


            if (_vCorner == VehicleCorner.FrontLeft)
            {
                VehicleParams.Add("SuspensionCoordinateMaster", _vehicle.oc_FL[_opIndex].scmOP);
                VehicleParams.Add("Tire", _vehicle.tire_FL);
                VehicleParams.Add("Spring", _vehicle.spring_FL);
                VehicleParams.Add("Damper", _vehicle.damper_FL);
                VehicleParams.Add("AntirollBar", _vehicle.arb_FL);
                VehicleParams.Add("ARB_Rate_Nmm", _vehicle.ARB_Rate_Nmm_FL);
                VehicleParams.Add("OutputClass", _vehicle.oc_FL);
                VehicleParams.Add("WheelAlignment", _vehicle.oc_FL[_opIndex].waOP);
                VehicleParams.Add("Identifier", 1);
            }
            else if (_vCorner == VehicleCorner.FrontRight)
            {
                VehicleParams.Add("SuspensionCoordinateMaster", _vehicle.oc_FR[_opIndex].scmOP);
                VehicleParams.Add("Tire", _vehicle.tire_FR);
                VehicleParams.Add("Spring", _vehicle.spring_FR);
                VehicleParams.Add("Damper", _vehicle.damper_FR);
                VehicleParams.Add("AntirollBar", _vehicle.arb_FR);
                VehicleParams.Add("ARB_Rate_Nmm", _vehicle.ARB_Rate_Nmm_FR);
                VehicleParams.Add("OutputClass", _vehicle.oc_FR);
                VehicleParams.Add("WheelAlignment", _vehicle.oc_FR[_opIndex].waOP);
                VehicleParams.Add("Identifier", 2);
            }
            else if (_vCorner == VehicleCorner.RearLeft)
            {
                VehicleParams.Add("SuspensionCoordinateMaster", _vehicle.oc_RL[_opIndex].scmOP);
                VehicleParams.Add("Tire", _vehicle.tire_RL);
                VehicleParams.Add("Spring", _vehicle.spring_RL);
                VehicleParams.Add("Damper", _vehicle.damper_RL);
                VehicleParams.Add("AntirollBar", _vehicle.arb_RL);
                VehicleParams.Add("ARB_Rate_Nmm", _vehicle.ARB_Rate_Nmm_RL);
                VehicleParams.Add("OutputClass", _vehicle.oc_RL);
                VehicleParams.Add("WheelAlignment", _vehicle.oc_RL[_opIndex].waOP);
                VehicleParams.Add("Identifier", 3);
            }
            else if (_vCorner == VehicleCorner.RearRight)
            {
                VehicleParams.Add("SuspensionCoordinateMaster", _vehicle.oc_RR[_opIndex].scmOP);
                VehicleParams.Add("Tire", _vehicle.tire_RR);
                VehicleParams.Add("Spring", _vehicle.spring_RR);
                VehicleParams.Add("Damper", _vehicle.damper_RR);
                VehicleParams.Add("AntirollBar", _vehicle.arb_RR);
                VehicleParams.Add("ARB_Rate_Nmm", _vehicle.ARB_Rate_Nmm_RR);
                VehicleParams.Add("OutputClass", _vehicle.oc_RR);
                VehicleParams.Add("WheelAlignment", _vehicle.oc_RR[_opIndex].waOP);
                VehicleParams.Add("Identifier", 4);
            }

            VehicleParams.Add("Chassis", _vehicle.chassis_vehicle);

            return(VehicleParams);
        }
        public static List <OutputClass> AssignVehicleParams_Custom_OC_BumpSteer(SuspensionCoordinatesMaster _scm, VehicleCorner _vCorner, Vehicle _vehicle, int noOfOCSteps)
        {
            List <OutputClass> oc = new List <OutputClass>();

            oc = _vehicle.Initialize_IndependantOutputClass(noOfOCSteps, (int)_vCorner, _scm);

            return(oc);
        }
 /// <summary>
 /// Method to invoke the Optimization Algorithm mwthods to compute the Actuation points of Damper and Pushrod on the Rocker
 /// </summary>
 /// <param name="_koCV">Object of the <see cref="KO_CornverVariables"/></param>
 /// <param name="_koCentral">Object of the <see cref="KO_CentralVariables"/></param>
 /// <param name="_koSimParams">Object of the <see cref="KO_SimulationParams"/></param>
 /// <param name="_vCorner">Corner of the Vehicle which is caling this method</param>
 /// <param name="_designForm">Object of the <see cref="DesignForm"/> which is the parent GUI form</param>
 public void Optimize_Actuation_RockerPoints(ref KO_CornverVariables _koCV, ref KO_CentralVariables _koCentral, ref KO_SimulationParams _koSimParams, VehicleCorner _vCorner, DesignForm _designForm)
 {
     KO_SOlver = new KO_Solver(ref _koCV, ref _koCentral, ref _koSimParams, _vCorner, ref _designForm, OptimizaionParameter.SpringMotionRatio);
 }
        /// <summary>
        /// This method computes the APPROXIMATE 2nd Point of a Link  given the length and the 1st point
        /// The final coordinate of the 2nd point is computed using the Plane Equations.
        /// Used for <see cref="CoordinateOptions.DamperBellCrank"/> and <see cref="CoordinateOptions.PushrodOutboard"/>
        /// </summary>
        /// <param name="_linkLength">Length of the Links whose 2nd point is being calculated. Pass negative value if <paramref name="_mainPoint"/> is the End Point and NOT Start Point</param>
        /// <param name="_mainPoint">Main or 1st Point of the Link </param>
        /// <param name="_correspondingPoint">Corresponding or 2nd Pointo on the Link</param>
        public Point3D Compute_ApproxCorrespondingPoint_FromLinkLength(double _linkLength, Point3D _mainPoint, VehicleCorner _vCorner)
        {
            Point3D _correspondingPoint = new Point3D();

            if (_vCorner == VehicleCorner.FrontLeft || _vCorner == VehicleCorner.RearLeft)
            {
                _correspondingPoint.X = _mainPoint.X - _linkLength;
            }
            else
            {
                _correspondingPoint.X = _mainPoint.X + _linkLength;
            }

            _correspondingPoint.Y = _mainPoint.Y;

            return(_correspondingPoint);
        }
        /// <summary>
        /// Method to Invoke the Optimization Algorithm to compute the Inboard Toe Link Point for Minimum Bump Steer or User Requested Bump Steer
        /// </summary>
        /// <param name="_koCV">Object of the <see cref="KO_CornverVariables"/></param>
        /// <param name="_koCentral">Object of the <see cref="KO_CentralVariables"/></param>
        /// <param name="_koSimParams">Object of the <see cref="KO_SimulationParams"/></param>
        /// <param name="_vCorner">Corner of the Vehicle which is caling this method</param>
        /// <param name="_designForm">Object of the <see cref="DesignForm"/> which is the parent GUI form</param>
        public void Optimize_InboardToeLink(ref KO_CornverVariables _koCV, ref KO_CentralVariables _koCentral, ref KO_SimulationParams _koSimParams, VehicleCorner _vCorner, DesignForm _designForm)
        {
            KO_SOlver = new KO_Solver(ref _koCV, ref _koCentral, ref _koSimParams, _vCorner, ref _designForm, OptimizaionParameter.BumpSteer);

            _koCV.VCornerParams.ToeLinkInboard = Round_Point(_koCV.VCornerParams.ToeLinkInboard, 3);
        }
        /// <summary>
        /// Method to Intialze the Corner Components of a given corner of a Vehicle
        /// </summary>
        /// <param name="_vehicle">The <see cref="Vehicle"/> class' object</param>
        /// <param name="_vCorner">Corner of the Vhicle</param>
        /// <param name="_numberOfIterations">Number of iterations that the Kinematic Solver (<see cref="DoubleWishboneKinematicsSolver"/></param> or <see cref="McPhersonKinematicsSolver"/> is going to
        /// run for
        /// <returns>Returns an object of the <see cref="VehicleCornerParams"/> Class</returns>
        public void Initialize_VehicleCornerParams(ref KO_CornverVariables _koCV, Vehicle _vehicle, VehicleCorner _vCorner, int _numberOfIterations)
        {
            Dictionary <string, object> tempVehicleParams = VehicleParamsAssigner.AssignVehicleParams_PreKinematicsSolver(_vCorner, _vehicle, _numberOfIterations);



            ///<summary>Passing the <see cref="Dictionary{TKey, TValue}"/> of Vehicle Params's objects into the right Parameter</summary>
            _koCV.VCornerParams.SCM = tempVehicleParams["SuspensionCoordinateMaster"] as SuspensionCoordinatesMaster;

            _koCV.VCornerParams.SCM_Clone = new SuspensionCoordinatesMaster();
            _koCV.VCornerParams.SCM_Clone.Clone(VCornerParams.SCM);

            _koCV.VCornerParams.Tire = tempVehicleParams["Tire"] as Tire;

            _koCV.VCornerParams.Spring = tempVehicleParams["Spring"] as Spring;

            _koCV.VCornerParams.Damper = tempVehicleParams["Damper"] as Damper;

            _koCV.VCornerParams.ARB         = tempVehicleParams["AntirollBar"] as AntiRollBar;
            _koCV.VCornerParams.ARBRate_Nmm = (double)tempVehicleParams["ARB_Rate_Nmm"];

            _koCV.VCornerParams.WA = tempVehicleParams["WheelAlignment"] as WheelAlignment;

            ///<remarks>Chassis is not a part of the <see cref="VehicleCornerParams"/> and hence it is taken care of outside of this method just like the <see cref="Vehicle"/></remarks>

            _koCV.VCornerParams.OC = tempVehicleParams["OutputClass"] as List <OutputClass>;

            _koCV.VCornerParams.OC_BumpSteer = VehicleParamsAssigner.AssignVehicleParams_Custom_OC_BumpSteer(VCornerParams.SCM, _vCorner, _vehicle, /*Setup_CV.BS_Params.WheelDeflections.Count*/ _numberOfIterations);

            _koCV.VCornerParams.Identifier = (int)tempVehicleParams["Identifier"];

            //VCornerParams.Initialize_Points();

            //return VCornerParams;
        }