{"id":13528499,"url":"https://github.com/lrse/sptam","last_synced_at":"2026-02-02T03:04:53.305Z","repository":{"id":140109936,"uuid":"42000477","full_name":"lrse/sptam","owner":"lrse","description":"S-PTAM: Stereo Parallel Tracking and Mapping","archived":false,"fork":false,"pushed_at":"2020-05-14T08:16:29.000Z","size":418,"stargazers_count":363,"open_issues_count":0,"forks_count":137,"subscribers_count":23,"default_branch":"master","last_synced_at":"2024-11-02T14:35:42.989Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lrse.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2015-09-06T11:40:29.000Z","updated_at":"2024-09-23T03:49:19.000Z","dependencies_parsed_at":null,"dependency_job_id":"cbd8ca44-2300-4f5f-8c04-cf16b331fd81","html_url":"https://github.com/lrse/sptam","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lrse%2Fsptam","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lrse%2Fsptam/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lrse%2Fsptam/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lrse%2Fsptam/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lrse","download_url":"https://codeload.github.com/lrse/sptam/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246647768,"owners_count":20811384,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T07:00:20.271Z","updated_at":"2026-02-02T03:04:53.279Z","avatar_url":"https://github.com/lrse.png","language":"C++","funding_links":[],"categories":["SLAM","2. Visual SLAM","C++"],"sub_categories":["Stereo","2.3 Stereo"],"readme":"S-PTAM is a Stereo SLAM system able to compute the camera trajectory in real-time. It heavily exploits the parallel nature of the SLAM problem, separating the time-constrained pose estimation from less pressing matters such as map building and refinement tasks. On the other hand, the stereo setting allows to reconstruct a metric 3D map for each frame of stereo images, improving the accuracy of the mapping process with respect to monocular SLAM and avoiding the well-known bootstrapping problem. Also, the real scale of the environment is an essential feature for robots which have to interact with their surrounding workspace.\n\n\u003ca href=\"http://www.youtube.com/watch?feature=player_embedded\u0026v=ojBB07JvDrY\n\" target=\"_blank\"\u003e\u003cimg src=\"http://img.youtube.com/vi/ojBB07JvDrY/0.jpg\" \nalt=\"IMAGE ALT TEXT HERE\" width=\"560\" height=\"315\" border=\"0\" /\u003e\u003c/a\u003e  \n(Click the image to redirect to S-PTAM video)\n\n## Related Publications:\n[1]  Taihú Pire,Thomas Fischer, Gastón Castro, Pablo De Cristóforis, Javier Civera and Julio Jacobo Berlles.\n**S-PTAM: Stereo Parallel Tracking and Mapping**\nRobotics and Autonomous Systems, 2017.\n\n\n[2] Taihú Pire, Thomas Fischer, Javier Civera, Pablo De Cristóforis and Julio Jacobo Berlles.  \n**Stereo Parallel Tracking and Mapping for Robot Localization**  \nProc. of The International Conference on Intelligent Robots and Systems (IROS), Hamburg, Germany, 2015.\n\n## Table of Contents\n  - [License](#license)\n  - [Disclaimer](#disclaimer)\n  - [Dependencies](#dependencies)\n    - [ROS](#ros)\n    - [ros-utils](#ros-utils)\n    - [g2o](#g2o)\n    - [Loop Closure Dependencies](#loop-closure-dependencies)\n      - [DLib](#dlib)\n      - [DBoW2](#dbow2)\n\t  - [DLoopDetector](#dloopdetector)\n      - [OpenGV](#opengv)\n  - [Installation](#installation)\n  - [ROS Package](#ros-package)\n    - [ROS Compilation](#ros-compilation)\n    - [Tutorials](#tutorials)\n      - [KITTI dataset](#kitti-dataset)\n      - [EuRoc MAV dataset](#euroc-mav-dataset)\n      - [MIT Stata Center dataset](#mit-stata-center-dataset)\n      - [Indoor Level 7 S-Block dataset](#indoor-level-7-s-block-dataset)\n    - [Node Information](#node-information)\n      - [Subscribed Topics](#subscribed-topics)\n      - [Published Topics](#published-topics)\n      - [ROS Parameters](#ros-parameters)\n      - [Involved Coordinates Systems](#involved-coordinates-systems)\n  - [CMAKE flags](#cmake-flags)\n  - [S-PTAM Parameters](#s-ptam-parameters)\n  - [Standalone](#standalone)\n    - [Compilation](#compilation)\n    - [Run](#run)\n\n# License\n\nS-PTAM is released under GPLv3 license.\n\nFor a closed-source version of S-PTAM for commercial purposes, please contact the authors.\n\nIf you use S-PTAM in an academic work, please cite:\n\n@article{pire2017sptam,  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  title = {{S-PTAM: Stereo Parallel Tracking and Mapping}},  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  author = {Pire, Taih{\\\\'u} and Fischer, Thomas and Castro, Gast{\\\\'o}n and De Crist{\\\\'o}foris, Pablo and Civera, Javier and Jacobo Berlles, Julio},  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  journal = {Robotics and Autonomous Systems (RAS)},  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  volume = {93},  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  pages = {27 -- 42},  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  year = {2017},  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  issn = {0921-8890},  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  doi = {10.1016/j.robot.2017.03.019}  \n}\n\n@inproceedings{pire2015sptam,  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  title={{Stereo Parallel Tracking and Mapping for robot localization}},  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  author={Pire, Taih{\\\\'u} and Fischer, Thomas and Civera, Javier and De Crist{\\\\'o}foris, Pablo and Jacobo berlles, Julio},  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  booktitle={Proc. of the International Conference on Intelligent Robots and Systems (IROS)},   \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  pages = {1373--1378},  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  year={2015},  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  month = {September},  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  doi = {10.1109/IROS.2015.7353546}  \n }\n\n# Disclaimer\nThis site and the code provided here are under active development. Even though we try to only release working high quality code, this version might still contain some issues. Please use it with caution.\n\n# Dependencies\n\n## ROS\n\nWe have tested S-PTAM in Ubuntu 16.04 with ROS Kinetic.\n\nTo install ROS (Kinetic) use the following command:\n\n`sudo apt-get install ros-kinetic-desktop`\n\n## SuiteSparse\n\nSuitespare is a dependency, so it needs to be installed\n\n`sudo apt-get install libsuitesparse-dev`\n\n## ros-utils\n\nInstall our [ros-utils](https://github.com/lrse/ros-utils) library from the source code provided in  \n\n`git clone git@github.com:lrse/ros-utils.git`\n\n## g2o\n\nInstall [g2o](https://github.com/RainerKuemmerle/g2o) library from the source code provided in  \n\n`git clone git@github.com:RainerKuemmerle/g2o.git`\n\nTested until commit [4b9c2f5b68d14ad479457b18c5a2a0bce1541a90](https://github.com/RainerKuemmerle/g2o/commit/4b9c2f5b68d14ad479457b18c5a2a0bce1541a90)\n\n`git checkout 4b9c2f5b68d14ad479457b18c5a2a0bce1541a90`\n\n```\nmkdir build \u0026\u0026 cd build\ncmake ..\nmake \nsudo make install\n```\n\n## Loop Closure dependencies\n\nOnly required when USE_LOOPCLOSURE flag is defined. \n\nDBoW2 vocabularies\nare available through a git submodule at the bow_voc directory\n\n`git submodule update --init --recursive`\n\n\n### DLib\n\nInstall [DLib](https://github.com/dorian3d/DLib) library from source code\n\n`git clone git@github.com:dorian3d/DLib.git`\n\nTested until commit [70089a38056e8aebd5a2ebacbcb67d3751433f32](https://github.com/dorian3d/DLib/commit/70089a38056e8aebd5a2ebacbcb67d3751433f32)\n\n`git checkout 70089a38056e8aebd5a2ebacbcb67d3751433f32`\n\n\n### DBoW2\n\nInstall [DBoW2](https://github.com/dorian3d/DBoW2) library from source code\n\n`git clone git@github.com:dorian3d/DBoW2.git`\n\nTested until commit [82401cad2cfe7aa28ee6f6afb01ce3ffa0f59b44](https://github.com/dorian3d/DBoW2/commit/82401cad2cfe7aa28ee6f6afb01ce3ffa0f59b44)\n\n`git checkout 82401cad2cfe7aa28ee6f6afb01ce3ffa0f59b44`\n\n### DLoopDetector\n\nInstall [DLoopDetector](https://github.com/dorian3d/DLoopDetector) library from source code\n\n`git clone git@github.com:dorian3d/DLoopDetector.git`\n\nTested until commit [8e62f8ae84d583d9ab67796f779272b0850571ce](https://github.com/dorian3d/DLoopDetector/commit/8e62f8ae84d583d9ab67796f779272b0850571ce)\n\n`git checkout 8e62f8ae84d583d9ab67796f779272b0850571ce`\n\n\n\n## OpenGV\n\nInstall [OpenGV](https://github.com/laurentkneip/opengv) library from source code\n\n`git clone git@github.com:laurentkneip/opengv.git`\n\nTested until commit [2e2d21917fd2fb75f2134e6d5be7a2536cbc7eb1](https://github.com/laurentkneip/opengv/commit/2e2d21917fd2fb75f2134e6d5be7a2536cbc7eb1)\n\n`git checkout 2e2d21917fd2fb75f2134e6d5be7a2536cbc7eb1`\n\n# Installation\n\n`git clone git@github.com:lrse/sptam.git`\n\n# ROS Package\n\n## ROS Compilation\n\n`catkin_make --pkg sptam -DCMAKE_BUILD_TYPE=RelWithDebInfo -DSINGLE_THREAD=OFF -DSHOW_TRACKED_FRAMES=ON -DSHOW_PROFILING=ON -DPARALLELIZE=ON`\n\nTo activate Loop Closing capabilities (requires DBoW2 and OpenGV dependencies).\n\n`catkin_make --pkg sptam -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUSE_LOOPCLOSURE=ON -DSINGLE_THREAD=OFF -DSHOW_TRACKED_FRAMES=ON -DSHOW_PROFILING=ON -DPARALLELIZE=ON`\n\nFor more information about compilation flags see [CMAKE flags](#cmakeFlags) section.\n\n## Tutorials\n\nWe provide some examples of how to run S-PTAM with the most popular stereo datasets\n\n### KITTI dataset\n\n1. Download the KITTI rosbag [kitti_00.bag](http://fs01.cifasis-conicet.gov.ar:90/~pire/datasets/KITTI/bags/kitti_00.bag) provided in   [KITTI rosbag files](http://fs01.cifasis-conicet.gov.ar:90/~pire/datasets/KITTI/bags/)  \n\n2. Uncompress the dataset  \n\n\t`rosbag decompress kitti_00.bag`  \n\n3. Set `use_sim_time` ros variable `true`  \n\n    `rosparam set use_sim_time true`  \n\n4.  Play the dataset  \n\n\t`rosbag play --clock kitti_00.bag`  \n\t\n\t(When S-PTAM run with the flag SHOW_TRACKED_FRAMES=ON the performance is reduced notoriusly).\n5. Run sptam using the kitti.launch  \n\n    `roslaunch sptam kitti.launch`  \n\n### EuRoc MAV dataset\n\n1. Download the EuRoc rosbag [Machine Hall 01](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_01_easy/MH_01_easy.bag) provided in   [EuRoc MAV Web Page](http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets)  \n\n2. Add left and right camera_info messages in the rosbag\n\n   In S-PTAM package we provide a script `euroc_add_camera_info.py` to add left and right [sensor\\_msgs/CameraInfo](http://docs.ros.org/api/sensor_msgs/html/msg/CameraInfo.html) messages to the EuRoc MAV rosbags.  \n\n    `python sptam_directory/scripts/euroc_add_camera_info.py MH_01_easy.bag /mav0/cam0/sensor.yaml /mav0/cam1/sensor.yaml`\n  \n\n3. Set `use_sim_time` ros variable `true`  \n\n    `rosparam set use_sim_time true`  \n\n4.  Play the dataset  \n\n\t`rosbag play --clock MH_01_easy_with_camera_info.bag -s 50`  \n\t \n5. Run sptam using the euroc.launch  \n\n    `roslaunch sptam euroc.launch`  \n\n### MIT Stata Center dataset\n\n1. Download the MIT Stata Center rosbag [2012-01-27-07-37-01.bag](http://infinity.csail.mit.edu/data/2012/2012-01-27-07-37-01.bag) provided in   [MIT Stata Center Web Page](http://projects.csail.mit.edu/stata/downloads.php)  \n\n2. Set use_sim_time ros variable true  \n\n    `rosparam set use_sim_time true`  \n\n3.  Play the dataset  \n\n\t`rosbag play --clock 2012-01-27-07-37-01.bag -s 302.5 -u 87`  \n\t \n\t(Here we are running the [part 3 of the sequence](http://infinity.csail.mit.edu/data/2012/utilities/2012-01-27-07-37-01) where ground-truth was provided that is why the bag file start from a different timestamp)\n\n4. Run sptam using the mit.launch  \n\n    `roslaunch sptam mit.launch`  \n\n\n### Indoor Level 7 S-Block dataset\n\n1. Download the Level7 rosbag [level07_20_05_12_trunc.bag (3747 Frame Subset)](https://wiki.qut.edu.au/display/cyphy/Indoor+Level+7+S-Block+Dataset) provided in [Indoor Level 7 S-Block Dataset Web Page](https://wiki.qut.edu.au/display/cyphy/Indoor+Level+7+S-Block+Dataset)  \n\n2. Set `use_sim_time` ros variable `true`  \n\n    `rosparam set use_sim_time true`  \n\n3.  Play the dataset  \n\n\t`rosbag play --clock level7_truncated.bag`  \n\t \n\n4. Run sptam using the level7.launch  \n\n    `roslaunch sptam level7.launch`  \n\n\n## Node Information\n\n### Subscribed Topics\n\nCamera topics should provide undistorted and stereo-rectified images. Consider using the [image_proc](http://wiki.ros.org/stereo_image_proc) node.\n\n/stereo/left/image\\_rect ([sensor\\_msgs/Image](http://docs.ros.org/api/sensor_msgs/html/msg/Image.html))  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nUndistorted and stereo-rectified image stream from the left camera.\n\n/stereo/left/camera\\_info ([sensor\\_msgs/CameraInfo](http://docs.ros.org/api/sensor_msgs/html/msg/CameraInfo.html))  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nLeft camera metadata.\n\n/stereo/right/image\\_rect ([sensor\\_msgs/Image](http://docs.ros.org/api/sensor_msgs/html/msg/Image.html))  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nUndistorted and stereo-rectified image stream from the right camera.\n\n/stereo/right/camera\\_info ([sensor\\_msgs/CameraInfo](http://docs.ros.org/api/sensor_msgs/html/msg/CameraInfo.html))  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nRight camera metadata.\n\n### Published Topics\n\nglobal_map ([sensor\\_msgs/PointCloud2](http://docs.ros.org/api/sensor_msgs/html/msg/PointCloud2.html))  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nGlobal sparse mapped point cloud used for tracking.  \n\nlocal_map ([sensor\\_msgs/PointCloud2](http://docs.ros.org/api/sensor_msgs/html/msg/PointCloud2.html))  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nLocal map which contains points that are highly probable to be observed by the current camera.\n\ntracked_map ([sensor\\_msgs/PointCloud2](http://docs.ros.org/api/sensor_msgs/html/msg/PointCloud2.html))  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nPoints tracked by the current camera.\n\nkeyframes ([nav_msgs/Path](http://docs.ros.org/api/nav_msgs/html/msg/Path.html))  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nAll the keyframes generated along the whole trajectory.\n\nlocal_keyframes ([nav_msgs/Path](http://docs.ros.org/api/nav_msgs/html/msg/Path.html))  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nKeyframes used to obtain the local map (local_map).\n\ncamera_pose ([geometry\\_msgs::PoseWithCovarianceStamped](http://docs.ros.org/kinetic/api/geometry_msgs/html/msg/PoseWithCovarianceStamped.html))  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nCurrent camera pose computed after tracking.\n\n\u003c!--\npath ([nav\\_msgs/Path](http://docs.ros.org/api/nav_msgs/html/msg/Path.html))  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nPath navigated by the robot, following the poses computed by the tracker.\n--\u003e\n\n### ROS Parameters\n\n~use\\_prediction (bool, default: false)  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nReplace decay velocity motion model by a pose prediction that will be read from the TF tree. If using this, please make sure you have also set the correct prediction\\_frame option.\n\n~approximate_sync: (bool, default: false)  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nWhether to use approximate synchronization for stereo frames. Set to true if the left and right Cameras do not produce identical synchronized timestamps for a matching pair of frames.\n\n~publish_transform: (bool, default: true)  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nWhether to publish the transformation associated to the newly computed camera pose to the TF tree.\n\n~publish_on_fail: (bool, default: false)  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nWhether to publish pose and tf updates when the tracking fails.\n\n~prediction\\_frame (string, default: \"odom\")  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nReference frame for predictions in the TF tree. If use\\_prediction option is enabled, some source outside of the S-PTAM node is required to publish the transformation between prediction\\_frame and camera\\_frame.\n\n~base\\_frame: (string, default: \"base\\_link\")  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nReference frame for the robot. This is the frame whose pose will be published on the /robot/pose topic and the TF tree (if tf publication is enabled).\n\n~camera\\_frame: (string, default: \"camera\")  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nReference frame for the left camera, used to get left camera pose from tf.\n\n~map\\_frame: (string, default: \"map\")  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nName for the published map frame.\n\n~reference\\_frame: (string, default: \"base_link\")  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nThis is the frame that the map frame will be aligned to when initializing S-PTAM. In other word, the initial pose of the reference\\_frame defines the map origin.\n\n### Involved Coordinates Systems\n\nExample of common used coordinate systems. Here, reference_frame follows the base_frame axis representation.\n\n\u003cimg src=\"sptam_coordinate_systems.png\" width=\"600\"\u003e\n\nThe camera correction computed by S-PTAM is applied between the map_frame and the base_frame (pink doted line).\n\n\u003cimg src=\"sptam_coordinate_systems_prediction.png\" width=\"600\"\u003e\n\nThe camera correction computed by S-PTAM is applied between the map_frame and the prediction_frame (pink doted line).\n\n# CMAKE flags\n\nSINGLE_THREAD=([ON|OFF], default: OFF)  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nMake to S-PTAM runs tracking and mapping tasks in single thread mode, this is, tracking and mapping runs in only one thread. This options could be useful for debugging. Set it OFF to improve S-PTAM performance.\n\nSHOW_TRACKED_FRAMES=([ON|OFF], default: OFF)  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nShow the tracked frames by S-PTAM. Set it OFF to improve S-PTAM performance.\n\nSHOW_PROFILING=([ON|OFF], default: OFF)  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nCreate a log file of S-PTAM. This log file can be used to depure S-PTAM. Set it OFF to improve S-PTAM performance.\n\nPARALLELIZE=([ON|OFF], default: ON)  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nMake to S-PTAM uses parallelize code when is possible. Set it ON to improve S-PTAM performance.\n\nUSE_LOOPCLOSURE=([ON|OFF], default: OFF)  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nActivates loop closing capabilities of S-PTAM. Requires DBoW2 and OpenGV dependencies. Set it OFF to use S-PTAM without loop detection.\n\n# S-PTAM Parameters\n\n~FeatureDetector/Name: (string, default: \"GFTT\")  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nFollows OpenCV convention.\n\n~DescriptorExtractor/Name: (string, default: \"BRIEF\")  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nFollows OpenCV convention.\n\n~DescriptorMatcher/Name: 'BruteForce-Hamming'  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nFollows OpenCV convention.\n\n~DescriptorMatcher/crossCheck: false  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nFollows OpenCV convention.\n\n~MatchingCellSize: (int, default: 15)  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nTo match the map points with images features, each frame is divided in squares cells of fixed size. MatchingCellSize define the size of each cell.\n\n~MatchingNeighborhood: (int, default: 2)  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Cells' neighborhood around the point.\n\n~MatchingDistance: (double, default: 25.0)  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nDescriptor distance. Use a non-fractional value when hamming distance is used. Use Fractional value when L1/L2 norm is used.\n\n~EpipolarDistance: (double, default: 0.0)  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nDistance in rows from the epipolar line used to find stereo matches.\n\n~FrustumNearPlaneDist: (double, default: 0.1)  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nFrustum (Field of View) near plane.\n\n~FrustumFarPlaneDist: (double, default: 1000.0)  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nFrustum (Field of View) far plane.\n\n~BundleAdjustmentActiveKeyframes: (int, default: 10)  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nNumber of keyframes to be adjusted by the local bundle adjustment (LBA) in the local mapping.\n\n~minimumTrackedPointsRatio: (int, default: 0.9)  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nRatio of tracked points that the current frame should have with respect to the closest keyframe to be selected as a keyframe used by the keyframe selection strategy.\n\n# Standalone\n\nIn `standalone` directory, we include an example of code that does not use ROS framework (but it still depends of some ROS libraries). It can be useful for debugging or for those who are not familiar with ROS.\n\n## Compilation\n\nOn `standalone` directory do:\n\n1. `mkdir build`\n\n2. `cd build`\n\n3. `cmake .. -DCMAKE_BUILD_TYPE=Release -DSHOW_TRACKED_FRAMES=ON -DUSE_LOOPCLOSURE=ON -DSHOW_PROFILING=ON`\n\n## Run\n\nDownload the KITTI gray scale stereo images from [KITTI dataset](http://www.cvlibs.net/datasets/kitti/eval_odometry.php)\n\n`./sptam-stereo ../../sptam/configurationFiles/kitti.yaml ../../sptam/configurationFiles/kitti_cam_00_to_02_13_to_21.yaml \u003cKITTI_dataset_path\u003e/00/image_0/ \u003cKITTI_dataset_path\u003e/00/image_1/ dir --timestamps \u003cKITTI_dataset_path\u003e/00/times.txt`\n\nNote: in order to use the Loop Closure module in standalone version, you must indicate the vocabulary location path in `kitti.yaml` configuration file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flrse%2Fsptam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flrse%2Fsptam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flrse%2Fsptam/lists"}