#ifndef PARAMETER_STATUS_H
#define PARAMETER_STATUS_H




#include <boost.h>
#include <cstdint>
#include <boost/serialization/singleton.hpp>
#include <common/vv7.h>

namespace iv {
    namespace decition {
        class ParameterStatus : public boost::noncopyable
        {
        public:
            /*****************
             * **** speed control *****
             * ***************/




                    float speed_kp=0.5;
                    float speed_kd=0.3;
                    float speed_ki=0;

                    float speed_kp_t=10;
                    float speed_kd_t=0;
                    float speed_ki_t=0;

                    float speed_increase_limite_switch=1;
                    float speed_decline_limite_switch=1;
                    float speed_max_increase=5;
                    float speed_max_decline=10;




            /*****************
             * **** ttc control *****
             * ***************/

                float ttc_emc=0.8;
                float ttc_urgent=1.6;
                float ttc_early=10;
                float brakeIntMax_emc=10;
                float brakeIntMax_urgent=5;
                float brakeIntMax_early=3;


            /*****************
             * **** wheel control *****
             * ***************/

                float wheel_p_eang=14;
                float wheel_p_epos=10;
                float wheel_d_eang=5;
                float wheel_d_epos=5;
                float wheel_i_eang=0;
                float wheel_i_epos=0;

                float  wheel_previewDistance_coefficient=0.6;
                float  wheel_previewDistance_min=5;
                float  wheel_change_limit_switch=0;
                float  wheel_max_change=10;

            /*****************
             * **** path planning *****
             * ***************/
                float road_width = 3.5; //道路宽度
                int now_road_num = 0;  //车辆当前所在道路编号


            /*****************
             * **** frenet path planning *****
             * ***************/
                double MAX_SPEED = 50.0 / 3.6;     // 最大速度 [m/s]
                double MAX_ACCEL = 10;            // 最大加速度[m/ss]
                double MAX_CURVATURE = 10;        // 最大曲率 [1/m]
                double MIN_ROAD_OFFSET = -3.5;     // 最小道路偏移度 [m]。可以为负数。
                double MAX_ROAD_WIDTH = 3.5;       // 最大道路宽度 [m]。过小可能不具有避障功能。
                double D_ROAD_W = 3.5;             // 道路宽度采样间隔 [m]
                double DT = 0.2;                   // Delta T [s]。总的预测时间的增量。
                double MAXT = 4.0;                 // 最大预测时间 [s]
                double MINT = 2.0;                 // 最小预测时间 [s]
                double D_POINT_T = 0.04;           // 时间增量 [s]。用于控制每条轨迹生成轨迹点的密度。
                double TARGET_SPEED = 30.0 / 3.6;  // 目标速度(即纵向的速度保持) [m/s]
                double D_T_S = 5.0 / 3.6;          // 目标速度采样间隔 [m/s]
                double N_S_SAMPLE = 1;             // sampling number of target speed
                double ROBOT_RADIUS = 2.0;         // robot radius [m]

                // 损失函数权重
                double KJ = 0.1;
                double KT = 0.1;
                double KD = 1.0;
                double KLAT = 1.0;
                double KLON = 1.0;


    };
        typedef boost::serialization::singleton<iv::decition::ParameterStatus> ParameterStatusSingleton;
}
#define ServiceParameterStatus iv::decition::ParameterStatusSingleton::get_mutable_instance()

}


#endif // PARAMETER_STATUS_H