For user documentation, see Cartographer Modular Resource. For CloudSLAM documentation, see CloudSLAM docs
Warning This is an experimental feature. Stability is not guaranteed. Breaking changes are likely to occur, and occur often.
This repo wraps Cartographer as a modular resource so it is easily usable with the rest of Viam's ecosystem. Cartographer is a system that provides real-time Simultaneous Localization And Mapping (SLAM) in 2D and 3D across multiple platforms and sensor configurations.
Install viam-cartographer:
- Linux aarch64:
sudo curl -o /usr/local/bin/cartographer-module https://storage.googleapis.com/packages.viam.com/apps/slam-servers/cartographer-module-stable-aarch64.AppImage sudo chmod a+rx /usr/local/bin/cartographer-module
- Linux x86_64:
sudo curl -o /usr/local/bin/cartographer-module https://storage.googleapis.com/packages.viam.com/apps/slam-servers/cartographer-module-stable-x86_64.AppImage sudo chmod a+rx /usr/local/bin/cartographer-module
- MacOS/Linux
brew tap viamrobotics/brews && brew install cartographer-module
Note that AppImages require FUSE to run. See documentation.
You can either install the latest AppImages for testing, or build the code from source.
You can install the latest AppImages using:
- Linux aarch64:
sudo curl -o /usr/local/bin/cartographer-module https://storage.googleapis.com/packages.viam.com/apps/slam-servers/cartographer-module-latest-aarch64.AppImage sudo chmod a+rx /usr/local/bin/cartographer-module
- Linux x86_64:
sudo curl -o /usr/local/bin/cartographer-module https://storage.googleapis.com/packages.viam.com/apps/slam-servers/cartographer-module-latest-x86_64.AppImage sudo chmod a+rx /usr/local/bin/cartographer-module
Note that AppImages require FUSE to run. See documentation.
git clone --recurse-submodules https://github.com/viam-modules/viam-cartographer.git
If you happened to use git clone
only, you won't see the cartographer
folder and will need to fetch it:
git submodule update --init
If desired, Viam's canon tool can be used to create a docker container to build arm64
or amd64
binaries of the SLAM server. The canon tool can be installed by running the following command:
go install github.com/viamrobotics/canon@latest
And then by running one of the following commands in the viam-cartographer repository to create the container:
canon -arch arm64
canon -arch amd64
These containers are set to persist between sessions via the persistent
parameter in the .canon.yaml
file located in the root of viam-cartographer. More details regarding the use of Viam's canon tool can be found here.
# Install dependencies using brew (or apt-get)
make setup
# Build
make build
# Install lua files and binaries to /usr/local
make install
# Run the binary
cartographer-module
make lint-setup
make lint
make build
make test
- Commit and push changes in the
cartographer
submodule first. - Commit and push changes in the
viam-cartographer
library last.
Or, alternatively:
- Commit changes in the
cartographer
submodule - Commit changes in the main repo
- Push all changes by running
git push --recurse-submodules=on-demand
When changing branches in a submodule, update .gitmodules
, e.g., changing to a branch called kk/fix-install
:
...
[submodule "viam-cartographer/cartographer"]
path = viam-cartographer/cartographer
url = git@github.com:kkufieta/cartographer.git
branch=kk/fix-install
Commit & push the changes.
When pulling those changes, run the following:
git pull
git submodule update --init --recursive
When building on MacOS
and seeing errors related to protobuf
such as
Undefined symbols for architecture arm64:
"google::protobuf::internal::InternalMetadata::~InternalMetadata()", referenced from:
google::protobuf::MessageLite::~MessageLite() in libviam-cartographer.a(common.pb.cc.o)
google::protobuf::MessageLite::~MessageLite() in libviam-cartographer.a(slam.pb.cc.o)
google::protobuf::MessageLite::~MessageLite() in libviam-cartographer.a(http.pb.cc.o)
or
/tmp/cartographer-module-20230421-29152-arkug3/viam-cartographer/../grpc/cpp/gen/google/api/http.pb.h:12:2: error: This file was generated by a newer version of protoc which is
/tmp/cartographer-module-20230421-29152-arkug3/viam-cartographer/../grpc/cpp/gen/google/api/http.pb.h:13:2: error: incompatible with your Protocol Buffer headers. Please update
/tmp/cartographer-module-20230421-29152-arkug3/viam-cartographer/../grpc/cpp/gen/google/api/http.pb.h:14:2: error: your headers.
Then it possible your brew
installation is using the incorrect version of protobuf
. To check if you are seeing this issue run
protoc --version
If your version is 3.20.3
then you may be having this error. To fix take the following steps
- unlink protobuf@3
brew unlink protobuf@3
- link normal protobuf
brew unlink protobuf && brew link protobuf
- echo your path & confirm you are not manually pathing to protobuf@3. If you see protobuf@3 in your path, track down where that is being added to your path & remove it (try .zshrc / .bashrc)
echo $PATH
-
Create a new terminal window to get a clean shell state
-
Confirm you have a new version installed. The minimum version you should see on your Mac is
3.21.12
protoc --version
If you see an error during make build
like:
$ make build
Submodule found successfully
grep -q viam-patched viam-cartographer/cartographer/CMakeLists.txt || \
(cd viam-cartographer/cartographer && git checkout . && git apply ../cartographer_patches/carto.patch)
buf generate --template ./buf/buf.gen.yaml buf.build/viamrobotics/api
buf generate --template ./buf/buf.grpc.gen.yaml buf.build/viamrobotics/api
buf generate --template ./buf/buf.gen.yaml buf.build/googleapis/googleapis
# Touch this file so that we don't regenerate the buf compiled C++ files
# every time we build
cd viam-cartographer && cmake -Bbuild -G Ninja -DCMAKE_PREFIX_PATH=/opt/homebrew -DQt5_DIR=/opt/homebrew/opt/qt@5/lib/cmake/Qt5 && cmake --build build
CMake Error: The current CMakeCache.txt directory /Users/eshamaharishi/Documents/code/viam-cartographer/viam-cartographer/build/CMakeCache.txt is different than the directory /host/viam-cartographer/build where CMakeCache.txt was created. This may result in binaries being created in the wrong place. If you are not sure, reedit the CMakeCache.txt
CMake Error: The source "/Users/eshamaharishi/Documents/code/viam-cartographer/viam-cartographer/CMakeLists.txt" does not match the source "/host/viam-cartographer/CMakeLists.txt" used to generate cache. Re-run cmake with a different source directory.
then you probably previously built for a different architecture. You should run make clean
and then run make build
again.
Copyright 2023 Viam Inc.
Apache 2.0 - See LICENSE file