AFSim仿真系统 --- 系统简解_07 移动器与路线

移动器与路线

移动器是一个平台子系统,它定义了平台如何在环境中移动。路线是一个具体位置(或航路点)的有序列表,定义了特定平台在移动时的路径。

几个特定领域的 AFSIM 移动器类型包括:

  • WSF_AIR_MOVER(空中移动器)
  • WSF_GROUND_MOVER(地面移动器)
  • WSF_SURFACE_MOVER(表面移动器)
  • WSF_ROAD_MOVER(道路移动器)

快速入门

移动器可以在平台定义、平台类型定义中定义,或独立定义,并在特定平台或平台类型中添加或修改。

以下代码示例产生相同的输出并且具有可扩展性。为了鼓励最佳实践和抽象的使用,不提供已定义的移动器:

独立定义的移动器
Independently Defined Mover

平台类型定义的移动器 
Platform Type Defined Mover

mover CARGO_AIR_MOVER WSF_AIR_MOVER
   operational
   update_interval 3 sec
end_mover

platform_type CARGO_AIRCRAFT WSF_PLATFORM
   icon c130
   spatial_domain air
   category cargo

   add mover CARGO_AIR_MOVER
   end_mover

end_platform_type
platform_type CARGO_AIRCRAFT WSF_PLATFORM
   icon c130
   spatial_domain air
   category cargo

   mover WSF_AIR_MOVER
      operational
      update_interval 3 sec
   end_mover

end_platform_type

 部分解释:

  1. mover CARGO_AIR_MOVER WSF_AIR_MOVER

    • 这一行定义了一个名为 CARGO_AIR_MOVER 的移动设备,并且指定它的类型或类别为 WSF_AIR_MOVER。这里的 mover 表示一个移动实体,通常用于模拟物品或人从一个地点移动到另一个地点。在这个上下文中,CARGO_AIR_MOVER  代表一种专门适用于空气动力学的移动工具。
  2. operational

    • 这一行表示该移动设备处于可操作状态,即可以执行其指定的任务和功能。在模拟中,这通常意味着它可以接收指令并开始移动。
  3. update_interval 3 sec

    • 这一行定义了更新间隔时间为3秒。这表示该移动设备的状态(如位置、速度等)将在每3秒钟更新一次。这是一个重要的参数,能够影响模拟的实时性和计算的精确性。
  4. end_mover

    • 这一行表示移动设备的定义结束,告知解析器停止读取此移动设备的相关信息。通常用于结构化文件中的分隔符。

以下代码示例演示了平台路线的基础。通过在平台定义中包含以下路线命令块,向平台添加路线:

route 
    position 00:30s 01:30w altitude 8000 m speed 500 km/h 
    position 00:30s 01:45e 
end_route 

mover 和 route 的关系

在模拟或仿真环境中,mover 和 route 之间的关系通常是:

  • mover(移动设备)是执行移动的实体,它可以是运输工具、机器人或其他能够在环境中移动的对象。
  • route(路线)则是指定移动设备在环境中移动的路径或行程。路线通常定义了移动的起点、终点,以及中间经过的各个位置。

      因此,mover 使用 route 来决定如何和在何处移动。在模拟过程中,mover 会依据指定的 route 在环境中进行定位和移动操作。当你指定一个 mover 时,你可能还会与其相关联一个或多个 route,以定义具体的移动轨迹和行为。

平台的初始位置将设置为路线中定义的第一个位置。后续位置命令将定义路线中的后续位置。如果需要,可以使用标签在路线中创建循环。如果没有指定,默认路线高度将根据拥有平台的初始位置信息确定(如果可用)。对于给定位置,高度和速度参数是可选的。如果没有指定,平台将保持在最后指定的高度和速度。

深入了解

移动器是 AFSIM 模拟中多个平台组件列表中的第一个。虽然这两者并不是同义词,但对于简单的平台,例如地面车辆,常常可以将移动器视为车辆的发动机。然而,对于多发动机车辆(如飞机),这种类比就失效了,因为在大多数情况下,它们只需要一个移动器。

注意:以下步骤假设“simple_flight”场景已经存在,如在平台和平台类型中讨论的那样。

向场景添加移动器

打开 Wizard 中的 simple_flight 项目和 simple_flight.txt。

在 CARGO_AIRCRAFT 平台类型定义中添加以下移动器命令块,并保存文件:

mover WSF_AIR_MOVER 
    operational 
end_mover 

注意:通过添加这个移动器块,任何从 CARGO_AIRCRAFT 平台类型继承的平台都能够通过(地球)空气进行动力飞行。

现在能够进行动力飞行,继承 CARGO_AIRCRAFT 平台类型的平台需要初始运动状态信息。这应作为路线的一部分提供。

添加平台路线

1   向平台“cargo-1”添加以下路线命令块:

route 
     position 00:30s 01:30w altitude 8000 m speed 500 km/h 
     position 00:30s 01:30e 
end_route 

2   在 Wizard 地图显示中,选择“cargo-2”。

3   右键单击 cargo-2 以打开上下文菜单。从那里选择路线,然后选择在 cargo-2 上创建路线。这将在平台上创建一个航路点,并在场景文件中的平台定义中创建一条路线。

4   选择 cargo-2 的第一个路线航路点后,右键点击地图显示区域,靠近坐标 00:30s 01:45w(在 cargo-1 的初始位置正西方)并选择“在位置添加,选择航路点”。

5    尽管格式可能有所不同,这一过程将导致 cargo-2 的路线如下所示:

route 
      position 00:30s 01:30e altitude 8000 m speed 500 km/h 
      position 00:30s 01:45w 
end_route 

6   保存文件。

Wizard 的地图显示应反映以下内容:

请注意,通过提供的路线,“cargo-1”和“cargo-2”正走向碰撞轨道,只有几分钟的时间来反应以避免碰撞。即将推出的模块将重点提供这些飞机避免碰撞的手段,并在相互绕行后返回到各自的指定路线。

回顾

完成此部分后,simple_flight 项目应包括一个单一的场景文件 simple_flight.txt,内容如下:

# simple_flight demo

simulation_name "Simple Flight"

execute at_time 0.1 sec absolute
   writeln("\nSimulating simple_flight scenario...");
end_execute

end_time 30 min

platform_type CARGO_AIRCRAFT WSF_PLATFORM
   icon c130
   spatial_domain air
   category cargo

   mover WSF_AIR_MOVER
      update_interval 3 sec
   end_mover

end_platform_type

platform cargo-1 CARGO_AIRCRAFT
   heading 90 deg
   altitude 8000m

   route
      position 00:30s 01:30w altitude 8000 m speed 500 km/h
      position 00:30s 01:45e
   end_route

end_platform

platform cargo-2 CARGO_AIRCRAFT
   heading -90 deg
   altitude 8000m

   route
      position 00:30s 01:30e altitude 0.00 ft speed 500 kmh
      position 00:30s 01:45w
   end_route

end_platform

总结

移动器促进拥有平台的运动,路线为平台提供旅行指令。可以通过 Wizard 地图显示创建路线,或直接在给定的场景文件中创建。在这两种情况下,现有的路线也可以通过这两个接口进行修改。如果定义了平台的路线,将覆盖当前的初始位置和运动状态,因此如果提供了初始路线,就不需要为平台提供初始位置。

对于更高级的模拟,单个平台上可以存在多个移动器,从而促进跨领域车辆的模拟,例如能够在水面降落和移动的飞机。

路线还可以包含标签,以允许平台无限重复一条路线。

插曲-------- 详细解释下下面代码格式及其意义:
 

route
      position 00:30s 01:30e altitude 0.00 ft speed 500 kmh
      position 00:29:26.684s 01:29:21.425e
      position 01:18:29.013s 01:04:03.407e
      position 00:57:00.252s 00:25:44.857w
      position 00:30s 01:45w
end_route

代码段解释

  1. route

    • 这一行标识一个路线的开始。后续的每个 position 表示路径上的一个位置。
  2. position 00:30s 01:30e altitude 0.00 ft speed 500 kmh

    • 这一行定义了在特定时间点的第一个位置信息。
      • 00:30s:表示位置的时间位置,格式是“hh:mm:ss”,这里是 0小时 0分钟 30秒。
      • 01:30e:经度,1.30度东(东经)。
      • altitude 0.00 ft:高度为 0 英尺,即在海平面上。
      • speed 500 kmh:速度为500公里每小时。
  3. position 00:29:26.684s 01:29:21.425e

    • 这一行定义了另一个位置的时间和坐标。
      • 00:29:26.684s:表示在 29分钟 26秒 684毫秒时的位置。
      • 01:29:21.425e:经度为 1.29度21.425分东。
  4. position 01:18:29.013s 01:04:03.407e

    • 当前时间格式为 01小时 18分钟 29秒 013毫秒。
    • 经度为 1.04度03.407分东。
  5. position 00:57:00.252s 00:25:44.857w

    • 当前时间格式为 00小时 57分钟 00秒 252毫秒。
    • 经度为 0.25度44.857分西。
  6. position 00:30s 01:45w

    • 当前时间格式为 00小时 00分钟 30秒。
    • 经度为 1.45度西。
  7. end_route

    • 这一行标识路线的结束。

数字格式解释

  • 时间格式

    • hh:mm:ss 或 hh:mm:ss.sss(或 s 表示秒,包含毫秒)表示经过的时间。
    • 例如,00:29:26.684s 表示从模拟开始的 29 分 26 秒和 684 毫秒。
  • 经度格式

    • 数字格式为 ddd:mm:ss 或 ddd:mm.ss,其中 ddd 表示度数,mm 表示分,ss 表示秒。‘e’ 表示东经,‘w’ 表示西经。
    • 例如,01:29:21.425e 表示 1 度 29 分 21.425 秒东经。

总结

route 和 position 的定义帮助模拟中的实体精确地在三维空间中进行移动,提供了时间和空间的详细信息,以支持真实的动态行为。在 AFSIM 中,准确的路径定义对于仿真效果至关重要。