MOOS-ivp 实验七 关于Helm Autonomy的介绍(2)新建自己的执行文件The Bravo Mission

本篇博客详细介绍了如何在MOOS-ivp实验中创建首个自主任务TheBravoMission,包括配置Loiter行为、理解duration和perpetual参数,并扩展至更复杂的BravoDoubleLoiter任务,涉及行为条件、定时器和双区域切换。通过实际操作演示了如何编写和配置.bhv文件,以及如何在显示画面中实时跟踪任务执行情况。
摘要由CSDN通过智能技术生成

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

本节承接上一节的内容,开始从无到有新建一个自己的mission文件


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

五、建立第一个自治任务 - The Bravo Mission

从这里我们开始从无到有新建一个自己的自治任务,我们主要用到Loiter behavior,但是也有机会会用到Waypoint, ConstantDepth,ConstantSpeed, 和 Timer behaviors。一开始我们先建立一个水面的自治任务,随后我们会深入学习,去建立一个水下的自治任务。
需要用到的各种行为(behaviours)的资料和helm的相关文档可以在网站Guide to helm中找到。
在这个部分我们会实现以下目的:
(1)从头新建一个执行任务(missions)
(2)熟悉Loiter行为
(3)介绍以下运行状态的概念
(4)理解perpetual标志在behaviour中的应用

1.Loiter的.bhv文件配置

Bravo任务应该具备以下功能:
(1)应该有一个Loiter行为,它在初始部署时为活动的。
(2)Loiter行为位置重心应为x=100,y=-75,半径为30米,loiter多边形有8个顶点。它的转速设置为2.5 m/s。它应该是逆时针的。
(3)它应该有一个Waypoint行为,当变量RETURN=true时,简单地将vehicle返回到车辆的起始位置x=0,y=0,就像在alpha任务中一样。
(4)Loiter行为应该利用duration参数在150秒后自动“完成”,触发返回路径点行为。
为实现上述功能,在.bhv文件添加以下行为,具体一些关键量的信息我都在代码中进行了备注:

//--------    FILE: alpha.bhv   -------------

initialize   DEPLOY = false   //初始化参数
initialize   RETURN = false

//----------------------------------------------
Behavior=BHV_Loiter
{
  name = west_zone
  pwt  = 100

  condition = DEPLOY = true
  condition = RETURN = false
  endflag = RETURN = true
  
  duration = 150  //行为执行150s后,行为结束
  updates    = LOITER_UPDATE
  perpetual  = true

  // 题目要求的相关参数设定
   // ------------------------------------
      acquire_dist = 10               // default
      capture_radius = 3                // default  
      center_activate = false            // default
      clockwise = false             // default
      slip_radius = 15               // default
      speed = 2.5                // default
      spiral_factor = -2               // default

      polygon = radial:: x=100,y=-75,radius=30,pts=8  // 重心、半径、定点数
      post_suffix = HENRY                             // example


  // 在界面上画出相关的图形
        visual_hints = vertex_size  = 1             // default
        visual_hints = edge_size    = 1             // default
        visual_hints = vertex_color = dodger_blue   // default
        visual_hints = edge_color   = white         // default
        visual_hints = nextpt_color = yellow        // default
        visual_hints = nextpt_lcolor = aqua         // default
        visual_hints = nextpt_vertex_size = 5       // default
        visual_hints = label        = west_zone         // example

}

//返回点配置
Behavior=BHV_Waypoint
{
  name       = waypt_return
  pwt        = 100
  condition  = RETURN = true
  condition  = DEPLOY = true
  perpetual  = true
  updates    = RETURN_UPDATE
  endflag    = RETURN = false
  endflag    = DEPLOY = false
  endflag    = MISSION = complete

           speed = 2.0
  capture_radius = 2.0
     slip_radius = 8.0
          points = 0,0
}

.moos文件不需要进行什么改动。

2.duration和perpetual

(1)duration参数
duration参数是以秒为单位,来指定完成任务之前的执行时间。如果设定为false那么就是不指定具体的任务执行时间。默认情况下,在helm开始启动之后,duration开始计时,如果在途中进入空闲状态,保持计时。如果helm控制停车,duration仍旧计时。当计时完成之后,会发布一个endflag标志。这个behaviour可以配置通过duration_status参数,来发布一个超时前所剩余的时间,下面是其使用格式:

    duration        =  value (positive numerical)
    duration_status =  value (variable name)

注意一点,只有当behaviour处于执行状态时,duration 才会被发布。duration 的状态会以最接近的四舍五入的整数来发布,直到还剩余10s的时候,以小数发布(这都是废话)。如果想要在behaviour处于空闲状态的时候,暂停duration 的计时,可以使用下面的语句进行配置:

duration_idle_decay = false   // The default is true 

(2)perpetual参数
当一个行为进入了完成状态之后,那么默认情况下,行为就保持在完成状态。如果将perpetual参数设置为true的话,那么虽然行为已经完成,但是还是可以发布一些跟结束相关的状态,比如发布endflag等。其格式如下:

perpetual  =  value

当一个行为执行时间到达之后(duration设置的),如果当perpetual参数是真的情况下,那么在行为计时结束之后,将会发布结束标志。但是行为(behaviour)也会重置其状态,当符合行为发生条件的时候duration也会重新开始计时。

3.任务示意

在这里插入图片描述

六、Bravo Double Loiter任务

在此部分,我们将:

探索一个不连续的任务-一个在切换模式的任务
熟悉 duration, endflag, perpetual等行为参数
学习Timer行为
我们将在Bravo任务中增加第二个Loiter任务,使得vehicle能够周期性的在两个地点切换,第二个Bravo任务将配置以下功能:

新的bravo任务应该有第二个Loiter行为,它在初始部署时不是活动的。它的位置应该是x=160,y=-50,半径为20米,Loiter多边形应该有8个顶点。它的转速应设置为2.5 m/s。
利用condition参数使两个loiter行为互斥,如condition=LOITER_REGION=west
利用duration, endflag, perpetual参数完成周期性切换,将每个持续时间设置为150s,在每个行为中使用两个endflag参数从而
-(1)触发另一个Loiter行为的condition
-(2)取消行为结束的condition
将perpetual参数设置为true,使行为永久运行,等待它的condition再次得到满足。

注意:您可能需要了解 duration timer是如何工作的。回想一下,duration特性是为所有行为定义的。默认情况下,一旦倒计时结束,计时器立即重新启动,同时perpetual设置为true,所以说在不满足行为condition时,该行为的计时器也在持续运行中。您可能希望您的行为等待,直到它再次运行(逻辑条件得到满足),然后再恢复持续时间计时器倒计时。在这种情况下,需要将duration_idle_decay设置为false。默认值为true

1. Double Loiter的文件配置

啰嗦了这么半天,主要就是设置condition,把一个行为的结束发布的endflag作为另一个行为的condition。从而实现任务在这两者之间不断进行循环,下面是.bhv的文件配置
代码如下(示例):

Behavior = BHV_Loiter
 {
   // General Behavior Parameters
   // ---------------------------
   name         = loiter_west               // example
   pwt          = 100                   // default
   condition = RETURN = false
   condition = DEPLOY = true
   condition = LOITER_REGION = west
   updates      = LOITER_UPDATES        // example
   duration = 150 
   endflag = LOITER_REGION = east
   duration_idle_decay = false
   perpetual = true

   // Parameters specific to this behavior
   // ------------------------------------
        acquire_dist = 10               // default
      capture_radius = 3                // default  
     center_activate = false            // default
           clockwise = false             // default
         slip_radius = 15               // default
               speed = 2.5                // default
       spiral_factor = -2               // default

             polygon = radial:: x=100,y=-75,radius=30,pts=8  // example
         post_suffix = HENRY                             // example



        visual_hints = vertex_size  = 1             // default
        visual_hints = edge_size    = 1             // default
        visual_hints = vertex_color = dodger_blue   // default
        visual_hints = edge_color   = white         // default
        visual_hints = nextpt_color = yellow        // default
        visual_hints = nextpt_lcolor = aqua         // default
        visual_hints = nextpt_vertex_size = 5       // default
        visual_hints = label        = zone3         // example
 }


//-------------------------------------------------------
Behavior = BHV_Loiter
 {
   // General Behavior Parameters
   // ---------------------------
   name         = loiter_east               // example
   pwt          = 100                   // default
   condition = RETURN = false
   condition = DEPLOY = true
   condition = LOITER_REGION=east
   updates      = LOITER_UPDATES        // example
   duration = 150
   endflag = LOITER_REGION = west
   duration_idle_decay = false
   perpetual = true

   // Parameters specific to this behavior
   // ------------------------------------
        acquire_dist = 10               // default
      capture_radius = 3                // default  
     center_activate = false            // default
           clockwise = false             // default
         slip_radius = 15               // default
               speed = 2.5                // default
       spiral_factor = -2               // default

             polygon = radial:: x=160,y=-50,radius=20,pts=8  // example
         post_suffix = HENRY                             // example



        visual_hints = vertex_size  = 1             // default
        visual_hints = edge_size    = 1             // default
        visual_hints = vertex_color = dodger_blue   // default
        visual_hints = edge_color   = white         // default
        visual_hints = nextpt_color = yellow        // default
        visual_hints = nextpt_lcolor = aqua         // default
        visual_hints = nextpt_vertex_size = 5       // default
        visual_hints = label        = zone3         // example
 }

别忘记在开头进行初始化操作。
在这里插入图片描述

2.显示画面

在这里插入图片描述

3.附加内容

如何实现鼠标左键处生成一个多边形图案,使得水下机器人先绕着生成的图案航行,之后按照之前的设置在另一个方向的图形中航行,下面是修改代码:
修改.bhv文件内容:
在这里插入图片描述
非常简单,将update处的更新配置去掉
对于moos文件的修改:

  left_context[loiter_point] = VIEW_POLYGON = format=radial,x=$(XPOS),y=$(YPOS),radius=20, pts=8, edge_size=1,label=loiter_west 
  left_context[loiter_point] = LOITER_UPDATES = "polygon = format=radial, x=$(XPOS), y=$(YPOS), radius=20, pts=8, snap=1, label=loiter_west "
  left_context[loiter_point] = DEPLOY=true
  left_context[loiter_point] = MOOS_MANUAL_OVERIDE=false
  left_context[loiter_point] = RETURN=false

增加了对于LOITER_UPDATES的内容配置,其原理跟自动返航原理基本类似,需要配置的格式可以在The Loiter Behavior中看到。
下面是内容展示:
在这里插入图片描述
在这里插入图片描述

总结

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值