MOOS-ivp 实验八 多水下机器人作业(1)pShare初步讲解

MOOS-ivp 实验八 多水下机器人作业(1)pShare初步讲解

不知不觉,实验已经来到了第八个,也进入到了有一定难度的各种模块的学习。接下来主要讲解的就是多机器人作业的相关内容。



前言

在今天的实验中,我们将我们的关注点放在水下机器人的多机器人作业的配置中去,我们的第一个关注点就是两个独立运行的MOOSDB进程之间如何进行交流,其中每个MOOSDB都跟一个独立的水下机器人链接。最后,可能会顺便学习一下关于声学传感和铱星连接的相关内容。我们最初的主要目的还是放在网络连接上,虽然有很多节点运行在我们的笔记本中。
我们需要对下面这些模式非常熟悉,这对我们以后的实验和水下机器人的操作至关重要。
(1)沿岸以及车辆的拓扑结构(Shoreside / Vehicle Topology)(这是啥?我也不懂。。。)
(2)通过xrelay任务来认识pShare
(3)使用Shoreside / Vehicle Topology来转换Alpha任务
(4)使用辆车辆任务的pShare来转换Alpha任务
(5)使用uField工具箱来简化pShare配置
提示:以下是本篇文章正文内容,下面案例可供参考

一、提前准备

1.The Shoreside (Topside) / Vehicle Topology

下图描述了本实验中使用的MOOS社区的布局。这个布局将在剩余的学习中被使用,包括在河面上的操作。
在这里插入图片描述
可以从图上看到,有一定数量的车辆被部署在外面,它们和岸基都有一定程度的链接,通过岸基的指挥以及电脑的控制。每一个节点(岸基和车辆)都有一个专门的MOOS社区来组成。其沟通的模式和方式会有所不同。

二、任务1-用pShare来配置pXReady

今天试验的第一步就是熟悉pShare,在最初的几个任务里我们会在.moos文件中对pShare进行配置。后面的几个实验里,我们会使用uField工具箱来自动对share进行配置。

1.任务目标

在这个部分我们的任务是:
(1)复制一个xready文件
(2)创建两个.moos文件启动两个MOOSDB进程
(3)启动两个社区并且确保两个社区之间使用pshare进行共享

2.复制pxready任务

代码如下(示例):

cp -rp moos-ivp/ivp/missions/xrelay moos-ivp-janedoe/missions/lab_08/xrelay_pshare

或者直接从moos-ivp文件中找到相关目录进行复制。
最开始的文件夹中只有一个.moos文件,文件里配置了两个pxready应用程序,分别是苹果和梨。
在这里插入图片描述
打开.moos文件看一下,就知道。
在这里插入图片描述
我们需要把这个转换成为两个任务文件,每个都能发布一个MOOSDB,每个社区都有自己的名字,大概情况如下图所示:
在这里插入图片描述
新的xrelay任务包含两个MOOSDBs,每个都有自己的pXRelay应用程序。pXRelay应用程序不需要唯一命名,但是MOOS社区是唯一命名的。

2.将xrelay任务分成两个独立的MOOS社区

最初配置的xrelay任务推出了三个重要的应用程序。MOOSDB和两个pXRelay应用程序。在本实验中,您将创建两个。moos文件,每个文件都启动了一个MOOSDB和一个pXRelay应用程序。您还需要在每个社区推出pShare应用程序。
只需在命令行上键入“pShare - help”,就可以找到一些关于pShare的快速文档。或者可以在这里找到更完整的文档:
pshare
pShare配置块类似于:
代码如下(示例):

ServerHost = localhost
ServerPort = 9000
Community = apples
ProcessConfig = pShare
{
AppTick  = 4
CommsTick = 4
input = route = localhost:9200
output = src_name=APPLES, route=localhost:9201
}

请注意,pShare监听的端口与MOOSDB服务的端口不同。(就是ServerPort和localhost不能相同)请记住,相同的共享配置对双方都无效。它们必须在共享的变量名、共享输入路由、目的主机IP和端口号方面相互补充。(两个.moos文件中的pshare端口号应该相互补充的状态,但是两个文件的ServerPort应该保持一致,确保在一个服务器中)

在这里插入图片描述
新的xrelay任务需要将pShare配置为以互补的配置共享APPLES和PEARS消息。

3.启动两个社区,并确认共享有效

使用两个单独的终端窗口,启动两个MOOS社区,并确认修改后的xrelay任务像以前一样工作。我们仍然需要发布一个信息到其中一个社区,来让任务进行下去。
需要注意的三个点:
(1)确保每一端共享输入路由中指定的端口与另一端的目的端口匹配,反之亦然
(2)请确保使用的端口号与MOOSDB端口号不同。
(3)试试用uPokeDB随便发布信息一下,测试一下pshare是否好用。我们先发布一个APPLES=99 试试效果
下面是我写的两个.moos文件的相关配置,分别命名为xready1和xready2
在这里插入图片描述
xready1


ServerHost = localhost
ServerPort = 9000
Community = apples

//------------------------------------------
// Antler configuration  block
ProcessConfig = ANTLER
{
  MSBetweenLaunches = 200

  Run = MOOSDB	 @ NewConsole = false
  Run = pLogger	 @ NewConsole = false
  Run = pXRelay	 @ NewConsole = true ~ pXRelay_APPLES
  Run = pShare	 @ NewConsole = false
  Run = uXMS	 @ NewConsole = true
}
//------------------------------------------
ProcessConfig = pShare
{
AppTick  = 4
CommsTick = 4
input = route = localhost:9200
output = src_name=APPLES, route=localhost:9201
}
//------------------------------------------
// pLogger config block

ProcessConfig = pLogger
{
  AsyncLog = true
  WildCardLogging = true
}

//------------------------------------------
// pXRelay_APPLES config block

ProcessConfig = pXRelay_APPLES
{
  AppTick	= 1
  CommsTick	= 1

  INCOMING_VAR  = APPLES
  OUTGOING_VAR  = PEARS
}


//------------------------------------------
// uXMS config block

ProcessConfig = uXMS
{
  AppTick    = 4
  CommsTick  = 4

  PAUSED            = false
  DISPLAY_SOURCE    = true
  DISPLAY_TIME      = true
  DISPLAY_COMMUNITY = true

  VAR  = APPLES
  VAR  = PEARS
  VAR  = APPLES_ITER_HZ
  VAR  = PEARS_ITER_HZ
  VAR  = APPLES_POST_HZ
  VAR  = PEARS_POST_HZ
}



xready2


ServerHost = localhost
ServerPort = 9001
Community = pears

//------------------------------------------
// Antler configuration  block
ProcessConfig = ANTLER
{
  MSBetweenLaunches = 200

  Run = MOOSDB	 @ NewConsole = false
  Run = pLogger	 @ NewConsole = false
  Run = pXRelay	 @ NewConsole = true ~ pXRelay_PEARS
  Run = pShare	 @ NewConsole = false
  Run = uXMS	 @ NewConsole = true
}
//------------------------------------------
ProcessConfig = pShare
{
AppTick  = 4
CommsTick = 4
input = route = localhost:9201
output = src_name=PEARS, route=localhost:9200
}
//------------------------------------------
// pLogger config block

ProcessConfig = pLogger
{
  AsyncLog = true
  WildCardLogging = true
}

//------------------------------------------
// pXRelay_APPLES config block

ProcessConfig = pXRelay_PEARS
{
  AppTick	= 1
  CommsTick	= 1

  INCOMING_VAR  = APPLES
  OUTGOING_VAR  = PEARS
}


//------------------------------------------
// uXMS config block

ProcessConfig = uXMS
{
  AppTick    = 4
  CommsTick  = 4

  PAUSED            = false
  DISPLAY_SOURCE    = true
  DISPLAY_TIME      = true
  DISPLAY_COMMUNITY = true

  VAR  = APPLES
  VAR  = PEARS
  VAR  = APPLES_ITER_HZ
  VAR  = PEARS_ITER_HZ
  VAR  = APPLES_POST_HZ
  VAR  = PEARS_POST_HZ
}



分别启动并发布一条消息

uPokeDB APPLES=99 xrelay2.moos

可以看到结果
在这里插入图片描述
说明两个moos社区的消息已经共享了。


三、The Alpha pShare Mission

这一部分的任务是:
(1)准备一份阿尔法任务的副本进行实验。
(2)创建两个.moos文件来启动两个MOOSDB进程。
(3)使用pshare来用两个MOOS社区来实现alpha任务
(4)部署两个社区,确认分享成功

1.复制alpha任务

cp -rp moos-ivp/ivp/missions/s1_alpha moos-ivp-janedoe/missions/lab_08/alpha_pshare

在文件夹里我们需要创建两个分离的MOOS社区:岸基社区和 alpha水下航行器社区。在岸基社区里,我们需要有MOOSDB和pMarineViewer。在这两个社区里都需要添加pShare配置块,并且将pShare配置添加到Antler配置块中。
这里主要问题是怎么给给每个方向的共享配置变量。

2.把alpha任务拆分为两个独立的MOOS社区

这一步需要创建两个独立的MOOS社区shoreside.moos以及alpha.moos。shoreside.moos里需要包含 MOOSDB and pMarineViewer。alpha.moos里需要包含除了pMarineViewer以外的所有模块。如何进行配置呢?
这里给一个提示:从车辆到岸基需要共享一个NODE_REPORT变量,这个变量由配置块pNodeReporter发布,其中包含了许多关于车辆的信息,并且由pMarineViewer使用对车辆进行渲染。在车辆上生成叫NODE_REPORT_LOCAL到达岸基上称为NODE_ REPORT。大概配置格式如下:

output = src_name=NODE_REPORT_LOCAL, dest_name=NODE_REPORT, route=localhost:9200

我们还需要分享两个变量:VIEW SEGLIST and VIEW POINT来给pMarineViewer一个模拟的反馈量。

3.配置.moos文件

首先我们需要对shoreside.moos文件进行相应配置。需要将其中的pMarineViewer配置块单独拿出来,并且加上pshare模块:

ServerHost = localhost
ServerPort = 9005
Community  = shoreside

MOOSTimeWarp = 20
TERM_REPORTING = true

LatOrigin  = 43.825300 
LongOrigin = -70.330400 
//------------------------------------------
// Antler configuration  block
ProcessConfig = ANTLER
{
  MSBetweenLaunches = 200
  Run = MOOSDB		@ NewConsole = false
  Run = pMarineViewer	@ NewConsole = false
  Run = pShare	        @ NewConsole = false //增加这部分内容
}
//------------------------------------------
// pShare config block

ProcessConfig = pShare //增加对pshare的配置
{
AppTick  = 4
CommsTick = 4
input = route = localhost:9201
ooutput = src_name=MOOS_MANUAL_OVERRIDE, route=localhost:9200 
output = src_name=DEPLOY, route=localhost:9200 //发送MOOS_MANUAL_OVERRIDE、DEPLOY和RETURN的相关状态
output = src_name=RETURN, route=localhost:9200
}

下面需要对alpha.moos任务文件进行修改,需要发送的消息是NODE_REPORT_LOCAL以及VIEW_SEGLIST、VIEW_POINT相关的消息:

ServerHost = localhost
ServerPort = 9005
Community  = alpha

MOOSTimeWarp = 20
TERM_REPORTING = true

// Forest Lake
LatOrigin  = 43.825300 
LongOrigin = -70.330400 

// MIT Sailing Pavilion (use this one)
// LatOrigin  = 42.358456 
// LongOrigin = -71.087589


//------------------------------------------
// Antler configuration  block
ProcessConfig = ANTLER
{
  MSBetweenLaunches = 200

  Run = MOOSDB		@ NewConsole = false
  Run = pLogger         @ NewConsole = false
  Run = uSimMarine	@ NewConsole = false
  Run = pMarinePID	@ NewConsole = false
  Run = pHelmIvP	@ NewConsole = false
  Run = uProcessWatch	@ NewConsole = false
  Run = pNodeReporter	@ NewConsole = false
  Run = pShare	        @ NewConsole = false
}
//------------------------------------------
// pShare config block

ProcessConfig = pShare
{
AppTick  = 4
CommsTick = 4
input = route = localhost:9200
output = src_name=NODE_REPORT_LOCAL, dest_name=NODE_REPORT, route=localhost:9201
output = VIEW_SEGLIST, route=localhost:9201
output = VIEW_POINT, route=localhost:9201
}


4.pShare格式

这里对pShare稍微做一个简单的解释:
Output:一个配置块中可以有需要的任意多的“输出”指令。输出指令的详细形式如下,其中各部分指令含义是
src_name:共享变量的名称
dest_name:它到达目的地时应有的名称(可选)。如果这个量不存在,则不会发生重命名。
route:对于路径的描述,可以以端口形式给出例如:port:udp,或者以muticast形式给出“multicast_X”。这个跟命令行配置很相似
Input
这个形式相比上面输出显得更为简单,只需要对接受路径进行配置即可。配置格式跟上面的route相同

在这里插入图片描述

在这里插入图片描述
上图是典型的格式配置

5.运行显示

在这里插入图片描述
任务跟之前的alpha任务完全相同,不过是由两个MOOS文件相互分享变量来执行的。

总结

今天这篇内容初步讲解了pshare的相关用法,并用一个xready的例子和alpha任务来进行展示。主要是对.moos文件进行相关的配置,接下来的内容是pshare的更进一步的讲解以及使用uField工具箱进行配置。
今天中午女朋友心情不好,打电话安慰了一中午,时间过得总是那么的快。而我自己也累得口干舌燥,与女人对话的过程不亚于学习一篇艰难的论文。你需要多角度多方面多情景下的互联互通,你得把共情能力发挥到极致,有时候甚至得发散思维并且在脑海中重新构建场景,更有时候得梦回纯真年代怀揣童心幻想未来。一套心理大保健下来,仿佛身体被掏空~。在这里,我坚信我的女朋友肯定不会看我写的技术性文章,所以哥怀揣大无畏精神写下这段话,看看究竟什么时候被发现了去跪搓衣板。牛批的人生,就是这么的无所畏惧!
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值