ZBLOG

Airspace and the air traffic going through it are typically managed by the air traffic controllers that are in charge of organizing the air traffic, preventing collisions, and providing information. In this scenario, each air traffic control cente...

这段文字描述了如何使用数据分发服务(DDS)在航空交通管理中实现飞机位置的实时跟踪和信息共享。下面是对文本内容的逐步解释:

背景

  1. 空域与空中交通管理

    • 空域(airspace)及其中的空中交通通常由空中交通管制员(air traffic controllers)管理。
    • 管制员负责组织空中交通、预防碰撞并提供相关信息。
  2. 责任区域

    • 每个空中交通管制中心负责特定的飞行区域,并将数据传送到统一的空域交通管理系统,以整合飞行信息。

DDS 的应用

  1. 信息流通

    • 当一个控制中心发现进入其控制飞行区的飞机时,它会通知空域交通管理中心关于该航班的跟踪信息。
    • 这种信息流可以通过 DDS 实现,创建一个特定主题(Topic),其中发布有关航班位置的信息。
  2. 主题实例

    • 在更智能的实现方案中,可以利用主题实例(topic instances)来转发来自地方航空管制中心的信息到空域交通管理中心。
    • 主题实例可以使用航司名称和航班号作为实例键进行识别(例如:IBERIA 1234)。

数据模型定义

  1. IDL 定义
    
    struct FlightPosition {
       @key string<256> airline_name; // 航空公司名称
       @key short flight_number;       // 航班号
       double latitude;                // 纬度
       double longitude;               // 经度
       double altitude;                // 海拔高度
    };
    
    • FlightPosition 是用于描述飞机位置信息的数据结构,其中包含航空公司名称、航班号及其坐标信息。

实例注册与更新

  1. 新航班发现后注册实例

    FlightPosition first_flight_position;
    first_flight_position.airline_name("IBERIA");
    first_flight_position.flight_number(1234);
    eprosima::fastdds::rtps::InstanceHandle_t first_flight_handle =
        data_writer->register_instance(&first_flight_position);
    
    • 一旦发现新航班,控制中心会创建对应的数据样本,并为其注册一个实例,这样可以方便后续操作,如写入、处置或注销实例等。
  2. 更新位置信息并写入数据

    first_flight_position.latitude(39.08);
    first_flight_position.longitude(-84.21);
    first_flight_position.altitude(1500);
    
    
    data_writer->write(&first_flight_position, first_flight_handle);
    
    • 控制中心更新飞机的位置,并将新的位置信息写入 DDS 系统,使用之前注册的实例句柄以提高效率。
  3. 直接调用 DataWriter 操作

    • 用户应用程序也可以直接用 NIL 实例句柄调用 DataWriter 实例操作,而不需先注册。这种方法可能会导致性能下降,因为每次操作都需要重新计算实例句柄。
  4. 新数据样本与未注册的新实例

    FlightPosition second_flight_position;
    second_flight_position.airline_name("RYANAIR");
    second_flight_position.flight_number(4321);
    
    
    second_flight_position.latitude(40.02);
    second_flight_position.longitude(-84.32);
    second_flight_position.altitude(5000);
    
    
    data_writer->write(&second_flight_position);  
    
    • 对于第二个新航班,可以直接创建新的数据样本并写入,无需先注册该实例。在这种情况下,虽然方便但效率较低,因为没有使用优化过的句柄。

总结

整体而言,这段文字详细介绍了如何利用 DDS 在航空领域实施有效的数据通信和追踪,强调了通过主题和主题实例来高效地处理飞行位置数据的重要性。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21156

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?