Cartographer is a system that provides real-time simultaneous localization and mapping (SLAM) in 2D and 3D across multiple platforms and sensor configurations.

Overview

Cartographer

Build Status Documentation Status Apache 2 license.

Purpose

Cartographer is a system that provides real-time simultaneous localization and mapping (SLAM) in 2D and 3D across multiple platforms and sensor configurations.

Cartographer 3D SLAM Demo

Getting started

Contributing

You can find information about contributing to Cartographer at our Contribution page.

Open house slide archive

In the past there had been regular open-for-all meetings to discuss progress and plans for Cartographer. Slides of these Cartographer Open House meetings are listed below.

Comments
  • How can I tune the parameter to modify my own imu data?

    How can I tune the parameter to modify my own imu data?

    I used cartographer to build my map using 3d lidar data and imu data. Because of some reasons, my trajectory keep climbing while the programme run, but the real environment has little difference in Z direction. And I think my imu is not that reliable, how can I change the parameter to make the trajectory on the same level plane?

    Here is the constraint_list shown in my rviz: screenshot from 2017-08-07 16 39 03

    And here is my configuration file: configuration.zip

    One way I think may work is tuning the rotation_weight in ceres_scan_matcher, but I am not sure.

    opened by DriftingTimmy 35
  • Support for loading saved submaps and pose graph for long-term SLAM.

    Support for loading saved submaps and pose graph for long-term SLAM.

    Hi Authors and other Contributors Let me start by thanking you all for writing Cartographer and open-sourcing it. It adds immense value to the robotics society as it is probably the only SLAM algorithm as of now that is field-ready. Great job!

    I am using Cartographer with our in-house framework to create a solution for a long-term 2D mapping and localization. For the implementation to be truly long-term, I need to add the ability of being able to save the pose of the robot, sub-maps and the pose-graph(SPA) on shutdown and load them back into cartographer on subsequent startup of the software. I will be beginning my efforts on this very soon and was wondering if you guys have any thoughts, pointers to references or inputs before I begin. I would be more than happy to collaborate as suitable.

    Here's a quick brain dump of what I think needs to be done to accomplish this:

    • Serialization, saving, loading and construction of sub-maps in local trajectory builder(front-end) and sparse pose graph in global trajectory builder.

    • Saving and loading of robot pose(with covariance?) and instantiation of map builder with this pose as the starting point.

    • A global matching scheme to match the new scans to the loaded sub-maps in the vicinity(scaled based on covariance?) of the seed pose before cartographer resurrects and operates as normal. May be?

    • A strategy to appropriately kick-start the internal kalman filters. Not sure how the time-jump will affect those.

    • Swapping in new laser frames to replace stale frames in the pose-graph that are no longer representative of the environment. Also limiting the insertion of laser scans to situations when new area is being explored or when swapping out an stale scan . This will

      1. Avoid growth of pose-graph over course of time to an intractable number of constraints.
      2. Make the pose-graph adaptive to the long-term, slow changes in the environment.

    Please do share your thoughts that you think might help. I will be updating this post as I think of more items.

    Thanks

    -- Anurag

    opened by ajakhotia 28
  • can not build the cartographer in x86 ubuntu 14.04

    can not build the cartographer in x86 ubuntu 14.04

    error at: [245/327] Building CXX object cartogra...dir/fast_correlative_scan_matcher.cc.o FAILED: /usr/bin/c++ -O3 -DNDEBUG -isystem /usr/include/eigen3 -isystem /usr/local/include -I. -I.. -I../cartographer/common/{Boost_INCLUDE_DIRS} -isystem /usr/include/lua5.2 -O3 -DNDEBUG -std=c++11 -Wall -Wpedantic -Werror=format-security -Werror=return-type -Werror=uninitialized -MMD -MT cartographer/mapping_2d/scan_matching/CMakeFiles/mapping_2d_scan_matching_fast_correlative_scan_matcher.dir/fast_correlative_scan_matcher.cc.o -MF "cartographer/mapping_2d/scan_matching/CMakeFiles/mapping_2d_scan_matching_fast_correlative_scan_matcher.dir/fast_correlative_scan_matcher.cc.o.d" -o cartographer/mapping_2d/scan_matching/CMakeFiles/mapping_2d_scan_matching_fast_correlative_scan_matcher.dir/fast_correlative_scan_matcher.cc.o -c ../cartographer/mapping_2d/scan_matching/fast_correlative_scan_matcher.cc In file included from /opt/eigen/Eigen/Geometry:39:0, from /opt/eigen/Eigen/Dense:6, from /usr/local/include/ceres/internal/numeric_diff.h:40, from /usr/local/include/ceres/dynamic_numeric_diff_cost_function.h:70, from /usr/local/include/ceres/ceres.h:44, from ../cartographer/common/math.h:25, from ../cartographer/mapping_2d/probability_grid.h:28, from ../cartographer/mapping_2d/scan_matching/fast_correlative_scan_matcher.h:33, from ../cartographer/mapping_2d/scan_matching/fast_correlative_scan_matcher.cc:17: /opt/eigen/Eigen/src/Geometry/Rotation2D.h: In instantiation of ‘Eigen::Rotation2D Eigen::Rotation2D::operator_(const Eigen::Rotation2D&) const [with Scalar = double]’: ../cartographer/mapping_2d/scan_matching/fast_correlative_scan_matcher.cc:270:73: required from here /opt/eigen/Eigen/src/Geometry/Rotation2D.h:78:28: error: could not convert ‘(((Eigen::Rotation2D::Scalar)((const Eigen::Rotation2D)this)->Eigen::Rotation2D::m_angle) + ((Eigen::Rotation2D::Scalar)other.Eigen::Rotation2D::m_angle))’ from ‘Eigen::Rotation2D::Scalar {aka double}’ to ‘Eigen::Rotation2D’ { return m_angle + other.m_angle; } ^ [245/327] Building CXX object cartogra...eal_time_correlative_scan_matcher.cc.o FAILED: /usr/bin/c++ -O3 -DNDEBUG -isystem /usr/include/eigen3 -isystem /usr/local/include -I. -I.. -isystem /usr/include/lua5.2 -I../cartographer/common/{Boost_INCLUDE_DIRS} -O3 -DNDEBUG -std=c++11 -Wall -Wpedantic -Werror=format-security -Werror=return-type -Werror=uninitialized -MMD -MT cartographer/mapping_2d/scan_matching/CMakeFiles/mapping_2d_scan_matching_real_time_correlative_scan_matcher.dir/real_time_correlative_scan_matcher.cc.o -MF "cartographer/mapping_2d/scan_matching/CMakeFiles/mapping_2d_scan_matching_real_time_correlative_scan_matcher.dir/real_time_correlative_scan_matcher.cc.o.d" -o cartographer/mapping_2d/scan_matching/CMakeFiles/mapping_2d_scan_matching_real_time_correlative_scan_matcher.dir/real_time_correlative_scan_matcher.cc.o -c ../cartographer/mapping_2d/scan_matching/real_time_correlative_scan_matcher.cc In file included from /opt/eigen/Eigen/Geometry:39:0, from /opt/eigen/Eigen/Dense:6, from /usr/local/include/ceres/internal/numeric_diff.h:40, from /usr/local/include/ceres/dynamic_numeric_diff_cost_function.h:70, from /usr/local/include/ceres/ceres.h:44, from ../cartographer/common/math.h:25, from ../cartographer/mapping_2d/probability_grid.h:28, from ../cartographer/mapping_2d/scan_matching/real_time_correlative_scan_matcher.h:44, from ../cartographer/mapping_2d/scan_matching/real_time_correlative_scan_matcher.cc:17: /opt/eigen/Eigen/src/Geometry/Rotation2D.h: In instantiation of ‘Eigen::Rotation2D Eigen::Rotation2D::operator_(const Eigen::Rotation2D&) const [with Scalar = double]’: ../cartographer/mapping_2d/scan_matching/real_time_correlative_scan_matcher.cc:123:71: required from here /opt/eigen/Eigen/src/Geometry/Rotation2D.h:78:28: error: could not convert ‘(((Eigen::Rotation2D::Scalar)((const Eigen::Rotation2D)this)->Eigen::Rotation2D::m_angle) + ((Eigen::Rotation2D::Scalar)other.Eigen::Rotation2D::m_angle))’ from ‘Eigen::Rotation2D::Scalar {aka double}’ to ‘Eigen::Rotation2D’ { return m_angle + other.m_angle; } ^ [245/327] Building CXX object cartogra....dir/trajectory_connectivity_test.cc.o

    ninja: build stopped: subcommand failed.

    plz help~

    opened by gongyue666 27
  • Range data is no longer kept around

    Range data is no longer kept around

    In recent PRs (#503, #488), keeping range data in memory (in trajectory nodes) has been removed from libcartographer. Users of libcartographer who used this data (e.g for realtime map rebuilding as discussed in https://github.com/googlecartographer/cartographer_ros/issues/475, or to implement something like #415) are now out of luck.

    Would you consider bringing this back, for example as a configurable option (either runtime or compile time)? This way, if you require the range data, you can sacrifice some memory and keep it around; otherwise (and by default), behavior is like in the present implementation, with reduced memory usage. This would be the best of both worlds. Then, for example, the realtime map building functionality would depend on this option being enabled; otherwise, you have to use the assets writer, which would retrieve the range data from the bag.

    opened by ojura 24
  • Drastic decrease in quality after #499

    Drastic decrease in quality after #499

    This is using the same dataset as in #453, which was another regression that caused a drastic decrease in quality on that dataset.

    I did a git bisect:

    3948943b6491ad07dd4c6ba8e71cb4d03b27a5bf is the first bad commit
    commit 3948943b6491ad07dd4c6ba8e71cb4d03b27a5bf
    Author: Wolfgang Hess <[email protected]>
    Date:   Mon Sep 4 11:14:51 2017 +0200
    
        Use EstimateGravityOrientation() in 2D SLAM. (#499)
    

    Here's with e3b6f0a: e3b6f0a

    ...and with 3948943: 3948943

    Here is the updated pioneer-cartographer.lua (please use this one instead of the one in #453). Also, please use cartographer_ros with rangefinder decimation (if it doesn't get merged by the time you are reading this): googlecartographer/[email protected].

    opened by ojura 20
  • install error about gtest

    install error about gtest

    I'm installing cartographer_ros in ubuntu 14.04 and ROS indigo. gcc version is 4.8. Through the instruction of https://google-cartographer-ros.readthedocs.io/en/latest/ I build a ros-workspace named cartographer_ws(Cause I already have a workspace named catkin_ws) When I try to execute catkin_make_isolated --install --use-ninja

    I got output like that:

    ==> Processing catkin package: 'cartographer_ros'
    ==> Building with env: '/home/tyler/cartographer_ws/install_isolated/env.sh'
    ==> cmake /home/tyler/cartographer_ws/src/cartographer_ros/cartographer_ros -DCATKIN_DEVEL_PREFIX=/home/tyler/cartographer_ws/devel_isolated/cartographer_ros -DCMAKE_INSTALL_PREFIX=/home/tyler/cartographer_ws/install_isolated -G Ninja in '/home/tyler/cartographer_ws/build_isolated/cartographer_ros'
    -- Found required Ceres dependency: Eigen version 3.2.8 in /usr/local/include/eigen3
    -- Found required Ceres dependency: Glog in /usr/include
    -- Found Ceres version: 1.11.0 installed in: /home/tyler/cartographer_ws/install_isolated
    -- Build type: Release
    -- Using CATKIN_DEVEL_PREFIX: /home/tyler/cartographer_ws/devel_isolated/cartographer_ros
    -- Using CMAKE_PREFIX_PATH: /home/tyler/cartographer_ws/install_isolated;/opt/ros/indigo
    -- This workspace overlays: /home/tyler/cartographer_ws/install_isolated;/opt/ros/indigo
    -- Using PYTHON_EXECUTABLE: /usr/bin/python
    -- Using Debian Python package layout
    -- Using empy: /usr/bin/empy
    -- Using CATKIN_ENABLE_TESTING: ON
    -- Call enable_testing()
    -- Using CATKIN_TEST_RESULTS_DIR: /home/tyler/cartographer_ws/build_isolated/cartographer_ros/test_results
    -- Found gtest: gtests will be built
    CMake Error at /opt/ros/indigo/share/catkin/cmake/test/gtest.cmake:154 (add_library):
      add_library cannot create imported target "gtest" because another target
      with the same name already exists.
    Call Stack (most recent call first):
      /opt/ros/indigo/share/catkin/cmake/all.cmake:147 (include)
      /opt/ros/indigo/share/catkin/cmake/catkinConfig.cmake:20 (include)
      CMakeLists.txt:36 (find_package)
    
    
    CMake Error at /opt/ros/indigo/share/catkin/cmake/test/gtest.cmake:156 (add_library):
      add_library cannot create imported target "gtest_main" because another
      target with the same name already exists.
    Call Stack (most recent call first):
      /opt/ros/indigo/share/catkin/cmake/all.cmake:147 (include)
      /opt/ros/indigo/share/catkin/cmake/catkinConfig.cmake:20 (include)
      CMakeLists.txt:36 (find_package)
    
    
    -- Using Python nosetests: /usr/bin/nosetests-2.7
    -- catkin 0.6.18
    -- Using these message generators: gencpp;genlisp;genpy
    -- Boost version: 1.54.0
    -- Found the following Boost libraries:
    --   system
    --   filesystem
    --   thread
    --   date_time
    --   iostreams
    --   serialization
    --   chrono
    ** WARNING ** io features related to pcap will be disabled
    ** WARNING ** io features related to png will be disabled
    -- looking for PCL_COMMON
    -- looking for PCL_OCTREE
    -- looking for PCL_IO
    -- Boost version: 1.54.0
    -- Found the following Boost libraries:
    --   system
    --   iostreams
    -- Configuring incomplete, errors occurred!
    See also "/home/tyler/cartographer_ws/build_isolated/cartographer_ros/CMakeFiles/CMakeOutput.log".
    See also "/home/tyler/cartographer_ws/build_isolated/cartographer_ros/CMakeFiles/CMakeError.log".
    <== Failed to process package 'cartographer_ros': 
      Command '['/home/tyler/cartographer_ws/install_isolated/env.sh', 'cmake', '/home/tyler/cartographer_ws/src/cartographer_ros/cartographer_ros', '-DCATKIN_DEVEL_PREFIX=/home/tyler/cartographer_ws/devel_isolated/cartographer_ros', '-DCMAKE_INSTALL_PREFIX=/home/tyler/cartographer_ws/install_isolated', '-G', 'Ninja']' returned non-zero exit status 1
    
    Reproduce this error by running:
    ==> cd /home/tyler/cartographer_ws/build_isolated/cartographer_ros && /home/tyler/cartographer_ws/install_isolated/env.sh cmake /home/tyler/cartographer_ws/src/cartographer_ros/cartographer_ros -DCATKIN_DEVEL_PREFIX=/home/tyler/cartographer_ws/devel_isolated/cartographer_ros -DCMAKE_INSTALL_PREFIX=/home/tyler/cartographer_ws/install_isolated -G Ninja
    
    Command failed, exiting.
    

    When I directly install in in the catkin_ws, I got the same error.

    opened by onlytailei 20
  • 3D SLAM with rotating laser on a drone

    3D SLAM with rotating laser on a drone

    Hello,

    I already wrote a note on Cartographer group, where I explained the project that I am working on.

    I was curious if in the meanwhile there has been any progress on this topic.

    I looked at the demo: Taurob Tracker; it uses a rotating laser on a ground robot for localization and mapping. However, when I run the rosbag captured with the drone, using the same configuration of Taurob Tracker, the results are not as good as in the demo.

    The graphical results are reported in this video. The test has been executed in a University Lab indoor. What is weird to me is that the map is moving with the robot, while it should be static.

    There is anything that I am forgetting in the configuration file? Is anyone already working on 3D-SLAM with a drone using rotating 2D-LRF?

    Thank you.

    opened by andrecmilano 19
  • Residual Block Error

    Residual Block Error

    Started using the cartographer_turtlebot package in simulation, and I've been running into this error. It occurs after a random amount of time ranging from a few seconds after starting the cartographer_node to several minutes- the only changes I've made have been remapping a few topic names (mainly odometry and the laser scanner), removing a line launching turtlebot's minimal bringup and a line launching the urg_node (since I'm using my own version of turtlebot) and disabling the imu (changes have been across this file and this file). The file I've been launching from is here. The error I've been getting is shown below:

    [ WARN] [1491490574.176173648, 624.161000000]: W0406 10:56:14.000000  8798 residual_block.cc:131] 
    
    Error in evaluating the ResidualBlock.
    
    There are two possible reasons. Either the CostFunction did not evaluate and fill all    
    residual and jacobians that were requested or there was a non-finite value (nan/infinite)
    generated during the or jacobian computation. 
    
    Residual Block size: 1 parameter blocks x 184 residuals
    
    For each parameter block, the value of the parameters are printed in the first column   
    and the value of the jacobian under the corresponding residual. If a ParameterBlock was 
    held constant then the corresponding jacobian is printed as 'Not Computed'. If an entry 
    of the Jacobian/residual array was requested but was not written to by user code, it is 
    indicated by 'Uninitialized'. This is an error. Residuals or Jacobian values evaluating 
    to Inf or NaN is also an error.  
    
    Residuals:              nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan          nan 
    
    Parameter Block 0, size: 3
    
             nan |         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan 
             nan |         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan 
      -0.0744971 |         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan         -nan 
    
    
    CHOLMOD error: invalid xtype
    F0406 10:56:14.176298  8798 covariance_impl.cc:652] Check failed: 'permutation' Must be non NULL 
    [FATAL] [1491490574.176547018, 624.161000000]: F0406 10:56:14.000000  8798 covariance_impl.cc:652] Check failed: 'permutation' Must be non NULL 
    *** Check failure stack trace: ***
        @     0x7ffff7bb35cd  google::LogMessage::Fail()
        @     0x7ffff7bb5433  google::LogMessage::SendToLog()
        @     0x7ffff7bb315b  google::LogMessage::Flush()
        @     0x7ffff7bb5e1e  google::LogMessageFatal::~LogMessageFatal()
        @           0x6546e1  ceres::internal::CovarianceImpl::ComputeCovarianceValuesUsingSuiteSparseQR()
        @           0x65b0a5  ceres::internal::CovarianceImpl::ComputeCovarianceValues()
        @           0x65b22f  ceres::internal::CovarianceImpl::Compute()
        @           0x5a6918  cartographer::mapping_2d::scan_matching::CeresScanMatcher::Match()
        @           0x5ae390  cartographer::mapping_2d::LocalTrajectoryBuilder::ScanMatch()
        @           0x5ae94e  cartographer::mapping_2d::LocalTrajectoryBuilder::AddHorizontalRangeData()
        @           0x5acfbc  cartographer::mapping_2d::GlobalTrajectoryBuilder::AddRangefinderData()
        @           0x5377f9  cartographer::mapping::CollatedTrajectoryBuilder::HandleCollatedSensorData()
        @           0x53822e  _ZNSt17_Function_handlerIFvRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN12cartographer6sensor4DataESt14default_deleteISB_EEEZNS9_7mapping25CollatedTrajectoryBuilderC4EPNSA_8CollatorEiRKSt13unordered_setIS5_St4hashIS5_ESt8equal_toIS5_ESaIS5_EES8_INSG_32GlobalTrajectoryBuilderInterfaceESC_IST_EEEUlS7_SE_E_E9_M_invokeERKSt9_Any_dataS7_OSE_
        @           0x61327a  _ZNSt17_Function_handlerIFvSt10unique_ptrIN12cartograp9_Any_dataOS6_
        @           0x6171f9  cartographer::sensor::OrderedMultiQueue::Dispatch()
        @           0x61879f  cartographer::sensor::OrderedMultiQueue::Add()
        @           0x613574  cartographer::sensor::Collator::AddSensorData()
        @           0x536948  cartographer::mapping::CollatedTrajectoryBuilder::AddS
        @           0x509f5b  cartographer_ros::SensorBridge::HandleRangefinder()
        @           0x50ab9a  cartographer_ros::SensorBridge::HandleLaserScanMessage
        @           0x4efb2b  _ZN5boost6detail8function26void_function_obj_invoker1I
        @           0x4f6c4e  boost::detail::function::void_function_obj_invoker1<>:
        @           0x500e39  ros::SubscriptionCallbackHelperT<>::call()
        @     0x7ffff4d1c5cd  ros::SubscriptionQueue::call()
        @     0x7ffff4cc6cf0  ros::CallbackQueue::callOneCB()
        @     0x7ffff4cc80f3  ros::CallbackQueue::callAvailable()
        @     0x7ffff4d20691  ros::SingleThreadedSpinner::spin()
        @     0x7ffff4d0572b  ros::spin()
        @           0x4f0f6e  cartographer_ros::(anonymous namespace)::Run()
        @           0x4ed6a4  main
        @     0x7ffff371f830  __libc_start_main
        @           0x4ef129  _start
    
    Thread 1 "cartographer_no" received signal SIGABRT, Aborted.
    0x00007ffff3734428 in __GI_raise ([email protected]=6)
        at ../sysdeps/unix/sysv/linux/raise.c:54
    54      ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
    

    It's also worth noting that this error occurs regardless of if the robot stands still or moves- and while moving, does correctly generate a map. I've tested running the 2D Lidar Demo (listed here) with imu disabled and no other changes, in order to make sure the disabled imu wasn't causing the issue. It ran without error under those circumstances. I'm using Ubuntu 16.04 and ROS Kinetic.

    bug 
    opened by TrophyBuck 19
  • Ideal Sensor Suite for 3D Mapping and Localization

    Ideal Sensor Suite for 3D Mapping and Localization

    Thanks for this amazing package.

    We are planning to employ Google Cartographer for 3D mapping of outdoor large scale environments of few kilometers for self driving car localization and related applications.

    We are yet to buy the sensors and from your experience, which sensors and their configuration works best for cartographer ??

    1. Which IMUs should we prefer? Could you give us some specifications such as bias or error ?
    2. It was said that two velodyne 16's are a good choice and work out of the box. Can someone elaborate on this ? Is one Velodyne 32 is better than two Velo 16's ? What kind of configuration should be have ?(One at the front of the vehicle and other at back with tilted angles ?)

    3.It is said that we should constrain it in 6 DOF. Could you say, in which way do we miss the aspect of constraining if we use one Velo 16 and how does that get nullified when we use two Velo 16's.

    Thank you so much!

    opened by saimanoj18 18
  • If there is any one can help me with  this error

    If there is any one can help me with this error

    I compiled cartographer-master $cmake CMakeLists.txt when it comes out error infomation like: `- Build type: Release CMake Warning at /usr/share/cmake-3.5/Modules/FindBoost.cmake:725 (message): Imported targets not available for Boost version 106600 Call Stack (most recent call first): /usr/share/cmake-3.5/Modules/FindBoost.cmake:763 (_Boost_COMPONENT_DEPENDENCIES) /usr/share/cmake-3.5/Modules/FindBoost.cmake:1332 (_Boost_MISSING_DEPENDENCIES) CMakeLists.txt:31 (find_package)

    -- Boost version: 1.66.0 -- Found the following Boost libraries: -- iostreams -- Found installed version of Eigen: /usr/lib/cmake/eigen3 -- Found required Ceres dependency: Eigen version 3.2.92 in /usr/include/eigen3 -- Found required Ceres dependency: glog CMake Error at /usr/local/lib/cmake/Ceres/CeresConfig.cmake:88 (message): Failed to find Ceres - Missing requested Ceres components: [SuiteSparse] (components requested: [SuiteSparse]). Detected Ceres version: 1.14.0 installed in: /usr/local with components: [EigenSparse, SparseLinearAlgebraLibrary, SchurSpecializations, OpenMP, Multithreading]. Call Stack (most recent call first): /usr/local/lib/cmake/Ceres/CeresConfig.cmake:390 (ceres_report_not_found) CMakeLists.txt:32 (find_package)

    CMake Error at CMakeLists.txt:32 (find_package): Found package configuration file:

    /usr/local/lib/cmake/Ceres/CeresConfig.cmake
    

    but it set Ceres_FOUND to FALSE so package "Ceres" is considered to be NOT FOUND.

    -- Configuring incomplete, errors occurred! See also "/home/tby/cartographer-master/CMakeFiles/CMakeOutput.log". See also "/home/tby/cartographer-master/CMakeFiles/CMakeError.log". ` and I searched for this ,I found the Suitesparse problem is fixed under Debian , but not under Ubuntu. how could I solve this problem?

    opened by senses1 18
  • Non-sorted data assertion in ordered queue

    Non-sorted data assertion in ordered queue

    When I finish a trajectory and start a new one I could have: F0625 10:08:27.729404 30040 ordered_multi_queue.cc:112] Check failed: last_dispatched_time_ <= next_data->GetTime()

    In my case this is due to the following scenario:

    • start of cartographer with a trajectory
    • imu data at 1millisecond
    • odometry data at 1millisecond (common start time in ordered_multi_queue is then 1 millisecond)
    • odometry data at 3 milliseconds
    • finish trajectory
    • new trajectory
    • imu data a 2 milliseconds

    This can be reproduced by the following code:

    static std::unique_ptr<Data> MakeImu(const int ordinal) {
      return MakeDispatchable(sensor::ImuData{common::FromUniversal(ordinal),
                                              Eigen::Vector3d::Zero(),
                                              Eigen::Vector3d::Zero()});
    }
    
    static std::unique_ptr<Data> MakeOdometry(const int ordinal) {
      return MakeDispatchable(sensor::OdometryData{common::FromUniversal(ordinal),
                                                   transform::Rigid3d::Identity()});
    }
    
    TEST(OrderedMultiQueueTestOther, MarkQueueAsFinishedMultiple) {
      std::vector<std::unique_ptr<Data>> values;
      OrderedMultiQueue queue;
    
      const int trajectory1 = 1;
      const QueueKey imuTrajectory1{trajectory1, "imu"};
      const QueueKey odometryTrajectory1{trajectory1, "odometry"};
    
      const int trajectory2 = 2;
      const QueueKey imuTrajectory2{trajectory2, "imu"};
    
      const auto AddQueues = [&queue,&values](std::initializer_list<QueueKey> queueKeys) {
        for (const QueueKey& queueKey : queueKeys) {
          queue.AddQueue(queueKey, [&values](std::unique_ptr<Data> data) {
            if (!values.empty()) {
              EXPECT_GE(data->GetTime(), values.back()->GetTime());
            }
            values.push_back(std::move(data));
          });
        }
      };
    
      AddQueues({imuTrajectory1, odometryTrajectory1});
    
      queue.Add(imuTrajectory1, MakeImu(1));
      EXPECT_TRUE(values.empty());
      queue.Add(odometryTrajectory1, MakeOdometry(1));
      EXPECT_EQ(1, values.size());
      queue.MarkQueueAsFinished(imuTrajectory1);
      EXPECT_EQ(2, values.size());
      queue.Add(odometryTrajectory1, MakeOdometry(3));
      EXPECT_EQ(3, values.size());
      queue.MarkQueueAsFinished(odometryTrajectory1);
      EXPECT_EQ(3, values.size());
    
      AddQueues({imuTrajectory2});
      queue.Add(imuTrajectory2, MakeImu(2)); // Check failed: last_dispatched_time_ <= next_data->GetTime() (3 vs. 2) Non-sorted data added to queue: '(2, imu)'
    }
    

    I want to know if you consider it as a bug as if I do not finished the trajectory there is no assertion or if I should modify my code to handle this case.


    Edited to add functions to create imu and odometry data

    opened by damienrg 17
  • Sensor fusion of Lidar, Camera and IMU

    Sensor fusion of Lidar, Camera and IMU

    Hello,

    I want to sensor fuse Velodyne VLP-16 LiDAR, SICK Mono Camera and Vectornav IMU sensor data to generate 2D as well as 3D map (SLAM) in real-time with no ros bag. Any advice on how I can do this using cartographer?

    opened by ijklmnopqr 1
  • Flag --incompatible_disable_starlark_host_transitions will break Cartographer in Bazel 7.0

    Flag --incompatible_disable_starlark_host_transitions will break Cartographer in Bazel 7.0

    Incompatible flag --incompatible_disable_starlark_host_transitions will be enabled by default in the next major release (Bazel 7.0), thus breaking Cartographer. Please migrate to fix this and unblock the flip of this flag.

    The flag is documented here: bazelbuild/bazel#17032.

    Please check the following CI builds for build and test results:

    Never heard of incompatible flags before? We have documentation that explains everything. If you have any questions, please file an issue in https://github.com/bazelbuild/continuous-integration.

    opened by keertk 1
  • The scanned wall is not solid with pepperl_fuchs R2000

    The scanned wall is not solid with pepperl_fuchs R2000

    Hi guys, I had a problem. I used the radar of Pepperl_fuchs r2000, and the radar was not installed in the center of the vehicle body. When doing 2D slam, the wall was not solid and the border of the wall was gradually faded out.

    Has anyone encountered this problem? I found that if I set the radar to have no offset center in my urdf file, I would not have this problem. I have also done some tests likes, If the urdf of the demo "deutsches Museum" is offset by 1m, the scanned object is not completely solid. The following is the result of sweeping out the wall. Has anyone ever encountered this problem? image Relation of coordinates: parent link="base_link" child link="laser_link origin xyz="-0.393 0.3015 0.025" rpy="0 0 -3.1368926"

    opened by LaskerXCB 0
  • Workaround for misalignment of `SubmapSlice` and Eigen data structures in heterogeneous builds

    Workaround for misalignment of `SubmapSlice` and Eigen data structures in heterogeneous builds

    Due to different structure alignment rules in different compilers (or even the same compiler in different compiling contexts), the SubmapSlice structure defined in ./cartographer/io/submap_painter.h comes into cartographer_ros or another external project misaligned by 48 bytes because of different sizeof() return values (224 vs 256 bytes). This behaviour is proven when testing Cartographer compiled using Clang 15 and GCC 11.3 on Mint Linux 22 with a customized build of ROS. The reason is deeply sitting problem with implementation-defined STL shipped with different kernels and build pipelines. This pull request adds a semi-portable workaround for this issue forcing alignment of SubmapSlice structure to 32 bytes as is required by GCC.

    • Added a workaround for misaligned SubmapSlice structure between cartographer and cartographer_ros built using different compilers or compilation contexts
    • Rearranged SubmapSlice field order after static analysis performed with clangd
    • Added commented non-portable workaround with #pragma pack
    • Closes #1909
    opened by twdragon 2
  • Crash due to unexpected `free()` on `cairo_data`

    Crash due to unexpected `free()` on `cairo_data`

    I built Cartographer with Clang 15, activating Polly optimizer and C++17 for my own customized build of ROS1 for Ubuntu 22.04/Mint Linux. However, this build of Cartographer library crashes while working with Cairo submap slices. This issue exists due to unexpected calling free() on the content of the cairo_data field of SubmapSlice structure. Below is the GDB output:

    rosrun --prefix "gdb --args" cartographer_ros cartographer_pbstream_map_publisher -pbstream_filename /util/ros/jobot/map/map.pbstream
    GNU gdb (Ubuntu 12.1-0ubuntu1~22.04) 12.1
    Copyright (C) 2022 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    Type "show copying" and "show warranty" for details.
    This GDB was configured as "x86_64-linux-gnu".
    Type "show configuration" for configuration details.
    For bug reporting instructions, please see:
    <https://www.gnu.org/software/gdb/bugs/>.
    Find the GDB manual and other documentation resources online at:
        <http://www.gnu.org/software/gdb/documentation/>.
    
    For help, type "help".
    Type "apropos word" to search for commands related to "word"...
    Reading symbols from /home/twdragon/src/ros/install_ws/devel/lib/cartographer_ros/cartographer_pbstream_map_publisher...
    (gdb) run
    Starting program: /home/twdragon/src/ros/install_ws/devel/lib/cartographer_ros/cartographer_pbstream_map_publisher -pbstream_filename /util/ros/jobot/map/map.pbstream
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
    [New Thread 0x7fffeb56b640 (LWP 47457)]
    [New Thread 0x7fffead6a640 (LWP 47458)]
    [New Thread 0x7fffe2569640 (LWP 47459)]
    [New Thread 0x7fffd1d68640 (LWP 47460)]
    [New Thread 0x7fffc9567640 (LWP 47461)]
    [New Thread 0x7fffc8d66640 (LWP 47462)]
    [New Thread 0x7fffb8565640 (LWP 47463)]
    [New Thread 0x7fffaf4e1640 (LWP 47465)]
    [New Thread 0x7fffaece0640 (LWP 47466)]
    [New Thread 0x7fffae4df640 (LWP 47467)]
    [New Thread 0x7fffadcde640 (LWP 47468)]
    [ INFO] [1667920379.578857731]: I1108 16:12:59.000000 47453 pbstream_map_publisher_main.cc:51] Loading submap slices from serialized data.
    [ INFO] [1667920381.179558315]: I1108 16:13:01.000000 47453 pbstream_map_publisher_main.cc:59] Generating combined map image from submap slices.
    free(): invalid pointer
    
    Thread 1 "cartographer_pb" received signal SIGABRT, Aborted.
    __pthread_kill_implementation (no_tid=0, signo=6, threadid=140737141872192) at ./nptl/pthread_kill.c:44
    44	./nptl/pthread_kill.c: Нет такого файла или каталога.
    (gdb) where
    #0  __pthread_kill_implementation (no_tid=0, signo=6, threadid=140737141872192) at ./nptl/pthread_kill.c:44
    #1  __pthread_kill_internal (signo=6, threadid=140737141872192) at ./nptl/pthread_kill.c:78
    #2  __GI___pthread_kill (threadid=140737141872192, [email protected]=6) at ./nptl/pthread_kill.c:89
    #3  0x00007ffff26d5476 in __GI_raise ([email protected]=6) at ../sysdeps/posix/raise.c:26
    #4  0x00007ffff26bb7f3 in __GI_abort () at ./stdlib/abort.c:79
    #5  0x00007ffff271c6f6 in __libc_message ([email protected]=do_abort, [email protected]=0x7ffff286eb8c "%s\n") at ../sysdeps/posix/libc_fatal.c:155
    #6  0x00007ffff2733d7c in malloc_printerr ([email protected]=0x7ffff286c764 "free(): invalid pointer") at ./malloc/malloc.c:5664
    #7  0x00007ffff2735ac4 in _int_free (av=<optimized out>, p=<optimized out>, have_lock=0) at ./malloc/malloc.c:4439
    #8  0x00007ffff27384d3 in __GI___libc_free (mem=<optimized out>) at ./malloc/malloc.c:3391
    #9  0x000055555562fe9d in std::__new_allocator<unsigned int>::deallocate (this=0x55555609b9c0, __p=0x555557a6d000, __n=17293379248325154061)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/new_allocator.h:158
    #10 0x000055555562fe75 in std::allocator_traits<std::allocator<unsigned int> >::deallocate (__a=..., __p=0x555557a6d000, __n=17293379248325154061)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/alloc_traits.h:496
    #11 0x000055555562fe28 in std::_Vector_base<unsigned int, std::allocator<unsigned int> >::_M_deallocate (this=0x55555609b9c0, __p=0x555557a6d000, 
        __n=17293379248325154061) at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_vector.h:387
    #12 0x000055555562fd87 in std::_Vector_base<unsigned int, std::allocator<unsigned int> >::~_Vector_base (this=0x55555609b9c0)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_vector.h:366
    #13 0x000055555562fd06 in std::vector<unsigned int, std::allocator<unsigned int> >::~vector (this=0x55555609b9c0)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_vector.h:733
    #14 0x000055555562fcad in cartographer::io::SubmapSlice::~SubmapSlice (this=0x55555609b950) at /util/include/cartographer/io/submap_painter.h:42
    #15 0x000055555562fc89 in std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice>::~pair (this=0x55555609b930)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_iterator.h:2547
    #16 0x000055555562fc69 in std::__new_allocator<std::_Rb_tree_node<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > >::destroy<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > (this=0x7fffffffd2d8, __p=0x55555609b930)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/new_allocator.h:181
    #17 0x000055555562fc0d in std::allocator_traits<std::allocator<std::_Rb_tree_node<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > > >::destroy<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > (__a=..., __p=0x55555609b930)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/alloc_traits.h:535
    #18 0x000055555562fb9c in std::_Rb_tree<cartographer::mapping::SubmapId, std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice>, std::_Select1st<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> >, std::less<cartographer::mapping::SubmapId>, std::allocator<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > >::_M_destroy_node (this=0x7fffffffd2d8, __p=0x55555609b910)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:623
    #19 0x000055555562fb41 in std::_Rb_tree<cartographer::mapping::SubmapId, std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice>, std::_Select1st<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> >, std::less<cartographer::mapping::SubmapId>, std::allocator<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > >::_M_drop_node (this=0x7fffffffd2d8, __p=0x55555609b910)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:631
    #20 0x000055555562fa82 in std::_Rb_tree<cartographer::mapping::SubmapId, std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice>, std::_Select1st<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> >, std::less<cartographer::mapping::SubmapId>, std::allocator<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > >::_M_erase (this=0x7fffffffd2d8, __x=0x55555609b910)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:1937
    #21 0x000055555562fa68 in std::_Rb_tree<cartographer::mapping::SubmapId, std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice>, std::_Select1st<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> >, std::less<cartographer::mapping::SubmapId>, std::allocator<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > >::_M_erase (this=0x7fffffffd2d8, __x=0x555555cc26b0)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:1935
    #22 0x000055555562fa68 in std::_Rb_tree<cartographer::mapping::SubmapId, std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice>, std::_Select1st<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> >, std::less<cartographer::mapping::SubmapId>, std::allocator<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > >::_M_erase (this=0x7fffffffd2d8, __x=0x555555cc21d0)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:1935
    #23 0x000055555562fa68 in std::_Rb_tree<cartographer::mapping::SubmapId, std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice>, std::_Select1st<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> >, std::less<cartographer::mapping::SubmapId>, std::allocator<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > >::_M_erase (this=0x7fffffffd2d8, __x=0x55555609b190)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:1935
    #24 0x000055555562fa68 in std::_Rb_tree<cartographer::mapping::SubmapId, std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice>, std::_Select1st<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> >, std::less<cartographer::mapping::SubmapId>, std::allocator<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > >::_M_erase (this=0x7fffffffd2d8, __x=0x55555ac7ccd0)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:1935
    #25 0x000055555562fa68 in std::_Rb_tree<cartographer::mapping::SubmapId, std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice>, std::_Select1st<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> >, std::less<cartographer::mapping::SubmapId>, std::allocator<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > >::_M_erase (this=0x7fffffffd2d8, __x=0x55555ac7bdd0)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:1935
    #26 0x000055555562fa68 in std::_Rb_tree<cartographer::mapping::SubmapId, std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice>, std::_Select1st<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> >, std::less<cartographer::mapping::SubmapId>, std::allocator<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > >::_M_erase (this=0x7fffffffd2d8, __x=0x55555ac7a160)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:1935
    #27 0x000055555562fa68 in std::_Rb_tree<cartographer::mapping::SubmapId, std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice>, std::_Select1st<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> >, std::less<cartographer::mapping::SubmapId>, std::allocator<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > >::_M_erase (this=0x7fffffffd2d8, __x=0x555555ce4b80)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:1935
    #28 0x000055555562fa68 in std::_Rb_tree<cartographer::mapping::SubmapId, std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice>, std::_Select1st<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> >, std::less<cartographer::mapping::SubmapId>, std::allocator<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > >::_M_erase (this=0x7fffffffd2d8, __x=0x555555cf7b60)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:1935
    #29 0x000055555562fa68 in std::_Rb_tree<cartographer::mapping::SubmapId, std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice>, std::_Select1st<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> >, std::less<cartographer::mapping::SubmapId>, std::allocator<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > >::_M_erase (this=0x7fffffffd2d8, __x=0x555555cdf100)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:1935
    #30 0x000055555562fa68 in std::_Rb_tree<cartographer::mapping::SubmapId, std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice>, std::_Select1st<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> >, std::less<cartographer::mapping::SubmapId>, std::allocator<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > >::_M_erase (this=0x7fffffffd2d8, __x=0x555555ce64b0)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:1935
    #31 0x000055555562fa68 in std::_Rb_tree<cartographer::mapping::SubmapId, std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice>, std::_Select1st<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> >, std::less<cartographer::mapping::SubmapId>, std::allocator<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > >::_M_erase (this=0x7fffffffd2d8, __x=0x5555560fc390)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:1935
    #32 0x000055555562fa05 in std::_Rb_tree<cartographer::mapping::SubmapId, std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice>, std::_Select1st<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> >, std::less<cartographer::mapping::SubmapId>, std::allocator<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > >::~_Rb_tree (this=0x7fffffffd2d8)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:984
    #33 0x000055555562ee25 in std::map<cartographer::mapping::SubmapId, cartographer::io::SubmapSlice, std::less<cartographer::mapping::SubmapId>, std::allocator<std::pair<cartographer::mapping::SubmapId const, cartographer::io::SubmapSlice> > >::~map (this=0x7fffffffd2d8)
        at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_map.h:312
    #34 0x000055555562d1c7 in cartographer_ros::(anonymous namespace)::LoadOccupancyGridMsg (pbstream_filename="/util/ros/jobot/map/map.pbstream", 
        resolution=0.050000000000000003)
        at /home/twdragon/src/ros/install_ws/src/cartographer_ros/cartographer_ros/cartographer_ros/pbstream_map_publisher_main.cc:64
    #35 0x000055555562cb1e in cartographer_ros::(anonymous namespace)::Run (pbstream_filename="/util/ros/jobot/map/map.pbstream", map_topic="map", 
        map_frame_id="map", resolution=0.050000000000000003)
        at /home/twdragon/src/ros/install_ws/src/cartographer_ros/cartographer_ros/cartographer_ros/pbstream_map_publisher_main.cc:69
    #36 0x000055555562ca51 in main (argc=1, argv=0x7fffffffd9a8)
        at /home/twdragon/src/ros/install_ws/src/cartographer_ros/cartographer_ros/cartographer_ros/pbstream_map_publisher_main.cc:97
    

    Here is the cause:

    #14 0x000055555562fcad in cartographer::io::SubmapSlice::~SubmapSlice (this=0x55555609b950) at /util/include/cartographer/io/submap_painter.h:42
    

    The program crashes because the default destructor of SubmapSlice structure tries to clear cairo_data field calling free() on each element.

    Does anyone know a workaround? And another question: does this issue come from Cairo API?

    opened by twdragon 1
Releases(2.0.0)
Owner
Cartographer
Cartographer is a system that provides real-time simultaneous localization and mapping (SLAM) in 2D and 3D across multiple platforms and sensor configurations.
Cartographer
《Graph Optimization Approach to Range-based Localization》; UWB localization

This is modified from localization . Thanks for his work for uwb localizaiton. 代码1:https://github.com/qxiaofan/awesome-uwb-localization 代码2:https://gi

3D视觉工坊 35 Dec 2, 2022
HugeCTR is a GPU-accelerated recommender framework designed to distribute training across multiple GPUs and nodes and estimate Click-Through Rates (CTRs)

Merlin: HugeCTR HugeCTR is a GPU-accelerated recommender framework designed to distribute training across multiple GPUs and nodes and estimate Click-T

null 764 Jan 2, 2023
A 3D DNN-based Metric Semantic Dense Mapping pipeline and a Visual Inertial SLAM system

MSDM-SLAM This repository represnets a 3D DNN-based Metric Semantic Dense Mapping pipeline and a Visual Inertial SLAM system that can be run on a grou

ITMO Biomechatronics and Energy Efficient Robotics Laboratory 11 Jul 23, 2022
VLOAM-CMU-16833 - CMU 16-833 "Robot Localization and Mapping" Course Project

Introduction This repository is a reimplementation of the VLOAM algorithm [1]. The LOAM/Lidar Odometry part is adapted and refactored from ALOAM [2],

Yukun Xia 126 Dec 19, 2022
[3DV 2021] DSP-SLAM: Object Oriented SLAM with Deep Shape Priors

DSP-SLAM Project Page | Video | Paper This repository contains code for DSP-SLAM, an object-oriented SLAM system that builds a rich and accurate joint

Jingwen Wang 368 Dec 29, 2022
A real-time LiDAR SLAM package that integrates FLOAM and ScanContext.

SC-FLOAM What is SC-FLOAM? A real-time LiDAR SLAM package that integrates FLOAM and ScanContext. FLOAM for odometry (i.e., consecutive motion estimati

Jinlai Zhang 16 Jan 8, 2023
A real-time LiDAR SLAM package that integrates TLOAM and ScanContext.

SC-TLOAM What is SC-TLOAM? A real-time LiDAR SLAM package that integrates TLOAM and ScanContext. TLOAM for odometry. ScanContext for coarse global loc

Jinlai Zhang 3 Sep 17, 2021
Real-time LiDAR SLAM: Scan Context (18 IROS) + LeGO-LOAM (18 IROS)

SC-LeGO-LOAM NEWS (Nov, 2020) A Scan Context integration for LIO-SAM, named SC-LIO-SAM (link), is also released. Real-time LiDAR SLAM: Scan Context (1

Giseop Kim 11 Jul 15, 2022
R3live - A Robust, Real-time, RGB-colored, LiDAR-Inertial-Visual tightly-coupled state Estimation and mapping package

R3LIVE A Robust, Real-time, RGB-colored, LiDAR-Inertial-Visual tightly-coupled state Estimation and mapping package News [Dec 31, 2021] Release of cod

HKU-Mars-Lab 1.3k Jan 4, 2023
Tandem - [CoRL 21'] TANDEM: Tracking and Dense Mapping in Real-time using Deep Multi-view Stereo

TANDEM: Tracking and Dense Mapping in Real-time using Deep Multi-view Stereo Lukas Koestler1*    Nan Yang1,2*,†    Niclas Zeller2,3    Daniel Cremers1

TUM Computer Vision Group 742 Dec 31, 2022
Anomaly Detection on Dynamic (time-evolving) Graphs in Real-time and Streaming manner

Anomaly Detection on Dynamic (time-evolving) Graphs in Real-time and Streaming manner. Detecting intrusions (DoS and DDoS attacks), frauds, fake rating anomalies.

Stream-AD 696 Dec 18, 2022
Real time monaural source separation base on fully convolutional neural network operates on Time-frequency domain.

Real time monaural source separation base on fully convolutional neural network operates on Time-frequency domain.

James Fung 111 Jan 9, 2023
HybVIO visual-inertial odometry and SLAM system

HybVIO A visual-inertial odometry system with an optional SLAM module. This is a research-oriented codebase, which has been published for the purposes

Spectacular AI 319 Dec 30, 2022
Port of the 2020 support library to Raspberry Pi for the VL53L3CX Time-of-Flight ranging sensor with advanced multi-object detection

Port of ST VL53L3CX (2020) driver library to Raspberry Pi This is a port of the support library to Raspberry Pi for the VL53L3CX Time-of-Flight rangin

Niall Douglas 4 Jul 27, 2022
NCNN implementation of Real-ESRGAN. Real-ESRGAN aims at developing Practical Algorithms for General Image Restoration.

Real-ESRGAN ncnn Vulkan This project is the ncnn implementation of Real-ESRGAN. Real-ESRGAN ncnn Vulkan heavily borrows from realsr-ncnn-vulkan. Many

Xintao 602 Jan 6, 2023
VNOpenAI 31 Dec 26, 2022
Experiments with ORB-SLAM and emscripten

Experiments with ORB-SLAM3 and emscripten Experiments to attempt to get ORB-SLAM3 working with emscripten. Please use the binvoc branch of my own fork

Nick Whitelegg 18 Dec 19, 2022
An implementation of AVP-SLAM and some new contributions

AVP-SLAM-PLUS AVP-SLAM-PLUS is an implementation of AVP-SLAM and some new contributions. Performance of AVP-SLAM-PLUS could be found in video(https://

null 405 Dec 30, 2022
OpenVSLAM: A Versatile Visual SLAM Framework

OpenVSLAM: A Versatile Visual SLAM Framework NOTE: This is a community fork of xdspacelab/openvslam. It was created to continue active development of

null 551 Jan 9, 2023