移动器与路线
移动器是一个平台子系统,它定义了平台如何在环境中移动。路线是一个具体位置(或航路点)的有序列表,定义了特定平台在移动时的路径。
几个特定领域的 AFSIM 移动器类型包括:
- WSF_AIR_MOVER(空中移动器)
- WSF_GROUND_MOVER(地面移动器)
- WSF_SURFACE_MOVER(表面移动器)
- WSF_ROAD_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 |
部分解释:
-
mover CARGO_AIR_MOVER WSF_AIR_MOVER:
- 这一行定义了一个名为
CARGO_AIR_MOVER
的移动设备,并且指定它的类型或类别为WSF_AIR_MOVER
。这里的mover
表示一个移动实体,通常用于模拟物品或人从一个地点移动到另一个地点。在这个上下文中,CARGO_AIR_MOVER
代表一种专门适用于空气动力学的移动工具。
- 这一行定义了一个名为
-
operational:
- 这一行表示该移动设备处于可操作状态,即可以执行其指定的任务和功能。在模拟中,这通常意味着它可以接收指令并开始移动。
-
update_interval 3 sec:
- 这一行定义了更新间隔时间为3秒。这表示该移动设备的状态(如位置、速度等)将在每3秒钟更新一次。这是一个重要的参数,能够影响模拟的实时性和计算的精确性。
-
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
代码段解释
-
route:
- 这一行标识一个路线的开始。后续的每个
position
表示路径上的一个位置。
- 这一行标识一个路线的开始。后续的每个
-
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公里每小时。
- 这一行定义了在特定时间点的第一个位置信息。
-
position 00:29:26.684s 01:29:21.425e:
- 这一行定义了另一个位置的时间和坐标。
- 00:29:26.684s:表示在 29分钟 26秒 684毫秒时的位置。
- 01:29:21.425e:经度为 1.29度21.425分东。
- 这一行定义了另一个位置的时间和坐标。
-
position 01:18:29.013s 01:04:03.407e:
- 当前时间格式为 01小时 18分钟 29秒 013毫秒。
- 经度为 1.04度03.407分东。
-
position 00:57:00.252s 00:25:44.857w:
- 当前时间格式为 00小时 57分钟 00秒 252毫秒。
- 经度为 0.25度44.857分西。
-
position 00:30s 01:45w:
- 当前时间格式为 00小时 00分钟 30秒。
- 经度为 1.45度西。
-
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 中,准确的路径定义对于仿真效果至关重要。