Giter Club home page Giter Club logo

map_compression's Introduction

3D LiDAR Map Compression for Efficient Localization on Resource Constrained Vehicles

Introduction

Code of a manuscript, submitted to IEEE Transactions on Intelligent Transportation Systems. video

If have some questions on this project, please contact Huan Yin [email protected]

@article{yin20193d,
  title={3D LiDAR Map Compression for Efficient Localization on Resource Constrained Vehicles},
  author={Yin, Huan and Wang, Yue and Tang, Li and Ding, Xiaqing and Huang, Shoudong and Xiong, Rong},
  journal={IEEE Transactions on Intelligent Transportation Systems},
  status={Accept}
}

System

Examples

After compression by RF, selected points are colored in red on the origin map
     

Prepare to build

This project is compiled on ros and Ubuntu. And use catkin_make in your workspace to build this project. Some dependencies are needed to be prepared:

Introduction to all folders

  • cfg
    contains configuration files: .rviz & filter.yaml, for visualization & configuration`

  • gurobi
    integer linear programming code, written in Matlab

  • launch
    roslaunch files to start-up ros nodes, C++

  • prepare
    sparcify the dense poses, generate keep.txt

  • random_forest
    train & test, learning part, copy from GitHub, thanks to ranger

  • src
    .cpp files using ros api & libpointmatcher

  • images
    some pictures of results long time ago

Files in each folder for map compression

prepare folder

  • prepare poses and scans
    Maltab files, get the sparser poses for robot stopping cases, distance threshold used for more uniform of poses
    input: origin poses or trajectories
    output: uniform poses or trajectories

gurobi folder

  • before
    previous try on programming, no use

  • q_ILP_lamda
    implementation for weighted ILP on map compression, including spliting and merging iteratively

random_forest folder

  • build
    training and testing in bash files

tools in src folder

  • formatTransfer
    change the cloud files in a folder (.vtk to .ply for example)
    input: the folder address
    output: new format in this folder

  • mapCheck
    check the map in Rviz
    __input:__map and poses (trajectory)

  • normalViewer
    show the generated surface normals
    __input:__the map and some params

map_generation in src folder

  • scanRegister
    use origin raw scans and popses to get the origin full map, filter raw scans to reduce large size
    input: uniform poses and origin scans
    output: dense origin full map

  • mapFilter
    filter the dense origin full map using Octree Grid, and generate surface normals
    input: dense origin full map
    output: origin full map

  • mapScoring
    score each laser point in map according to the strategy in paper, which is also for observation filter as a comparison input: origin full map, laser scans and poses
    output: scored origin full map

  • genWeightVector
    get the weight vector for integer linear programming
    input: scored origin full map
    output: all points' weight in a saved txt

  • genVisMatrix
    get the Visbility Matrix for integer linear programming
    input: origin full map, laser scans and poses (same as mapScoring)
    output: saved vis-files one by one in a folder

learn_program in src folder

  • mapCutterTraj
    split/Cut the whole Map into two parts: train or test, according to the nearest search on trajectory
    input: oringn full map, poses and cutPoition
    output: train map, test map and labeled full map

  • generateAllFeatures
    generate point feature for training or testing
    input: oringn full map, poses
    output: map with features in descriptors and features in a saved txt file

  • loadFinalResults
    annotate the origin full map with the final learned result
    input: origin full map and learned result in txt file
    output: labeled learned result in cloud file

  • loadProResult
    annotate the origin full map with the supervised result by programming
    input: origin file map and programmed results in files in a folder
    output: labeled programmed result in cloud file

  • mapCompresser
    generate compressed map according to the annotated map on descriptor
    input: annotated map by learning or programming, and the descriptor name
    output: compressed map

  • compareDistribution
    get the nearest distances between two compressed clouds
    input: two maps
    output: distances in a saved txt file

  • errorDistribution
    get the nearest distances between salient & salient_predicted in cloud (learning & programming)
    input:  one map with two descriptors (s & s_predicted)
    output: distances in a saved txt file

loc_test in src folder

  • locTest
    localization test by registration
    input:  point cloud map, laser scans, trajectory(for position initial)
    output: pose saved txt, time saved txt, icp iteration saved txt

comparisons in src folder

  • clusterMap
    achieve map compression by clustering point clouds
    input:  map, and some params
    output: saved clustered map

  • voxelMap
    achieve map compression by voxel grid (similar as octree grid)
    input:  map
    output: saved sparse map

  • randomSampleMap
    achieve map compression by random selection
    input:  map
    output: saved random map

  • selectByObserver
    achieve map compression by thresholding the observation count
    input:  map
    output: saved threshold map

  • splitCloudForSaliency
    split map to sub-maps for geometry saliency detection
    input:  map, and the trajectory
    output: sub-maps in a folder

  • saliencyMap
    genrate saliency map on point clouds
    input:  the folder contains sub-maps,
    output: saliency evaluation saved in txt files ina folder

  • mergeCloudForSaliency
    merge the saliency and sub-maps into a whole map
    input:  map, trajectory and saliency files
    output: one global map with saliency evaluation

License

MIT

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.