MOOS-ivp 实验七 关于Helm Autonomy的介绍(1)

MOOS-ivp 实验七 关于Helm Autonomy的介绍(1)


看了看博客记录,从9月22日开始学习MOOS,随着时间推移今天已经10月27日了。不知不觉时间过了一个多月了,所进行的实验也来到了实验七。试验七的主要内容无疑也就是对Helm进行初步的学习,废话不多说,下面开始实验。


前言

今天的实验,将要创建一个自动驾驶的功能。通过编辑helm配置文件就可以实现。首先需要配置一个.moos文件,接下来需要对helm模块进行配置,需要配置一个.bhv文件。从之前下载过的alpha任务和MOOS-ivp tree开始进行构建。下面是需要构建的一些更复杂的应用程序:
(1)基础的helm结构
(2)高等级的helm状态——使用helm来驱动水下机器人
(3)执行alpha自动驾驶任务
(4)在alpha 任务执行过程中理解helm的作用
(5)使用pMarineViewer控制任务的进行
(6)修改alpha任务,使其接受返回点的指令
(7)建立单、双Loiter Bravo 任务
(8)建立周期性浮出水面的双Loiter Bravo 任务

一、Helm的简要介绍

1.Helm的基础结构

helm是一个MOOS的应用程序,具有很多MOOS应用程序的功能。其运行基础是 pHelmIvP。helm是一个基于行为的架构。其他应用会和Helm协同进行工作,比如传感器处理以及规划、通信等工作。

在这里插入图片描述
在下面的示意图中,所有的行为要么会产生一组发布到MOOSDB的变量,要么会产生一个目标函数,在每次循环迭代里,helm最小都会发布一组变量对,来代表自己当前的决策行为。典型的变量一般会有DESIRED_HEADING 和DESIRED_SPEED,当helm在水下机器人中执行时,也会发布DESIRED_DEPTH。
在这里插入图片描述
解释一下上图的行为标注:
(1)邮件从MOOSDB中读取信息,并被解析和存储在本地的缓存区中,以供行为来进行使用
(2)如果任务行文文件里有任何关于模式的声明,那么在这一步进行相关评估
(3)在循环迭代结束的时候,每一个ivp动作都会被查询其贡献,并且可能会产生一个函数或者变量列表,发布到MOOSDB中去
(4)目标函数可以被分解为一个动作,并产生一组变量对
(5)所有变量对都发布到MOOSDB中去,以供其他应用程序使用。
在每次迭代过程中,行为都可以从缓冲区内的邮件获取消息,就像其他的MOOS应用程序一样。行为(ivp behavior)采用并行手段,可以高效的执行。helm按照每个行为的贡献度来进行列表,但是因为这些行为都在相同的信息缓冲器上进行操作,而且每一个行为的输入跟其他行为的输出无法构成关联,所以他们的执行都是并行和独立的,并不相互干扰。在求解器(solver)中行为进行协调,最后会在 heading, speed 和 depth选择一个单一的变量。另外补充一点,可能一些行为会在下一轮循环中选择这一轮输出的变量作为输入,当然在给定的循环之中,他们的行为都是相互独立的。

2.掌舵(helm):高层次掌舵(high-level)

在使用helm的过程中,遇到的第一个问题就是怎么松开它(应该指的是自动驾驶吧)。最高等级的掌舵会有两个状态,行驶(DRIVE)和停止(PARK)
在这里插入图片描述
helm状态的值有两个,行驶状态或者停止状态。其设置取决于helm的初始化配置以及开始启动之后从MOOSDB中接收到的一些变量指示( MOOS_MANUAL_OVERRIDE)。通过观察GUI界面( pMarineViewer),helm的状态可以很容易的被表示出来。当然也可以通过观察变量 IVPHELM_STATE来确认舵的状态。
当水下机器人不动,不代表helm是停止不动的状态,类似于开车,汽车可能会因为种种原因停止不动(红绿灯、人行横道、看路标)关于水下机器人停止的问题,我们可以通过观察变量IVPHELM_ALLSTOP来去解决。

二、alpha任务的启动和修改

1.启动任务的基础操作

代码如下(示例):

首先把创建一个存放任务的文件夹,起名叫lab_7,然后将alpha文件复制过去。

$ mkdir moos-ivp-jsmith/missions/lab_07
$ cp -rp moos-ivp/ivp/missions/s1_alpha moos-ivp-jsmith/missions/lab_07/alpha

2.查看一下moos和helm文件的基本结构

进入alpha文件系统,可以看一下alpha的文件结构。alpha.moos文件主要是alpha的配置文件。打开之后可以着重看一下关于helm的配置块pHelmIvP

1 ProcessConfig = pHelmIvP
2 {
3  AppTick  = 4
4  CommsTick = 4
5
6  behaviors = alpha.bhv
7  domain  = course:0:359:360
8  domain  = speed:0:4:41
9 }

这里有一些重要的组成部分:
(1)第六行,配置行为指示文件alpha.bhv
(2)7/8行,domain表示决策域。后两者表示每次迭代过程中对于水下机器人的朝向和速度做出规划。可能的转向角度在0-360之间,每次迭代转向1.可能的速度在0-4m/s之间,每次迭代增加0.1m/s

3.执行任务中理解helm作用

有以下三个任务:
(1)任务执行中理解helm的相关状态含义
(2)理解helm状态和全停止状态的区别
(3)理解行为条件和enflag参数
MOOS任务执行中的状态可以通过修改MOOS变量来进行限制。在pMarineViewer配置中,也可以在界面的车辆图标旁看到,当启动alpha任务的时候,便可以在车辆图标旁看到,"(PARK)(Manual Override)",第一个指的是helm的状态,第二个指的是全停的状态。当点击deploy按钮时,水下机器人的状态由PARK转到DRIVE。此时检查一下IVPHELM_ALLSTOP变量状态,显示的是清除。
condition运行条件condition = <logic-expression>,我们想要一些命令参与到进程中去的时候,有时需要在一定条件下生效,这时就需要对运行进行条件设置:

condition = <logic-expression>
condition = (DEPLOY=true) and (STATION_KEEP != true)
condition = (MODE == LOITERING)

行为标志具体内容如下图所示:
在这里插入图片描述
此行为标志有四个标志变量,idleflag,runflag,activeflag和inactiveflag

endflag:当行为进入完整状态时,将发布一次endflag。行为文件中的endflag参数中给出了表示endflag的变量值对。可以为一个行为配置多个结束标志。
idleflag:当行为进入空闲状态时,helm将发布一个空闲标志。行为文件中的idleflag参数中给出了表示idleflag的变量值对。可以为一个行为配置多个空闲标志。
runflag:当行为从空闲状态进入运行状态时,helm将发布运行标志。一个runflag正好贴时idleflag不是。行为文件中的runflag参数中给出了表示运行标志的变量值对。可以为一个行为配置多个运行标志。
activeflag:当行为进入活动状态时,将由helm发布一个活动标志。行为文件中的activeflag参数中给出了表示activeflag的变量值对。可以为一个行为配置多个activeflag。
inactiveflag:当行为进入非活动状态时,helm将发布一个非活动标志。行为文件中的inactiveflag参数中给出了代表inactiveflag的变量值对。可以为一个行为配置多个不活动标志。

三、alpha返回任务

1.修改配置模块

以下内容主要引用自Moos-IvP 实验室7 Helm Autonomy 任务详解
这篇文章写得很好很详细,我加一些细节。

这个任务包括修改alpha示例任务,实现通过在pMarineViewer左键点击界面以确定vehicle的返回路径点。主要目标为

修改alpha.moos和alpha.bhv这两个文件,从而实现接受用户在pMarineViewer中左键点击所确定的返回位置。该修改应能使用户点击时,立即发送一个标识为“return_point”的点发布至pMarineViewer窗口,vehicle完成其路线点调查后,将返回该点。
提示:您需要使用为所有行为定义的updates参数。return home waypoint行为已经配置了一个updates参数,将MOOS变量命名为RETURN_UPDATE。您的鼠标点击需要将结果发布到此变量。此发布的内容应该是一个字符串,其中该字符串是替换行为配置块中的任何配置行。

更多updates参数可以在这里找到Properties of Helm Behaviors
在这里插入图片描述
添加以下内容:

left_context[return-point] = RETURN_UPDATE = points=$(XPOS),$(YPOS)

该代码将鼠标所点击的坐标位置字符串信息points=(x坐标,y坐标)发布到RETURN_UPDATE变量中。
在这里插入图片描述

MOOSDB自定义左右键的Poking操作基本格式为

left_context[<key>]  = <var-data-pair>
right_context[<key>] = <var-data-pair>

$(XPOS)和 $(YPOS)为本地坐标系的x,y坐标
$(LAT)和 $(LON)为经纬度
$(IX)为poke次数
接下来配置.bhv文件
在这里插入图片描述
增加内容

updates    = RETURN_UPDATE

由于其updates参数所设定的变量名称RETURN_UPDATE与左键点击所发布的变量名称相同,从而更新该行为的points参数为左键点击坐标点坐标。
在这里插入图片描述
通过修改alpha.moos文件中MOOSTimeWarp语句数值大小,来修改程序运行速度。

2.运行效果

在这里插入图片描述

四、alpha立即返回任务

该任务需要在DEPLOY过程中,左键进行点击,能够立刻返回至所点击的点。

该任务仅需要在alpha.moos文件ProcessConfig = pMarineViewer配置块中添加

left_context[return-point] = RETURN=true

更新RETURN变量,即可实现立即返回任务。

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值