Files
moos-ivp-pi/src/pTaskManger/TaskManger.h
2023-11-20 09:58:12 +08:00

152 lines
4.5 KiB
C++

/*
* @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 <queue>
#include <list>
#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<string> &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<string> nodeList);
string getNodeName(const string node);
string getNode(list<string> &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<string> 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<string> taskList;
int taskCount;
string taskName;
//发送节点信息
Json::Value node_rpt;
};
#endif