Allow continuing after running a "final" optimization. (#109)
And a tiny cleanup of the submap visualization query.master
							parent
							
								
									a33bddd4cd
								
							
						
					
					
						commit
						a5b81ff159
					
				| 
						 | 
				
			
			@ -34,15 +34,12 @@ message SubmapList {
 | 
			
		|||
message SubmapQuery {
 | 
			
		||||
  message Request {
 | 
			
		||||
    // Index into 'SubmapList.trajectory(trajectory_id).submap'.
 | 
			
		||||
    optional int32 submap_id = 1;
 | 
			
		||||
    optional int32 submap_index = 1;
 | 
			
		||||
    // Index into 'TrajectoryList.trajectory'.
 | 
			
		||||
    optional int32 trajectory_id = 2;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  message Response {
 | 
			
		||||
    // ID of the Submap.
 | 
			
		||||
    optional int32 submap_id = 1;
 | 
			
		||||
 | 
			
		||||
    // Version of the given submap, higher means newer.
 | 
			
		||||
    optional int32 submap_version = 2;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -310,6 +310,10 @@ void SparsePoseGraph::RunFinalOptimization() {
 | 
			
		|||
  optimization_problem_.SetMaxNumIterations(
 | 
			
		||||
      options_.max_num_final_iterations());
 | 
			
		||||
  RunOptimization();
 | 
			
		||||
  optimization_problem_.SetMaxNumIterations(
 | 
			
		||||
      options_.optimization_problem_options()
 | 
			
		||||
          .ceres_solver_options()
 | 
			
		||||
          .max_num_iterations());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SparsePoseGraph::RunOptimization() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -311,6 +311,10 @@ void SparsePoseGraph::RunFinalOptimization() {
 | 
			
		|||
  optimization_problem_.SetMaxNumIterations(
 | 
			
		||||
      options_.max_num_final_iterations());
 | 
			
		||||
  RunOptimization();
 | 
			
		||||
  optimization_problem_.SetMaxNumIterations(
 | 
			
		||||
      options_.optimization_problem_options()
 | 
			
		||||
          .ceres_solver_options()
 | 
			
		||||
          .max_num_iterations());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SparsePoseGraph::RunOptimization() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,9 +75,7 @@ class Collator {
 | 
			
		|||
 | 
			
		||||
  // Dispatches all queued sensor packets. May only be called once.
 | 
			
		||||
  // AddSensorData may not be called after Flush.
 | 
			
		||||
  void Flush() {
 | 
			
		||||
    queue_.Flush();
 | 
			
		||||
  }
 | 
			
		||||
  void Flush() { queue_.Flush(); }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  // Queue keys are a pair of trajectory ID and sensor identifier.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,8 +50,10 @@ inline std::ostream& operator<<(std::ostream& out, const QueueKey& key) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
// Maintains multiple queues of sorted sensor data and dispatches it in merge
 | 
			
		||||
// sorted order. It will wait to see at least one value for each unfinished queue before
 | 
			
		||||
// dispatching the next time ordered value across all queues. This class is thread-compatible.
 | 
			
		||||
// sorted order. It will wait to see at least one value for each unfinished
 | 
			
		||||
// queue before dispatching the next time ordered value across all queues.
 | 
			
		||||
//
 | 
			
		||||
// This class is thread-compatible.
 | 
			
		||||
class OrderedMultiQueue {
 | 
			
		||||
 public:
 | 
			
		||||
  using Callback = std::function<void(std::unique_ptr<Data>)>;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,5 +79,5 @@ SPARSE_POSE_GRAPH = {
 | 
			
		|||
    },
 | 
			
		||||
  },
 | 
			
		||||
  max_num_final_iterations = 200,
 | 
			
		||||
  global_sampling_ratio = 0.01,
 | 
			
		||||
  global_sampling_ratio = 0.003,
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,7 +14,6 @@
 | 
			
		|||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
"""A dumb CMakeLists.txt generator that relies on source name conventions."""
 | 
			
		||||
 | 
			
		||||
from os import path
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue