return whether loop is ambiguous
							parent
							
								
									6919bae1b7
								
							
						
					
					
						commit
						82e2c4f80e
					
				| 
						 | 
				
			
			@ -85,13 +85,16 @@ class City10000Dataset:
 | 
			
		|||
        """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]]:
 | 
			
		||||
    def parse_line(self,
 | 
			
		||||
                   line: str) -> tuple[list[Pose2], tuple[int, int], bool]:
 | 
			
		||||
        """Parse line from file"""
 | 
			
		||||
        parts = self.read_line(line)
 | 
			
		||||
 | 
			
		||||
        key_s = int(parts[1])
 | 
			
		||||
        key_t = int(parts[3])
 | 
			
		||||
 | 
			
		||||
        is_ambiguous_loop = bool(int(parts[4]))
 | 
			
		||||
 | 
			
		||||
        num_measurements = int(parts[5])
 | 
			
		||||
        pose_array = [Pose2()] * num_measurements
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -101,7 +104,7 @@ class City10000Dataset:
 | 
			
		|||
            rad = float(parts[8 + 3 * i])
 | 
			
		||||
            pose_array[i] = Pose2(x, y, rad)
 | 
			
		||||
 | 
			
		||||
        return pose_array, (key_s, key_t)
 | 
			
		||||
        return pose_array, (key_s, key_t), is_ambiguous_loop
 | 
			
		||||
 | 
			
		||||
    def next(self):
 | 
			
		||||
        """Read and parse the next line."""
 | 
			
		||||
| 
						 | 
				
			
			@ -126,7 +129,6 @@ def plot_all_results(ground_truth,
 | 
			
		|||
        estimate_label (str, optional): Label for the estimates, used in the legend.
 | 
			
		||||
            Defaults to "Hybrid Factor Graphs".
 | 
			
		||||
    """
 | 
			
		||||
    print(len(all_results))
 | 
			
		||||
    fig, axes = plt.subplots(int(np.ceil(len(all_results) / 2)), 2)
 | 
			
		||||
    for i, (estimates, text) in enumerate(all_results):
 | 
			
		||||
        ax = axes[i]
 | 
			
		||||
| 
						 | 
				
			
			@ -259,7 +261,7 @@ class Experiment:
 | 
			
		|||
        start_time = time.time()
 | 
			
		||||
 | 
			
		||||
        while index < self.max_loop_count:
 | 
			
		||||
            pose_array, keys = self.dataset_.next()
 | 
			
		||||
            pose_array, keys, is_ambiguous_loop = self.dataset_.next()
 | 
			
		||||
            if pose_array is None:
 | 
			
		||||
                break
 | 
			
		||||
            key_s = keys[0]
 | 
			
		||||
| 
						 | 
				
			
			@ -293,8 +295,14 @@ class Experiment:
 | 
			
		|||
                    self.initial_.atPose2(X(key_s)) * odom_pose)
 | 
			
		||||
            else:
 | 
			
		||||
                # Loop closure
 | 
			
		||||
                loop_factor = self.hybrid_loop_closure_factor(
 | 
			
		||||
                    loop_count, key_s, key_t, odom_pose)
 | 
			
		||||
                if is_ambiguous_loop:
 | 
			
		||||
                    loop_factor = self.hybrid_loop_closure_factor(
 | 
			
		||||
                        loop_count, key_s, key_t, odom_pose)
 | 
			
		||||
 | 
			
		||||
                else:
 | 
			
		||||
                    loop_factor = BetweenFactorPose2(X(key_s), X(key_t),
 | 
			
		||||
                                                     odom_pose,
 | 
			
		||||
                                                     pose_noise_model)
 | 
			
		||||
 | 
			
		||||
                # print loop closure event keys:
 | 
			
		||||
                print(f"Loop closure: {key_s} {key_t}")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue