implement City10000Dataset class

release/4.3a0
Varun Agrawal 2025-02-08 22:57:17 -05:00
parent e8583d9a4e
commit 085482c2ea
1 changed files with 48 additions and 0 deletions

View File

@ -11,10 +11,15 @@ Author: Varun Agrawal
"""
import argparse
import time
import numpy as np
from gtsam.symbol_shorthand import L, M, X
import gtsam
from gtsam import (BetweenFactorPose2, HybridNonlinearFactor,
HybridNonlinearFactorGraph, HybridSmoother, HybridValues,
Pose2, PriorFactorPose2, Values)
def parse_arguments():
@ -38,6 +43,49 @@ pose_noise_model = gtsam.noiseModel.Diagonal.Sigmas(
pose_noise_constant = pose_noise_model.negLogConstant()
class City10000Dataset:
"""Class representing the City10000 dataset."""
def __init__(self, filename):
self.filename_ = filename
try:
f = open(self.filename_, 'r')
f.close()
except OSError:
print(f"Failed to open file: {self.filename_}")
def read_line(self, line: str, delimiter: str = " "):
"""Read a `line` from the dataset, separated by the `delimiter`."""
return line.split(delimiter)
def parse_line(self, line: str) -> tuple[list[Pose2], tuple[int, int]]:
"""Parse line from file"""
parts = self.read_line(line)
key_s = int(parts[1])
key_t = int(parts[3])
num_measurements = int(parts[5])
pose_array = [Pose2()] * num_measurements
for i in range(num_measurements):
x = float(parts[6 + 3 * i])
y = float(parts[7 + 3 * i])
rad = float(parts[8 + 3 * i])
pose_array[i] = Pose2(x, y, rad)
return pose_array, (key_s, key_t)
def next(self):
"""Read and parse the next line."""
with open(self.filename_, 'w') as f:
line = f.readline()
if line:
yield self.parse_line(line)
else:
yield None, None
def main():
"""Main runner"""
args = parse_arguments()