MOOS-ivp 实验三 MOOS简介(2)

MOOS-ivp 实验三 MOOS简介(2)

继上一篇文章继续对实验进行记录



四、Launching a Mission with pAntler

一组MOOS应用通常需要多个终端界面来进行打,这使得其操作变得很麻烦,而pAntler可以将这些内容通过一个mission文件进行表达,在这个文件中,一行代码声明的所有app都可以通过调用pAntler来启动。pAntler

1.Basic pAntler Usage

基本上所有的.moos文件的配置程序的第一部分都是pAntler。一般使用ProcessConfig = Anlter声明如下内容:

ProcessConfig = ANTLER
{
    
    
MSBetweenLaunches = 200
Run = MOOSDB  @ NewConsole = true/false
Run = AnotherApp  @ NewConsole = true/false
...
Run = AnotherApp  @ NewConsole = true/false
}

其中,MSBetweenLaunches = 200是设定启动进程之间的毫秒数,这里设置为200毫秒。其后每一行都指定了需要打开的应用以及是否为其打开控制台窗口。除了普通的启动配置之外,启动配置还包括了用别名给应用进行启动以及配置更详细的参数进行启动,具体内容可以参见网站的文档。

2.An Example: Launching the MOOSDB along with uXMS

这里做一个实验,我们使用pAntler来启动MOOSDB的同时启动uXMS。

1.首先先创建一个mission文件并且将其保存为db_and_uxms.moos。其内容为:

// (wget http://oceanai.mit.edu/2.680/examples/db_and_uxms.moos)
ServerHost = localhost
ServerPort = 9000
Community = alpha
ProcessConfig = ANTLER
{
    
    
MSBetweenLaunches = 200
Run = MOOSDB  @ NewConsole = false
Run = uXMS  @ NewConsole = true
}
ProcessConfig = uXMS
{
    
    
AppTick  = 4
CommsTick = 4
VAR  = DB_CLIENTS, DB_UPTIME, DB_TIME
DISPLAY_SOURCE = true
DISPLAY_TIME  = true
COLOR_MAP  = DB_CLIENTS, red
}

当然也可以通过更简单的方式获得输入以下命令,从官网中下载示例文件:

wget --no-check-certificate http://oceanai.mit.edu/2.680/examples/db_and_uxms.moos

接下来输入以下命令进行执行

pAntler db_and_uxms.moos

这位uXMS打开了一个新的命令控制窗口,并且通过初始配置打开了source和time,但是没有community
如下图所示:
在这里插入图片描述
3.uXMS的配置块内容可以通过在命令行输入:

uXMS --example

来进行查看,此时实验要求对启动文件进行修改,使其可以查看DB_UPTIME变量的历史消息记录,以及打开一个新的控制台窗口。修改启动文件如下:

ServerHost = localhost
ServerPort = 9000
Community  = alpha

ProcessConfig = ANTLER
{
    
    
  MSBetweenLaunches = 200

  Run = MOOSDB     @ NewConsole = false
  Run = uXMS       @ NewConsole = true
}

ProcessConfig = uXMS
{
    
    
  AppTick   = 4
  CommsTick = 4

  history_var    = DB_UPTIME
  DISPLAY_SOURCE = true
  DISPLAY_TIME   = true
  COLOR_MAP      = DB_UPTIME, red
  content_mode = history    // default (or history,procs)
}

添加进去了启动模式为history,修改了scope的变量,修改之后输出界面为:
在这里插入图片描述

五、Scripted Pokes to the MOOSDB

1.uTimerScript解读

因为此部分内容需要知道一些关于uTimerScript模块参数的配置,所以需要先对其进行格式上的学习,具体资料可以参考网站:

uTimerScript
uTimerScript模块可以让用户编写一些预先配置好的设置发布到MOOSDB中,以下是配置事件列表的具体格式

event = var=<MOOSVar>, val=<value>, [time=<time-of-event>]

关键词event、val、var、time都不区分大小写,但是<>中的内容需要注意大小写。

1.设置时间范围 time-of-evet
此时间设置必须是一个大于等于零的值,其代表含义是启动app或者从暂停状态再启动之后所经历的时间。在配置表中列举的配置内容不需要自己进行排列,uTimerScript会按照顺序执行。而我们在设置时间的时候可以把时间设置成如下形式,其中5:10的意思是在5s-10s的时间内概率平均的发生此事件。

event = var=COUNTER_A, val=10, time=5:10

2.重置脚本
一个脚本的重置,可以通过脚本之外的变量重置来实现,或者脚本内部来进行设置。 外部设置UTS_RESET为“reset 或者“ture”可以对脚本进行重置。如果要重置这个参数的名字,用另外的参数进行替代,可以用调用以下格式:

reset var = <moos-variable> // Default is UTS RESET

设置reset的时间参数,这个参数也可以设置为all-posted,表示所有时间发布结束后重置,当UTS_RESET发生设置的时候,不论reset的时间设置为多少都会立即重置:

reset time = <time-or-condition> // Default is "none"

以下参数用来配置可以重置的最大次数,一般默认是nolimit不对其进行限制:

reset max = <amount> // Default is "nolimit"

以下配置可以在重新启动时指定脚本重新计算相关的时间参数

shuffle = false // Default is "true"

如果要对脚本进行暂停可以使用以下命令,其参数是一个bool量,为真时暂停,为假时关闭暂停。而下面的命令是对外部应用发布控制暂停的变量进行命名,默认是UTS_PAUSE

paused = <Boolean>
pause var = <MOOSVar> // Default is UTS PAUSE

使用逻辑条件来对脚本进行暂停,下面是一个示例的用法

condition = <logic-expression>
condition  = NAV_DEPTH < 0.2

2.uTimerScript练习

1.练习要求:
(1)将代码进行改进,使得一开始是暂停状态,可以通过uPokeDB来进行启动
(2)同时打开两个uXMS界面进行变量观察,观察的变量分别命名为COUNTER_A和COUNTER_B,分别在两个uTimerScript模块中进行计数
(3)加入一个逻辑条件语句来控制变量的计数,使得COUNTER_A>5的时候COUNTER_B开始进行计数。
(4)添加pLogger模块使得可以观察脚本运行的系统日志

2.通过上面的解释我们可以通过设置

paused=ture

来使得脚本一开始处于暂停状态,启动脚本可以输入如下命令进行启动:

uPokeDB UTS_PAUSE=false  utscript.moos

3.建立两个uTimerScript模块需要分别起不同的名字,可以看到在是否启动控制台选项之后就可以对模块单独进行起名。

ProcessConfig = ANTLER
{
    
    
  MSBetweenLaunches = 200

  Run = MOOSDB       @ NewConsole = false
  Run = uXMS         @ NewConsole = true ~uXMS_COUNTER_A
  Run = uXMS         @ NewConsole = true ~uXMS_COUNTER_B
  Run = uTimerScript @ NewConsole = false ~uTimerScript_COUNTER_A
  Run = uTimerScript @ NewConsole = false ~uTimerScript_COUNTER_B
  Run = pLogger      @ NewConsole = false
}

启动界面时可以看到出现两个控制台,分别观察两个不同变量
在这里插入图片描述

4.需要加入一个条件语句来,使得COUNTER_A>5的时候COUNTER_B开始进行计数。

condition = COUNTER A > 5

5.在脚本中,添加pLogger模块

ProcessConfig = pLogger
{
    
    
AsyncLog = true
WildCardLogging = true
WildCardOmitPattern = *_STATUS
}

运行结束之后可以找到脚本日志,可以通过下面的命令查看跟变量相关的具体内容

aloggrep COUNTER_A COUNTER_B  MOOSLog_29_9_2020_____15_37_36/MOOSLog_29_9_2020_____15_37_36.alog

可以看到脚本内容如下所示:
在这里插入图片描述
7.所有脚本代码:

ServerHost = localhost
ServerPort = 9000
Community  = alpha

ProcessConfig = ANTLER
{
    
    
  MSBetweenLaunches = 200

  Run = MOOSDB       @ NewConsole = false
  Run = uXMS         @ NewConsole = true ~uXMS_COUNTER_A
  Run = uXMS         @ NewConsole = true ~uXMS_COUNTER_B
  Run = uTimerScript @ NewConsole = false ~uTimerScript_COUNTER_A
  Run = uTimerScript @ NewConsole = false ~uTimerScript_COUNTER_B
  Run = pLogger      @ NewConsole = false
}

ProcessConfig = uXMS_COUNTER_A
{
    
    
  AppTick   = 4
  CommsTick = 4

  VAR            = COUNTER_A, DB_CLIENTS, DB_UPTIME
  COLOR_MAP      = COUNTER_A, red
  HISTORY_VAR    = COUNTER_A
}

ProcessConfig = uXMS_COUNTER_B
{
    
    
  AppTick   = 4
  CommsTick = 4

  VAR            = COUNTER_B, DB_CLIENTS, DB_UPTIME
  COLOR_MAP      = COUNTER_B, red
  HISTORY_VAR    = COUNTER_B
}

ProcessConfig = uTimerScript_COUNTER_A
{
    
    
  AppTick   = 4
  CommsTick = 4

  paused = true
  pause_var = UTS_PAUSE
  event  = var=COUNTER_A, val=1,  time=0.5
  event  = var=COUNTER_A, val=2,  time=1.0
  event  = var=COUNTER_A, val=3,  time=1.5
  event  = var=COUNTER_A, val=4,  time=2.0
  event  = var=COUNTER_A, val=5,  time=2.5
  event  = var=COUNTER_A, val=6,  time=3.0
  event  = var=COUNTER_A, val=7,  time=3.5
  event  = var=COUNTER_A, val=9,  time=4.5
  event  = var=COUNTER_A, val=10, time=5.0

  reset_max  = nolimit
  reset_time = all-posted
}

ProcessConfig = uTimerScript_COUNTER_B
{
    
    
  AppTick   = 4
  CommsTick = 4

  paused = true
  pause_var = UTS_PAUSE
  condition = COUNTER_A > 5
  event  = var=COUNTER_B, val=1,  time=0.5
  event  = var=COUNTER_B, val=2,  time=1.0
  event  = var=COUNTER_B, val=3,  time=1.5
  event  = var=COUNTER_B, val=4,  time=2.0
  event  = var=COUNTER_B, val=5,  time=2.5
  event  = var=COUNTER_B, val=6,  time=3.0
  event  = var=COUNTER_B, val=7,  time=3.5
  event  = var=COUNTER_B, val=8,  time=4.0
  event  = var=COUNTER_B, val=9,  time=4.5
  event  = var=COUNTER_B, val=10, time=5.0

  reset_max  = nolimit
  reset_time = all-posted
}
ProcessConfig = pLogger
{
    
    
AsyncLog = true
WildCardLogging = true
WildCardOmitPattern = *_STATUS
}

总结

我以为两个篇章能写完,结果内容有点多,我扩充到三篇来写吧。

猜你喜欢

转载自blog.csdn.net/weixin_44151170/article/details/108826763