Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00040 #include <graph_slam/constraints/odom.h>
00041 #include <pose_graph/transforms.h>
00042 #include <pose_graph/utils.h>
00043
00044 namespace graph_slam
00045 {
00046
00047 using graph_slam::GraphLocalization;
00048 using pg::contains;
00049 namespace pg=pose_graph;
00050 using Eigen3::Affine3d;
00051
00052 void OdomConstraintGenerator::initializeFromGraph (const pg::PoseGraph& g, const std::vector<pg::NodeId>& node_sequence)
00053 {
00054 if (node_sequence.size() > 0)
00055 last_node_ = *(--node_sequence.end());
00056 }
00057
00058 void OdomConstraintGenerator::updateLocalization (const GraphLocalization& loc)
00059 {
00060 ROS_ASSERT_MSG(false, "Not implemented!");
00061 }
00062
00063 NodeConstraintVector OdomConstraintGenerator::getConstraints (const pg::PoseGraph& graph,
00064 const pg::NodeId new_node,
00065 const NodePoseMap& optimized_poses)
00066 {
00067 NodeConstraintVector constraints;
00068
00069 if (last_node_) {
00070 if (!contains(graph.neighbors(new_node), *last_node_)) {
00071 const Affine3d rel_transform = pg::relativeTransform(graph.getInitialPoseEstimate(new_node),
00072 graph.getInitialPoseEstimate(*last_node_));
00073
00074 pg::PoseConstraint constraint = pg::makeConstraint(rel_transform, pg::makePrecisionMatrix(1, 1, 1));
00075 constraints.push_back(NodeConstraint(*last_node_, constraint));
00076 ROS_DEBUG_STREAM_NAMED ("odom_constraint_generator", "Adding constraint from " << *last_node_
00077 << " to " << new_node << " : " << constraint);
00078 }
00079 else {
00080 ROS_DEBUG_STREAM_NAMED ("odom_constraint_generator", "Not adding odom constraint between " << new_node <<
00081 " and " << *last_node_ << " as there's already a constraint");
00082 }
00083 }
00084 else {
00085 ROS_DEBUG_NAMED ("odom_constraint_generator", "Not adding odom constraint for %lu as it's the first node",
00086 new_node.getId());
00087 }
00088 last_node_ = new_node;
00089 return constraints;
00090 }
00091
00092 }
00093
00094