前言
MOOS是一套自主的发布-订阅的中间件,消息由各个app自主订阅,MOOSDB统一分发。明白了消息的发布和订阅,MOOSApp就没其他多少内容了,至于要发布的消息和订阅消息之后要做的事情就根据项目需求实现。
转载请注明出处!!!!
原文链接
环境介绍
官方教程链接 建议去看看
vm虚拟机 ubuntu 18.04
MOOS-ivp 19.8.1
MOOS-ivp的安装可以参考我之前的博文
构建MOOSApp
cd ~/moos-ivp-extend/src
MyGenMOOSApp MySubscription p "NXM"
在 src 目录下的CMakeLists.txt中添加构建的app。
#============================================================================
# List the subdirectories to build...
#============================================================================
ADD_SUBDIRECTORY(lib_behaviors-test)
ADD_SUBDIRECTORY(pExampleApp)
ADD_SUBDIRECTORY(pXRelayTest)
ADD_SUBDIRECTORY(pMyTestApp)
ADD_SUBDIRECTORY(pMySubscription) # 添加这一行
在MySubscription.cpp中找到RegisterVariables函数
Register("My_TestVal", 0);//订阅的消息名称,0代表发生变化立刻接受
//这里订阅上一篇博客创建的app发布的消息
继续找到OnNewMail函数,在for循环中添加对邮件的解析
string key = msg.GetKey();
if(key == "My_TestVal")
{
//再此添加对订阅消息的处理,消息只有double和string两种数据类型
//如何处理看具体需求
double temp = msg.m_dfVal;//保存
Notify("Accept",temp);//再发布出去,便于验证
}
然后编译
cd ~/moos-ivp-extend
./build.sh
配置文件添加创建的app
cd ~/moos-ivp-extend/missions/alder
//------------------------------------------
// Antler configuration block
ProcessConfig = ANTLER
{
MSBetweenLaunches = 200
Run = MOOSDB @ NewConsole = false
Run = uSimMarine @ NewConsole = false
Run = pNodeReporter @ NewConsole = false
Run = pMarinePID @ NewConsole = false
Run = pMarineViewer @ NewConsole = false
Run = uProcessWatch @ NewConsole = false
Run = pHelmIvP @ NewConsole = false
Run = pOdometry @ NewConsole = false
Run = pMyTestApp @ NewConsole = false
Run = pMySubscription@ NewConsole = false //添加
}
验证
cd ~/moos-ivp-extend/missions/alder
运行
pAntler alder.moos
再开一个终端,我没实际运行,具体怎么样我就不截图了,参照上一篇博客
uXMS Accept