用于存储和排序不同对象/类型的数据结构?存储各种不同的传感器数据,按时间排序

2024-05-18 09:45:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图想出一个解决方案来保存不同类型的传感器数据,并按时间顺序进行排序。 例如,我将有:

  • 100、101、102等时刻的全球导航卫星系统/全球定位系统数据
  • 时间为100、100.01、100.02…的IMU数据。。。。101、101.01等
  • 在时间100、100.1、100.2。。。101.1、101.2等

我需要按时间顺序处理数据。它们是不同的类型/对象。 现在我正在做一些粗俗的事情,比如:

# The actual data structures stored would look something like below 
# (with some fields not explicity written out for clarity, the point though is each 
# data structure is different).
# 
# struct GnssData {
#    double time; double latitude; double longitude; };
# struct ImuData {
#    double time; double acc_x; double acc_y; }; 
# struct LidarData {
#    double time; double ranges[100]; double angles[100]; };

# We can assume each individual list/array/vector is sorted by time. 
# The actual implementation right now is std::vector<LidarData> all_lidar_data; std::vector<GnssData> all_gnss_data; std::vector<ImuData> all_imu_data;
all_lidar_data = [100, 100.1, 100.2, 100.3, 100.4, 100.5]
all_gnss_data = [100, 101, 102, 103]
all_imu_data = [100, 100.01, 100.02, 100.03]

if all_lidar_data[0].time < all_gnss_data[0].time and all_lidar_data[0].time < all_imu_data[0].time:
  # process lidar data
  # pop all_lidar_data[0]
elif all_gnss_data[0].time < all_lidar_data[0].time and all_gnss_data[0].time < all_imu_data[0.time:
  # process gnss data
  # pop all_gnss_data[0]

这种方法可以工作,但当没有gnss数据时,它会变得非常混乱,例如,因此列表/数组是空的。因此,在进行时间比较之前,还需要首先检查是否存在gnss数据

理想情况下,我想做的是有一个数组,它按时间顺序包含所有传感器数据,因此

while len(all_sensor_data) > 0:
  # process all_sensor_data[0]
  # remove all_sensor_data[0]

其中,使用上述示例,所有传感器数据将是:GNSS(100)、IMU(100)、激光雷达(100)、IMU(100.01)。。。惯性测量单元(100.09)、激光雷达(100.1)、惯性测量单元(100.1),…、全球导航卫星系统(101)、惯性测量单元(101)、激光雷达(101)

有没有关于设计模式或数据结构的建议可以解决这个问题?我在C++中编程,但是为了清晰起见,在Python中编写了示例。 编辑:这是一个实时应用程序,因此数据可用时会不断添加


Tags: 数据datatime顺序is时间传感器all