AFSim仿真系统 --- 系统简解_11 行为与行为树

news2024/11/30 0:42:47

行为与行为树

行为树是一种人工智能技术,它使用户能够快速创建灵活的行为体,这些行为体包含各种战术模块,称为“行为”或“行为节点”。通过连接节点,可以将这些节点以多样且相互关联的方式组合在一起以定义行为。

快速入门

一个行为可以如下定义:

behavior report
   precondition
      return true;
   end_precondition

   execute
      WsfPlatform plat = PLATFORM;
      writeln(plat.Name(), " Report: Status - OK");
   end_execute
end_behavior

report 行为可以在任务处理器的行为树中实现如下:

processor TASK_MANAGER WSF_TASK_PROCESSOR
   update_interval 10 sec
   behavior_tree
      selector
         behavior_node report
      end_selector
   end_behavior_tree
end_processor

任何实现该处理器的平台或平台类型都将把状态消息 OK 报告到控制台和模拟日志中。该行为仅在前置条件返回 true 时被选择——选择器将逐个检查每个行为节点的前置条件,并仅执行第一个前置条件返回 true 的行为。替代的行为控制机制包括序列、并行、优先选择器和加权随机。可以将这些组合并串联使用,以创建任意复杂的行为树。

进一步探讨

注意:以下步骤假设“simple_flight”场景已存在,如在处理器中所述。

添加行为

要将行为添加到 simple_flight 场景,执行以下步骤:

  1. 在 simple_flight 目录中创建一个名为 behaviors.txt 的新文本文件。

  2. 在 track_processor.txt 中添加以下代码行:

    include_once behaviors.txt 

3 后续步骤中实现的行为使用 aux_data,这是一个 AFSIM 命令,可用于为特定平台或平台类型定义自定义变量,以便在任意数量的应用中使用。为了确保行为正常工作,必须在 CARGO_AIRCRAFT 的平台类型定义中添加以下 aux_data 命令块:

aux_data
   struct CARGO_AUX_DATA
      bool collisionExpected = false
      bool offRoute = false
      double lastKnownDistance = -1
   end_struct
end_aux_data

4 此外,应该在同一平台类型的移动器定义中添加爬升率限制。这将确保飞机在合理范围内改变俯仰角。更新 CARGO_AIRCRAFT 移动器定义以反映以下内容:

mover WSF_AIR_MOVER
   update_interval 3 sec
   maximum_flight_path_angle     10 deg
end_mover

   5  打开 behaviors.txt

   6  将以下行为块添加到 behaviors.txt

       第一个行为定义如下,将是货运飞机的默认行为——在平台的 AIR_RADAR 未检测到轨迹时执行。

behavior report_all_clear
   precondition
      WsfLocalTrackList trackList = PLATFORM.TrackList("track_proc");
      return trackList.Empty();
   end_precondition

   execute
      WsfPlatform plat = PLATFORM;
      writeln(plat.Name(), " Report: All Clear");
      if (plat.AuxDataBool("offRoute"))
      {
         plat.ReturnToRoute();
         writeln("\t - Returning to route\n");
         plat.SetAuxData("offRoute", false);
      }
   end_execute
end_behavior

    下一个行为将在任何平台的 AIR_RADAR 检测到轨迹时执行。在执行过程中,它检查该轨迹是否表示存在一平台在碰撞轨迹上。通过比较轨迹的纬度和高度与自身的纬度和高度,来确定是否可能发生碰撞。然后,它使用 aux_data 随着时间的推移来确定轨迹是否正在接近。如果它们处于相同的纬度和高度并且正在接近,则任务处理器生成一个警告——碰撞是预期的,并将该信息提供给平台的 aux data。

behavior report_entity_detected
   precondition
      WsfLocalTrackList trackList = PLATFORM.TrackList("track_proc");
      return !trackList.Empty();
   end_precondition

   execute
      WsfPlatform plat = PLATFORM;
      writeln(plat.Name(), " Report: Entity Detected");

      WsfLocalTrackList trackList = plat.TrackList("track_proc");
      foreach (WsfTrack t in trackList)
      {
         if (plat.Altitude() == t.Altitude())
         {
            double lastDist = plat.AuxDataDouble("lastKnownDistance");
            double currDist = plat.GroundRangeTo(t.CurrentLocation());
            if (lastDist == -1 || lastDist > currDist)
            {
               plat.SetAuxData("lastKnownDistance", currDist);
               writeln("\t - WARNING: Collision Expected!\n");
               plat.SetAuxData("collisionExpected", true);
            }
         }
      }
   end_execute
end_behavior

第三个也是最后一个行为仅在已知平台处于碰撞轨迹上时执行。当此行为被执行时,平台会指示自己在有限范围内随机改变高度。在改变高度后,系统恢复到正常状态,并保持该高度,直到轨迹不再被检测到,此时平台将返回到指定航路。

behavior reroute
   precondition
      WsfPlatform plat = PLATFORM;
      bool collisionExpected = PLATFORM.AuxDataBool("collisionExpected");
      if (collisionExpected)
      {
         writeln(plat.Name(), " Report: Rerouting...");
      }
      return collisionExpected;
   end_precondition

   execute
      WsfPlatform plat = PLATFORM;
      double altDelta = 100 * Math.Ceil(RANDOM.Uniform(0, 30) - 20);
      plat.GoToAltitude(plat.Altitude() + altDelta);
      writeln("\t - New Target Altitude = ", plat.Altitude() + altDelta, "m\n");
      plat.SetAuxData("collisionExpected", false);
      plat.SetAuxData("offRoute", true);
  end_execute
end_behavior


添加行为树


这些行为的顺序对于它们的正确执行至关重要。

   1   可以在 CARGO_TASK_MANAGER 处理器定义块中实现行为树,如下所示:

behavior_tree  
   selector  
      behavior_node report_all_clear  
      behavior_node reroute  
      behavior_node report_entity_detected  
   end_selector  
end_behavior_tree  


  2  通过这些新增功能,货运飞机现在能够在彼此之间自主调整航线。请在 Warlock 中模拟 simple_flight。

 3   将时间推进到 1000 秒(就在飞机彼此足够接近以进行检测之前)。

 4  观察控制台输出中报告的消息,因为平台独立地确定行动方案。将此与它们调整后的飞行轨迹进行比较。

飞行路径应反映类似于以下内容的结果:

 
回顾


随着场景规模的增加,提供此模块中每个更改文件的完整版本已不再实际。如有需要,完整版本将可以在 demos/simple_flight 中找到以备参考。

在此模块中,为 simple_flight 场景添加了一个新文件 behaviors.txt,并对 cargo_aircraft.txt 和 track_processor.txt 进行了更改。

 

track_processor.txt

# track_processor.txt
# A component of the simple_flight demo

include_once behaviors.txt

processor TRACK_MANAGER WSF_TRACK_PROCESSOR
   master_track_processor
   purge_interval 10 sec
   report_interval 3 sec
end_processor

processor CARGO_TASK_MANAGER WSF_TASK_PROCESSOR
   update_interval 10 sec
   behavior_tree
      selector
         behavior_node report_all_clear
         behavior_node reroute
         behavior_node report_entity_detected
      end_selector
   end_behavior_tree
end_processor

cargo_aircraft.txt (platform type)

# cargo_aircraft.txt
# A component of the simple_flight demo
include_once track_processor.txt

...

platform_type CARGO_AIRCRAFT WSF_PLATFORM
   icon c130
   spatial_domain air
   category cargo

   mover WSF_AIR_MOVER
      update_interval 3 sec
      maximum_flight_path_angle     10 deg
   end_mover

   radar_signature CARGO_AIRCRAFT_RADAR_SIG

   add sensor cargo_radar AIR_RADAR
      internal_link track_proc
   end_sensor

   add processor track_proc TRACK_MANAGER
      internal_link task_mgr
   end_processor

   add processor task_mgr CARGO_TASK_MANAGER
   end_processor

   aux_data
      struct CARGO_AUX_DATA
         bool collisionExpected = false
         bool offRoute = false
         double lastKnownDistance = -1
      end_struct
   end_aux_data
end_platform_type

 


总结


       行为提供了通过 AFSIM 提供的高级能力的一个小部分视图。通过这些新增功能,任意数量的平台可以在直接感知的基础上被自动化为独立工作。当行为和处理器与通信设备连接时,AFSIM 的能力将进一步扩展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2215598.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微软默认软件要是换成这些,工作效率直接飙升10倍不止

你的电脑配置明明比别人高,打开文件却比别人慢,这是为什么? 有可能就是软件的问题,如果微软默认软件都被替换成下面这些宝藏级免费工具,工作效率直接飙升10倍不止! Everything Windows自带的搜索工具速度…

【Linux】配置Mysql 远程连接

文章目录 一、安装 Mysql配置 Mysql修改密码 登录 Mysql设置远程连接开放端口3306详情看蛋卷 一、安装 Mysql sudo yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpmyum -y install mysql mysql-server --nogpgcheck配置 Mysql #MyS…

6款提升工作效率的电脑监控软件推荐

在现代企业管理中,电脑监控软件成为提高工作效率、优化资源配置的关键工具。它们不仅能帮助管理者监控员工的电脑活动,还能提供有助于提升生产力的详细报告和分析。以下是6款广受好评的电脑监控软件,能够帮助企业有效管理和提升员工效率。 1…

邻接矩阵的有向图(C语言代码)

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #define MAXVEX 100//最大顶点数 typedef struct {int vexs[MAXVEX];//存储顶点的数组int matrix[MAXVEX][MAXVEX];//存储邻接矩阵的二维数组int vexnum, edgenum;//顶点数边数 }MGraph;…

【SpringBoot详细教程】-12-SpringBoot整合定时任务 【持续更新】

Hello&#xff0c;大胸弟们&#xff0c;我们又又又见面了&#xff0c;今天攀哥继续为大家分享一下SpringBoot的教程&#xff0c;没点关注的宝宝&#xff0c;点一下关注。 &#x1f332; 定时任务简介 &#x1f33f; 定时任务使用场景 我们在编写SpringBoot应⽤中经常会遇到这…

Python实现文本数据可视化:构建动态词云

引言 在信息爆炸的时代&#xff0c;如何有效地从海量的文本数据中提取关键信息并直观展示&#xff0c;成为数据分析师和研究人员面临的重要挑战。词云作为一种流行的文本可视化工具&#xff0c;通过不同大小、颜色和字体的文字展示文本中关键词的出现频率或重要性&#xff0c;…

<<迷雾>> 第11章 全自动加法计算机(8)--一只开关取数并相加 示例电路

用一只开关就可完成将所有的数从存储器里依次取出并逐个相加的过程. info::操作说明 增加了 指令寄存器 和 译码电路, 扩充了 RR 循环移位寄存器 存储器中前 10 个地址已经提前写入了指令和数值, 其中 17(10001) 代表装载指令, 18(10010) 代表相加指令, 其它则为要加的数. 需检…

vue3--通用 button 组件实现

背景 在日常开发中,我们一般都是利用一些诸如:element-ui、element-plus、ant-design等组件库去做我们的页面或者系统 这些对于一些后台管理系统来说是最好的选择,因为后台管理系统其实都是大同小异的,包括功能、布局结构等 但是对于前台项目,比如官网、门户网站这些 …

StableDiffusion|833种艺术家风格项目,提示词直接上手! AI绘画文生图直接抄!

大家好&#xff0c;我是画画的小强 众所周知&#xff0c;Stable Diffusion是一个强大的文生图模型&#xff0c;能够根据用户的文本描述生成高质量的图像。在这个过程中&#xff0c;提示词&#xff08;Prompt&#xff09;的选择和构造具有至关重要的作用。提示词是向模型描述你…

RPA好用吗?RPA机器人如何使用?

数字化飞速发展的时代&#xff0c;企业越来越追求效率和成本控制&#xff0c;以期在激烈的市场竞争中保持领先地位。在此背景下&#xff0c;RPA机器人流程自动化作为一种能够提升业务流程效率的先进技术&#xff0c;成为助力企业数字化转型和高质量发展的强劲助力。那么&#x…

【前端】制作一个自己的网页(4)

刚才我们完成了网页中标题与段落元素的学习。在实际开发时&#xff0c;一个网页通常会包含多个相同元素&#xff0c;比如多个标题与段落。 对于相同标签的元素&#xff0c;我们又该如何区分定位呢&#xff1f; 对多个相同的标签分类 比如右图设置了七个段落元素&#xff0c;它…

Android ImageView scaleType使用

目录 一、src设置图片资源 二、scaleType设置图片缩放类型 三、scaleType具体表现 matrix&#xff1a; fitXY: fitStart&#xff1a; fitCenter&#xff1a; fitEnd: Center&#xff1a; centerCrop: centerInside&#xff1a; 控制ImageView和图片的大小保持一致…

实例详解 | 借助 Langchain 和 Gemma 2 构建 RAG 应用

本文将为您介绍如何使用 LangChain、NestJS 和 Gemma 2 构建关于 PDF 格式 Angular 书籍的 RAG 应用。接着&#xff0c;HTMX 和 Handlebar 模板引擎将响应呈现为列表。应用使用 LangChain 及其内置的 PDF 加载器来加载 PDF 书籍&#xff0c;并将文档拆分为小块。然后&#xff0…

【Golang】合理运用泛型,简化开发流程

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

测试用例如何进行评估?4个指标

测试用例评估是确保软件测试活动能够达到预期目标的关键步骤。评估测试用例的有效性和质量&#xff0c;对于确保软件产品的质量和可靠性至关重要。如果未对测试用例进行评估&#xff0c;可能导致测试用例不完整、不准确或无效&#xff0c;进而引发需求遗漏、测试不充分等问题&a…

241015_把一个文件夹中的所有图片按照序列命名

241015_把一个文件夹中的所有图片按照序列命名(数据集重命名) 在数据集制作过程中&#xff0c;我们经常会遇到合并图片数据集后命名格式不统一或者因重复命名自动添加&#xff08;1&#xff09;&#xff08;2&#xff09;的问题&#xff0c;以下是一段代码&#xff0c;对合并后…

中国研究员使用量子计算机破解 RSA 加密

由上海大学的 Wang Chao 领导的研究团队发现&#xff0c;D-Wave 的量子计算机可以优化问题解决&#xff0c;从而可以攻击 RSA 等加密方法。 中国研究人员公布了一种使用 D-Wave 的量子退火系统来破解经典加密的方法&#xff0c;这可能会加快量子计算机对广泛使用的加密系统构成…

推荐系统架构

推荐系统架构 推荐和搜索系统核心的的任务是从海量物品中找到用户感兴趣的内容。在这个背景下&#xff0c;推荐系统包含的模块非常多&#xff0c;每个模块将会有很多专业研究的工程和研究工程师&#xff0c;作为刚入门的应届生或者实习生很难对每个模块都有很深的理解&#xf…

鼠标右键删除使用Visual Studio 打开(v)以及恢复【超详细】

鼠标右键删除使用Visual Studio 打开&#xff08;v&#xff09; 1. 引言2. 打开注册表3. 进入对应的注册表地址4. 右键删除 AnyCode 项5. 效果6. 备份注册表文件——恢复菜单 1. 引言 安装完 Visual Studio 鼠标右键总有 “使用Visual Studio 打开(v)”&#xff0c;让右键菜单…

windows修改文件最后修改时间

一、需要修改日期的文件 背景&#xff1a;有时候我们需要做一些文件定期删除的操作&#xff0c;但是测试时候并不一定有符合测试的文件&#xff0c;这时候就需要可以方便的修改文件的最后修改时间。 系统环境&#xff1a;windows 测试文件&#xff1a;如上 修改时间方式&#x…