NASA Astrobee Robot Software  0.19.1
Flight software for the Astrobee robots operating inside the International Space Station.
simple_odometry.h
Go to the documentation of this file.
1 /* Copyright (c) 2017, United States Government, as represented
2  * by the Administrator of the National Aeronautics and Space
3  * Administration.
4  *
5  * All rights reserved.
6  *
7  * The Astrobee platform is licensed under the Apache License,
8  * Version 2.0 (the "License"); you may not use this file except
9  * in compliance with the License. You may obtain a copy of the
10  * License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
17  * either express or implied. See the License for the specific
18  * language governing permissions and limitations under the
19  * License.
20  */
21 
22 #ifndef TUTORIAL_EXAMPLES_SIMPLE_ODOMETRY_H_
23 #define TUTORIAL_EXAMPLES_SIMPLE_ODOMETRY_H_
24 
32 
33 namespace tutorial_examples {
34 // Simple Odometry that adds relative pose factors using
35 // relative pose measurements (for example, from matching
36 // successive sensor data) and adds pose, velocity, IMU bias
37 // nodes using IMU measurements. Uses a sliding window graph
38 // optimizer and Levenberg-Marquardt nonlinear optimization.
40  SlidingWindowGraphOptimizer {
41  public:
42  // Initialize and register the node and factor adders.
43  explicit SimpleOdometry(const SimpleOdometryParams& params)
44  : SlidingWindowGraphOptimizer(
46  std::make_unique<optimizers::NonlinearOptimizer>(
47  params.nonlinear_optimizer)) {
48  // Initialize node and factor adders
49  node_adder_ =
50  std::make_shared<node_adders::CombinedNavStateNodeAdder>(
52  params.combined_nav_state_node_adder_model, values());
53  factor_adder_ =
56  params.relative_pose_factor_adder, node_adder_);
57  // Register node and factor adders
58  AddSlidingWindowNodeAdder(node_adder_);
59  AddFactorAdder(factor_adder_);
60  }
61 
62  // Adds an IMU measurement to the combined nav state
63  // node adder.
66  measurement) {
67  node_adder_->AddMeasurement(measurement);
68  }
69 
70  // Adds relative pose measurement to the relative pose node
71  // adder. Assumes the pose is in the odometry frame.
74  RelativePoseWithCovarianceMeasurement& measurement) {
75  factor_adder_->AddMeasurement(measurement);
76  }
77 
78  // Const accessor for combined nav state nodes
79  // containing a pose, velocity, and IMU bias in each node.
81  return node_adder_->nodes();
82  }
83 
84  private:
87  factor_adder_;
88  std::shared_ptr<node_adders::CombinedNavStateNodeAdder>
89  node_adder_;
90 };
91 } // namespace tutorial_examples
92 
93 #endif // TUTORIAL_EXAMPLES_SIMPLE_ODOMETRY_H_
node_adders::MeasurementBasedTimestampedNodeAdder
Definition: measurement_based_timestamped_node_adder.h:30
nonlinear_optimizer.h
tutorial_examples::SimpleOdometry
Definition: simple_odometry.h:39
localization_measurements::ImuMeasurement
Definition: imu_measurement.h:30
tutorial_examples::SimpleOdometry::AddRelativePoseMeasurement
void AddRelativePoseMeasurement(const localization_measurements::RelativePoseWithCovarianceMeasurement &measurement)
Definition: simple_odometry.h:72
tutorial_examples::SimpleOdometryParams::combined_nav_state_node_adder_model
node_adders::CombinedNavStateNodeAdderModel::Params combined_nav_state_node_adder_model
Definition: simple_odometry_params.h:88
relative_pose_factor_adder.h
simple_odometry_params.h
sliding_window_graph_optimizer.h
optimizers
Definition: isam2_optimizer.h:33
tutorial_examples::SimpleOdometryParams::combined_nav_state_node_adder
node_adders::TimestampedNodeAdderParams< localization_common::CombinedNavState > combined_nav_state_node_adder
Definition: simple_odometry_params.h:86
nodes::CombinedNavStateNodes
Definition: combined_nav_state_nodes.h:25
tutorial_examples::SimpleOdometry::timestamped_nodes
const nodes::CombinedNavStateNodes & timestamped_nodes() const
Definition: simple_odometry.h:80
combined_nav_state_node_adder.h
sliding_window_graph_optimizer
Definition: sliding_window_graph_optimizer.h:32
tutorial_examples::SimpleOdometry::SimpleOdometry
SimpleOdometry(const SimpleOdometryParams &params)
Definition: simple_odometry.h:43
localization_measurements
Definition: depth_correspondences.h:25
factor_adders::RelativePoseFactorAdder
Definition: relative_pose_factor_adder.h:33
tutorial_examples
Definition: simple_localizer.h:32
tutorial_examples::SimpleOdometry::AddImuMeasurement
void AddImuMeasurement(const localization_measurements::ImuMeasurement &measurement)
Definition: simple_odometry.h:64
std
Definition: tensor.h:39
relative_pose_with_covariance_measurement.h
imu_measurement.h
tutorial_examples::SimpleOdometryParams
Definition: simple_odometry_params.h:33
tutorial_examples::SimpleOdometryParams::relative_pose_factor_adder
factor_adders::RelativePoseFactorAdderParams relative_pose_factor_adder
Definition: simple_odometry_params.h:83