moos-ivp 程序框架

  • 时间:
  • 来源:互联网
  • 文章标签:

1.生成代码框架

./moos-ivp/scripts/GenMOOSApp example   p "leone"

2.文件结构

文件结构如下:
在这里插入图片描述
主要的代码结构在Example.cpp中

OnNewMail类成员函数用来订阅消息


// Procedure: OnNewMail
 
bool Example::OnNewMail(MOOSMSG_LIST &NewMail)//消息订阅接口
{
  MOOSMSG_LIST::iterator p;
   
  for(p=NewMail.begin(); p!=NewMail.end(); p++) {
    CMOOSMsg &msg = *p;
 
#if 0 // Keep these around just for template
    string key   = msg.GetKey();//这个就是消息的topic名字
    string comm  = msg.GetCommunity();//没用到
    double dval  = msg.GetDouble();//获取double类型的message
    string sval  = msg.GetString();//获取string类型的message
    string msrc  = msg.GetSource();//这个是个数据流,一般用来传输大数据,比如图片
    double mtime = msg.GetTime();//获取时间戳
    bool   mdbl  = msg.IsDouble();//这个是判断类型用的,因为发布消息有不同类型
    bool   mstr  = msg.IsString();
#endif
   }
  
   return(true);
}              

Iterate函数相当于while语句,以固定频率运行

bool Example::Iterate()
{
  return(true);
}

OnStartUp函数用来初始化,程序输入参数配置

bool Example::OnStartUp()
{
  list<string> sParams;
  m_MissionReader.EnableVerbatimQuoting(false);
  if(m_MissionReader.GetConfiguration(GetAppName(), sParams)) {
    list<string>::iterator p;
    for(p=sParams.begin(); p!=sParams.end(); p++) {
      string line  = *p;
      string param = tolower(biteStringX(line, '='));
      string value = line;
      
      if(param == "foo") {
        //handled
      }
      else if(param == "bar") {
        //handled
      }
    }
  }
  
  RegisterVariables();  
  return(true);
}

RegisterVariables函数,如果需要订阅某个topic,需要注册一下。例如,订阅名为FOOBAR的topic,如下这样注册

void Example::RegisterVariables()
{
   Register("FOOBAR", 0);
}

本文链接http://www.taodudu.cc/news/show-82846.html