All Projects → mpkuse → solve_keyframe_pose_graph

mpkuse / solve_keyframe_pose_graph

Licence: other
A kidnap-aware multi-threaded node to solve 6DOF posegraph slam. Needs poses at each node (subscribes to) and relative positions at edges. Maintains an optimized pose graph. Has support for recovery from kidnap

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects

Projects that are alternatives of or similar to solve keyframe pose graph

ros-vrep-slam
ROS and V-REP for Robot Mapping and Localization
Stars: ✭ 39 (-18.75%)
Mutual labels:  slam
roskinectic src
This ROS kinectic workspace src folder, which was created on Ubuntu 16.04. Here I worked on ROS1 projects like 2d & 3D SLAM, Motion Planning, SWARM of drone, RL based drone, Surveilling Robot etc.
Stars: ✭ 44 (-8.33%)
Mutual labels:  slam
pilotguru
Gather training data for training a self-driving car with just a smartphone.
Stars: ✭ 61 (+27.08%)
Mutual labels:  slam
zed-ros2-wrapper
ROS 2 wrapper beta for the ZED SDK
Stars: ✭ 61 (+27.08%)
Mutual labels:  slam
codac
Codac is a library for constraint programming over reals, trajectories and sets.
Stars: ✭ 31 (-35.42%)
Mutual labels:  slam
Tonic
An autonomous vehicle written in python
Stars: ✭ 85 (+77.08%)
Mutual labels:  slam
ndtpso slam
ROS package for NDT-PSO, a 2D Laser scan matching algorithm for SLAM
Stars: ✭ 32 (-33.33%)
Mutual labels:  slam
SLAM Qt
My small SLAM simulator to study "SLAM for dummies"
Stars: ✭ 47 (-2.08%)
Mutual labels:  slam
slamkit
SLAM Kit
Stars: ✭ 28 (-41.67%)
Mutual labels:  slam
PlacenoteSDK-Unity
Placenote SDK and sample app for Unity
Stars: ✭ 78 (+62.5%)
Mutual labels:  slam
GA SLAM
🚀 SLAM for autonomous planetary rovers with global localization
Stars: ✭ 40 (-16.67%)
Mutual labels:  slam
LVIO-SAM
A Multi-sensor Fusion Odometry via Smoothing and Mapping.
Stars: ✭ 143 (+197.92%)
Mutual labels:  slam
opensource slam noted
open source slam system notes
Stars: ✭ 119 (+147.92%)
Mutual labels:  slam
the-Cooper-Mapper
An open source autonomous driving research platform for Active SLAM & Multisensor Data Fusion
Stars: ✭ 38 (-20.83%)
Mutual labels:  slam
Awesome-SLAM
A curated list of SLAM resources
Stars: ✭ 434 (+804.17%)
Mutual labels:  slam
RGBD-Slam-Semantic-Seg-DeepLab
The package is common Slam combined with DeepLab-V2-CRF Library.
Stars: ✭ 61 (+27.08%)
Mutual labels:  slam
efficient-descriptors
🚀🚀 Revisiting Binary Local Image Description for Resource Limited Devices
Stars: ✭ 76 (+58.33%)
Mutual labels:  slam
HybVIO
HybVIO visual-inertial odometry and SLAM system
Stars: ✭ 261 (+443.75%)
Mutual labels:  slam
wpr simulation
No description or website provided.
Stars: ✭ 24 (-50%)
Mutual labels:  slam
PoseGraph-Ceres
An offline tool for pose-graph-optimization.
Stars: ✭ 57 (+18.75%)
Mutual labels:  slam

Multithreaded Node for pose graph optimization.

This node actually builds up the graph of poses incrementally using odometry edges (from VIO like VINS-fusion ) and loopclosure edges (from place recognition node like cerebro ). It also can handle kidnap and random failure. This is accomplished by keeping track of multiple co-ordinate systems and relative poses between the co-ordinate system. Finally whenever new loopclosure edges are available, the pose graph is solved. The switching constraint formulation 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.

To get a simplistic theoritical understanding of the pose graph solver, I suggest to look at this : HERE

This is intended to be run with Cerebro and VINS-Fusion.

Defines 2 classes

NodeDataManager:

This class holds all the data. Including node data and critical edge data. Later on can have more data if need be. Crititcal data include: i) VIO poses at each keyframes. ii) Edge poses.

PoseGraphSLAM:

This class holds the pointer to an object of class NodeDataManager. All the functions related to ceres-solver here. It is intended to be run in a separate thread. The thread triggers on seeing new loopedges. On trigger it does:

  1. Allocate new opt variables (if need be)
  2. Add Loop Edges Residue Term to Ceres::Problem
    • Loop Edges (intra world)
    • Loop edges (inter world)
      • Compute Pose between the worlds if 1st loop connection between the worlds.
  3. Add Odometry Residues to Ceres::Problem
  4. Initial Guesses for the nodes
  5. Mark 1st nodes of each worlds as constant with Node Regularization
  6. ceres::Solve()

main (keyframe_pose_graph_slam_node.cpp)

This contains the main. It calls a visualization publisher in 1 thread. In another thread PoseGraphSLAM::reinit_ceres_problem_onnewloopedge_optimize6DOF() is called. The main thread handles the ros-callback. Subscribes to /vins_estimator/camera_pose and /cerebro/loopedge. It publishes the corrected pose as Ros Visualization Marker.

The visualization marker is a LINE_STRIP at all pose. Different colors of the trajectory denote different co-ordinate systems.

Dependencies

  • ceres-solver
  • Eigen3
  • OpenCV 3 (only used for visualization)
  • Cerebro pkg (for definations of LoopEdgeMsg)

Compile and Run

cd catkin_ws/src
git clone https://github.com/mpkuse/solve_keyframe_pose_graph
cd catkin_ws
catkin_make

rosrun solve_keyframe_pose_graph keyframe_pose_graph_slam

Author

Manohar Kuse [email protected]

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].