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
For next steps, see the Run Cartographer SLAM on your Robot with a LIDAR Tutorial.
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
git clone --recurse-submodules https://github.com/viamrobotics/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 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 = [email protected]: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
Copyright 2023 Viam Inc.
Apache 2.0 - See LICENSE file