/* * @Author: 1553836110 1553836110@qq.com * @Date: 2023-09-28 15:45:17 * @LastEditors: zjk 1553836110@qq.com * @LastEditTime: 2023-11-15 09:31:32 * @FilePath: /moos-ivp-pi/src/pTaskManger/TaskManger.h * @Description: * * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. */ /************************************************************/ /* NAME: zjk */ /* ORGN: MIT */ /* FILE: TaskManger.h */ /* DATE: */ /************************************************************/ #ifndef TaskManger_HEADER #define TaskManger_HEADER #include "MOOS/libMOOS/MOOSLib.h" #include "MOOS/libMOOS/Thirdparty/AppCasting/AppCastingMOOSApp.h" #include #include #include "json/json.h" #include "VarDataPair.h" using namespace std; enum TaskType{WAYPOINTS, CONSTDEPTH, CONSTSPEED, CONSTHEADING, WAYPOLYGON, NOTYPE}; enum Status{FAULT=0, UNRUN=1, MANUAL=2 ,RUN=3, CONFIG=5}; // class TaskManger : public CMOOSApp class TaskManger : public AppCastingMOOSApp { public: TaskManger(); virtual ~TaskManger(); bool OnNewMail(MOOSMSG_LIST &NewMail); bool Iterate(); bool OnConnectToServer(); bool OnStartUp(); void RegisterVariables(); bool buildReport(); void postFaultNumber(int n); bool setSpeed(double speed); bool setMaxDepth(string depth); bool setWpt(std::string wpt, string speed, string depth); bool setWayPol(string polygon, string speed, string depth); bool setTaskTimer(string timerCount); bool setSafetyRules(string maxTime, string maxDepth, string minAltitude, string polygon); bool setWayConfig(string lead, string lead_damper, string capture_line, string capture_radius,string slip_radius); bool sendNode(const string current_node, list &nodeList); bool getWord(const string str, int ct, string &word); string getSpeed(const string node); string getDepth(const string node); string getWayPoint(const string node); string getWayPolygon(const list nodeList); string getNodeName(const string node); string getNode(list &nodelist); string getTimeCount(); string getMaxDepth(); TaskType getTaskTpye(const string node); int readTaskFile(string taskName); int readSafetyRules(string fileName); int readWayConfig(string fileName); void postReportToSSM(); inline void clearHelmFlag(){Notify("HELM_MAP_CLEAR",0.0);} inline void taskStart(); inline void taskFinish(); void FaultFlagClear(); inline void InitConfig(); //内部消息发布 const string UPDATE_WPT = "WPT_UPDATE"; const string UPDATE_SPD = "SPEED_UPDATE"; const string UPDATE_DEP = "DEPTH_UPDATE"; const string UPDATE_TIMER = "TIMER_UPDATES"; const string UPDATE_MAXDEP = "MAXDEEP_UPDATES"; const string UPDATE_OPREGION = "OPREGION_UPDATES"; const string UPDATE_RESETFAULT = "OPREGION_RESET"; //内部消息订阅 const string MSG_WPTFLAG = "CurrentPointComplete"; const string MSG_ENDFLAG = "END_WayPoint"; const string MSG_START = "START"; const string MSG_SENDSAFTRULES = "SendSaftRules"; const string MSG_FALUT = "TaskFault"; const string MSG_RUN = "RUN"; const string MSG_CLEARFAULT = "ClearFalut"; //交互消息 const string MSG_IN_SSM = "uMission_action_cmd"; const string MSG_TO_SSM = "uMission_task_fb"; const string MSG_TO_FH = "uMission_fault_fb"; const string MSG_IN_MAN = "uManual_enable_cmd"; //TODO: 增加手操状态 const string MSG_FAULT_LEV2 = "uFH_errorMsg2_fb"; const string MSG_FALUT_LEV3 = "uFH_errorMsg3_fb"; protected: // 任务参数 string node_wpt; string node_depth; string node_speed; // 安全规则 string maxDepth; string maxTime; string safePolygon; string minAltitude="0"; // 路径参数 string lead; string lead_damper; string lead_to_start; string capture_line; string capture_radius; string slip_radius; string efficiency_measure; string faultMsg; TaskType nodeType; list nodeList; private: bool current_node_complete = false; bool current_pol_complete = false; bool start=false; bool time_out=false; int st=10; int faultNumber = 0; int readTask = 0; string msg; string current_node; Status state = UNRUN; Json::Value RepList; Json::StreamWriterBuilder RepJsBuilder; //任务文件参数 //TODO:动态配置任务文件等参数 string planConfigPath; vector taskList; int taskCount; string taskName; //发送节点信息 Json::Value node_rpt; }; #endif