MOOS-ivp 实验十四(3)behavior的分层模式
该部分将会对behavior的分层模式进行一些研究,同时记录一下我的学习过程作为学习的输出部分,也作为以后的资料供自己进行回顾。
文章目录
前言
Hierarchical mode declarations (HMD)作为.bhv文件的分层模式声明,可以将使命组织成为一个任务集合,并按照某种逻辑来进行任务的执行工作。任务规划可以根据任务需求设置模式以及相关的子模式,在更复杂的任务规划中,其可以帮助程序员更好的对故障进行定位。在最开始的过程中,水下机器人主要是制定已知的任务,按照固定的任务规划去执行,主要是从一个任务转移到下一个任务,任务之间是按照单线性来进行的。但是通过分层模式的方式,可以使得任务从一个模式转向下一个模式,而且在不同环境或者情况下,可以随时进行模式的切换。这可以增强水下机器人对于不同情况的自主性以及多水下机器人协同时的交互性。
一、分层模式声明的语法-The Bravo Mission
1.分层模式声明的语法
这里将基于The Bravo Mission来进行分层模式的语法讨论,下图展现了The Bravo Mission基于分层模式的结构:
如上图所示,车辆将始终处于叶节点表示的模式之一。behavior可以与树中的任何节点相关联。如果一个behavior与一个内部节点相关联,它也与它的所有子节点相关联。下面就是bravo.bhv文件中关于MODE声明的部分。
//------------------------------------------------
// File: bravo.bhv
// Name: M. Benjamin
// Date: Jan 1, 2010
//------------------------------------------------
initialize DEPLOY = false
initialize RETURN = false
set MODE = ACTIVE {
DEPLOY = true
} INACTIVE
set MODE = SURVEYING {
MODE = ACTIVE
RETURN != true
} RETURNING
//----------------------------------------------
Behavior = BHV_Waypoint
{
name = waypt_survey
pwt = 100
condition = MODE == SURVEYING
endflag = RETURN = true
perpetual = true
lead = 8
lead_damper = 1
speed = 2.0 // meters per second
radius = 4.0
nm_radius = 10.0
points = 60,-40:60,-160:150,-160:180,-100:150,-40
repeat = 0
}
//----------------------------------------------
Behavior = BHV_Waypoint
{
name = waypt_return
pwt = 100
condition = MODE == RETURNING
perpetual = true
endflag = RETURN = false
endflag = DEPLOY = false
speed = 2.0
radius = 2.0
nm_radius = 8.0
point = 0,0
}
//* Constant Heading
Behavior=BHV_ConstantHeading
{
name = const_hdg
pwt = 100
perpetual = true
condition = MODE==TURNING
updates = TURN_HEADING
endflag = CONDITIONS_SET = false
endflag = TURN_FINISH = true
endflag = TURN = finish
endflag = TURNING = false
heading = 190
duration = no-time-limit
complete_thresh = 4
heading_mismatch_var = DBG_CH
}
如图所示,最开始MODE的值被设置为“”空字符,经过第一个块之后,MODE被设置为“active”或者“inactive”,在进行第二个块的评估时,会根据第一个块的结果,MODE=ACTIVE来进行判断,因此子类模块的声明需要在父类模块之后进行声明。模式被评估之后,在Phelm迭代的过程中,其就可以用作behavior的condition条件来进行处理。
在behavior中condition = MODE==RETURNING这种句子,==表示匹配字符的意思。其中"Returning" == “Active:Returning”,实际上Returning就是active中的一个子模式,但是不需要将其所属关系都写到condition中去。
2.更复杂的分层模式结构
如上图所示,给出了一个更为复杂的分层模式结构,其结构分为三层,可以作为condition实现的节点用绿色来进行标注加深。其中Echo也是深绿色,表明水下机器人可以位于该模式,当位于该模式时需要满足以下三个条件:1."MISSION=SURVEYING"2."SITE!=Archipelagos"3."WATER DEPTH=Medium"在进行第三层模式声明时最好使用"MODE=Alpha:Echo"的格式而不要简写。
再开始运行之后可以使用uHelmScope来对变量进行查看:
uHelmScope -r bravo.moos
3.behavior运行条件
在每一次phelm循环Iterate()执行的过程中,都会对behavior的运行条件进行检查,如果符合运行条件的behavior将会进入执行状态,给phelm输出其目标函数,来改变phelm的solver决策出的行为。
运行条件可以按照以下方式来进行参数设置:
condition = <logic-expression>
condition = (DEPLOY=true) and (STATION_KEEP != true)
condition = (MODE == LOITERING)
对于分层模式声明的使用可以简化condition表达式的书写:
condition = <mode-variable> = <mode-value>, or
condition = <mode-variable> == <mode-value>.
要注意双等于号的使用,需要在右侧是左侧子集的情况下进行使用:
二、分层模式声明的语法-The Bravo Mission
behavior在进入不同状态下回发布不同的flag,这里标注了不同flag之间的状态区别。
主要会发布以下五种flag:
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.读入数据
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。