You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This node actually builds up the graph of poses along with odometry edges and loop closure edges.
4
-
To get a theoritical understanding of the process, I suggest to look at this : [HERE](https://kusemanohar.wordpress.com/2017/04/29/howto-pose-graph-bundle-adjustment/)
3
+
This node actually builds up the graph of poses incrementally using odometry edges and loopclosure edges.
4
+
It also can handle kidnap and random failure. This is accomplished by keeping track of multiple
5
+
co-ordinate systems and relative poses between the co-ordinate system. Finally whenever new loopclosure
6
+
edges are available, the pose graph is solved. The switching constraint formulation
7
+
as detailed in *Sünderhauf N, Protzel P. Switchable constraints for robust pose graph SLAM. In2012 IEEE/RSJ International Conference on Intelligent Robots and Systems 2012 Oct 7 (pp. 1879-1884). IEEE.* is used.
8
+
9
+
To get a simplistic theoritical understanding of the pose graph solver, I suggest to look at this : [HERE](https://kusemanohar.wordpress.com/2017/04/29/howto-pose-graph-bundle-adjustment/)
10
+
11
+
This is intended to be run with [Cerebro](https://github.com/mpkuse/cerebro) and VINS-Fusion.
5
12
6
13
Defines 2 classes
7
14
### NodeDataManager:
@@ -12,22 +19,43 @@ Crititcal data include: i) VIO poses at each keyframes. ii) Edge poses.
12
19
### PoseGraphSLAM:
13
20
This class holds the pointer to an object of class NodeDataManager.
14
21
All the functions related to ceres-solver here. It is intended to be run in a separate thread.
22
+
The thread triggers on seeing new loopedges. On trigger it does:
23
+
1. Allocate new opt variables (if need be)
24
+
- Add Loop Edges Residue Term to Ceres::Problem
25
+
- Loop Edges (intra world)
26
+
- Loop edges (inter world)
27
+
- Add Odometry Residues to Ceres::Problem
28
+
- Initial Guesses for the nodes
29
+
- Mark 1st nodes of each worlds as constant with Node Regularization
30
+
- ceres::Solve()
31
+
15
32
16
-
### main (keyframe_pose_graph_slam_node.cpp)
17
-
This contains the main. It calls a visualization publisher in 1 thread. In another thread PoseGraphSLAM->optimize6DOF() is called.
18
-
The main thread handles the call back. Subscribes to `camera_pose` and `colocation_chatter`. Publishes
19
-
a) visualization marker and b) path (only contains last 5 posestamped)
20
33
21
-
The visualization marker is a `LINE_STRIP` at all pose. The LINE_STRIP will be pink in color
22
-
to denote the poses have been processed by ceres::Solve(). Green colored lines means those poses
23
-
are purely odometry and have not yet been ceres::Solved()d.
34
+
### main (keyframe_pose_graph_slam_node.cpp)
35
+
This contains the main. It calls a visualization publisher in 1 thread. In another thread `PoseGraphSLAM::reinit_ceres_problem_onnewloopedge_optimize6DOF()` is called.
36
+
The main thread handles the ros-callback. Subscribes to `/vins_estimator/camera_pose` and `/cerebro/loopedge`.
37
+
It publishes the corrected pose as Ros Visualization Marker.
24
38
39
+
The visualization marker is a `LINE_STRIP` at all pose. Different colors of the trajectory denote
40
+
different co-ordinate systems.
25
41
26
42
## Dependencies
27
43
- ceres-solver
28
44
- Eigen3
29
45
- OpenCV 3 (only used for visualization)
30
46
-[Cerebro pkg](https://github.com/mpkuse/cerebro) (for definations of LoopEdgeMsg)
0 commit comments