- CarMap-generated 3D lean map (20x smaller map than ORB-SLAM2)
- CarMap's dynamic object filter to remove dynamic objects
- CarMap's semantically annotated 3D map
- CarMap's position-based robust feature matching
- CarMap's efficient map update operation
- CarMap's robust map segment stitching for unmapped regions
- CarMap-generated 3D map upload/download to the CarMap cloud service
- Feature map stitching for CarMap generated map
There are two directories in the repo:
The vehicle client: CarMap_Vehicle_Client
The cloud service: CarMap_Cloud_Service
Both of them have similar dependencies and build instructions
- Run the build_carmap.sh script to build the dependencies needed
sh build_carmap.sh
- Building OpenCV:
git clone https://github.com/opencv/opencv
cd opencv
git checkout 3.4.0
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j7
sudo make install
-
Eigen 3.1.0 or higher
-
Pangolin
git clone https://github.com/stevenlovegrove/Pangolin.git
mkdir build && cd build
cmake ..
make -j
- First build CarMap_Cloud_Service
cd CarMap_Cloud_Service
mkdir build && cd build
cmake ..
make -j
- Build CarMap_Vehicle_Client
cd CarMap_Vehicle_Client
mkdir build && cd build
cmake ..
make -j
- Download sample dataset for CarMap_Vehicle_Client:
mkdir CarMap_Dataset && cd CarMap_Dataset
Navigate to the link (https://drive.google.com/uc?export=download&id=1eJ4yZGrQXC50Hp4Idie2I3K5XlyR-Eeb) and download the dataset
tar -xz CarMap_Dataset.tar.xz
cd ..
- Run CarMap Cloud Service
cd CarMap_Cloud_Service/build/
./server_stitch
cd ../../
- Run CarMap_Vehicle_Client
cd CarMap_Vehicle_Client/build/
./main
Both the vehicle client and the cloud service have a Config_File.yaml that dictates the operation mode of CarMap.
In this section, we describe what some of the fields in Config_File.yaml of CarMap Cloud Service are used for:
- All the ServerStitch.Path* variables are used to feed input and output paths to CarMap
- OneShotStitching: true for CarMap stitching and false for progressive relocalization
- ReceiveMaps: true for receiving map segments from a vehicle client and false to stitch two maps from disk
- CloudServiceIDAddress: this is the ip address of the cloud service (always starts with ip.)
- CloudServicePort: port address at the cloud service
- IntegrateDiff: true for map update using diff and false for map update via stitch
In this section, we describe what some of the fields in Config_File.yaml of CarMap Vehicle Client are used for:
-
OperationMode.OpCode:
- 0 for a first time mapping session with no pre-loaded map
- 1 for updating a pre-loaded map
- 2 for using a pre-loaded map without updating it
-
SaveMap/UpdateMap/LoadMap.StartFrom and StopAt: starting and ending frame numbers of input dataset
-
Path variables are for input and output paths
-
Constants:
- RunLocalization: false for SLAM and true for running only localization (we use false by default)
- SaveTrajectory: true for saving trajectory at output path
- IsStereo: true for stereo camera frames as input
- OrbVisualization: true to visualize the whole CarMap mapping process
-
Mode:
- RemoveDynamicObjects: true for using dynamic object filter
- LoadDepth: true to load depth images from input_dataset/depth/ but false by default because we estimate depth from stereo matching
- EvaluateSegmentation: true to evaluate segmentation accuracy using ground truth segmented images
- RobustFeatureSearch: true to enable robust feature matching
-
Online Mode Settings:
- UploadToCloud: true to upload map segments/diffs to cloud service
- UploadOnlyDiff: true to upload diff and false to upload whole map segments
- CloudIPAddress and CloudPort: address of carmap cloud service
- UploadFrameInterval: number of frames after which to upload map diff/segments to cloud