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
}
總結
我以為兩個篇章能寫完,結果內容有點多,我擴充到三篇來寫吧。
相關文章
- Phab2Pro體驗&Tango技術簡介Go
- 原始碼分析三:OkHttp(2)—攔截器簡介原始碼HTTP
- Ubuntu桌面生存指南(2):Ubuntu桌面體驗簡介Ubuntu
- Ubuntu桌面生存指南 (2) --- Ubuntu桌面體驗簡介Ubuntu
- oracle驗證方式簡介Oracle
- http2 簡介HTTP
- 【MyBatis】2:MyBatis簡介MyBatis
- 2.Nacos簡介
- 表單驗證教程簡介
- 實驗三驗收3
- 實驗 2
- DBMS_OUTPUT包語法簡介及使用小實驗
- OPP實驗三
- OOP實驗三OOP
- POI-簡介(1/2)
- Spring(2)-AOP簡介Spring
- web workers簡介(三)建立subworkerWeb
- python技術簡介(三)Python
- 實驗三 類和物件 基礎程式設計2物件程式設計
- 實驗三 類和物件_基礎程式設計2物件程式設計
- Java 2實用教程(第三版)實驗指導與習題解答and實驗模版程式碼及答案 (三)Java
- Hibernate資料校驗簡介
- CRC校驗原理簡介及C程式碼實現說明C程式
- 實驗文件2
- MM2協議簡介協議
- Pylearn2的使用簡介
- TPC_C簡介 2 (轉)
- 實驗三--測試
- CPU簡介(2)內部結構簡析
- 第三方支付簡介
- css3 動畫(三)animation 簡介CSSS3動畫
- 來自 AI Secure 實驗室的 LLM 安全排行榜簡介AI
- 格式校驗利器:JSON Schema 簡介JSON
- H2 資料庫介紹(1)--簡介資料庫
- 實驗2:需求分析
- 實驗作業2
- 分散式鎖簡單入門以及三種實現方式介紹分散式
- RocketMQ 實戰(一) - 簡介MQ