MOOS-ivp之第一个MOOSApp:向MOOSDB发布数据

前言

我来填坑了,网上关于moosivp的教程实在太少了,感觉这个非常冷门,而官方的教程有部分内容说的不是很清楚,部分命令和新版的有点对不上。不出意外的话这个系列我应该会一直写完吧,同时能力有限,有什么不对的地方,欢迎指正。
转载请注明出处!!!!

环境介绍

官方教程链接 建议去看看
vm虚拟机 ubuntu 18.04
MOOS-ivp 19.8.1

MOOS-ivp的安装可以参考我上一篇博文

MOOS-ivp架构

MOOS-ivp整体架构

在这里插入图片描述
MOOS-ivp的架构是由最基础的MOOSApp+MOOSDB+ivp-Helm构成。
MOOSApp可以接收外部传感器数据,实现用户业务,以及更新ivp行为参数 (有关行为的部分后续再说)
MOOSDB消息传递服务器,负责消息的统一分发。MOOSApp会发布数据到MOOSDB,其他MOOSApp可以订阅该数据。
ivp-Helm运行ivp行为,收集ivp行为输出的目标函数进行多目标优化。

MOOSApp结构

在这里插入图片描述
MOOSApp主要是这三个函数
OnStartUp() 用于初始化MOOSApp,自己代码中初始化的部分可以放这儿。
OnNewMail() 拆邮件,接收订阅的数据。
Iterate() 迭代,类似线程的RUN,或者说main中的while(1),每秒的运行次数根据app的moos配置。

脚本构建MOOSApp

下载MOOS-ivp拓展

官方提供了一个脚本,用于构建MOOSApp,运行这个脚本之后,会生成MOOSApp最基础的一些函数,根据自己的需要去编写。
首先下载moos-ivp-extend,需要确保下载的路径和安装moosivp路径相同。

svn co https://oceanai.mit.edu/svn/moos-ivp-extend/trunk moos-ivp-extend

然后进入到目录进行编译

 cd ~/moos-ivp-extend
 ./build.sh

添加到环境变量中

vi ~/.bashrc 

最后面添加

export PATH=$PATH:~/moos-ivp-extend/bin

生效环境变量

source ~/.bashrc

确保环境变量能找得到,如果没有任何输出,请检测环境变量

which pXRelayTest

构建MOOSApp

cd到src目录下

cd ~/moos-ivp-extend/src

使用脚本构建MOOSApp,MyTestApp是app的名字,后面引号中是作者名。官方教程的命令有一点问题,应该是这个。这个脚本在 ~/moos-ivp-extend/bin 的路径下。

 MyGenMOOSApp MyTestApp p "NXM"

生成moosapp文件夹内部
MyTestAppMain.cpp APP的入口函数,基本不用动。
pMyTestApp.moos APP的一些初始化参数。
在这里插入图片描述
src 目录下的CMakeLists.txt中添加构建的app,注意是src目录下。

#============================================================================
# List the subdirectories to build...
#============================================================================
ADD_SUBDIRECTORY(lib_behaviors-test)
ADD_SUBDIRECTORY(pExampleApp)
ADD_SUBDIRECTORY(pXRelayTest)
ADD_SUBDIRECTORY(pMyTestApp)              #   添加这一行

至此MOOSApp的构建完成。

向MOOSDB发布数据

向MOOSDB发布数据很简单,只需要使用 Notify 函数。
在上一步生成的MyTestApp.cpp中找到 Iterate 函数,添加

   Notify("My_TestVal",3.1415);//发布的消息名称和数据

然后cd到moos-ivp-extend目录进行编译

 cd ~/moos-ivp-extend
 ./build.sh

验证

向配置文件中添加自己构建的app

cd ~/moos-ivp-extend/missions/alder

找到alder.moos文件

//------------------------------------------
// 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 //添加
}

启动MOOS-ivp

 pAntler --MOOSTimeWarp=10 alder.moos

在这里插入图片描述
可以看到我们编写这个MOOSApp已经在运行了。

验证MOOSDB接收的数据

再打开一个终端,使用uXMS查看MOOSDB,uMS会更加直观,但这个版本的moosivp没有。

uXMS My_TestVal

输入之后会提示输入ip和端口,直接回车即可。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36523059/article/details/107443334
今日推荐