COVINS -- A Framework for Collaborative Visual-Inertial SLAM and Multi-Agent 3D Mapping

Related tags

Deep Learning covins
Overview

COVINS -- A Framework for Collaborative Visual-Inertial SLAM and Multi-Agent 3D Mapping

Version 1.0

COVINS is an accurate, scalable, and versatile visual-inertial collaborative SLAM system, that enables a group of agents to simultaneously co-localize and jointly map an environment.

COVINS provides a server back-end for collaborative SLAM, running on a local machine or a remote cloud instance, generating collaborative estimates from map data contributed by different agents running Visual-Inertial Odomety (VIO) and sharing their map with the back-end. COVINS also provides a generic communication module to interface the keyframe-based VIO of your choice. Here, we provide an example of COVINS interfaced with the VIO front-end of ORB-SLAM3. We provide guidance and examples how to run COVINS on the EuRoC dataset.

Index

  1. Related Publications
  2. License
  3. Basic Setup
  4. Running COVINS
  5. Docker Implementation
  6. Extended Functionalities
  7. Limitations and Known Issues

1 Related Publications

[COVINS] Patrik Schmuck, Thomas Ziegler, Marco Karrer, Jonathan Perraudin and Margarita Chli. COVINS: Visual-Inertial SLAM for Centralized Collaboration. IEEE International Symposium on Mixed and Augmented Reality (ISMAR), 2021. PDF

[Redundancy Detection] Patrik Schmuck and Margarita Chli. On the Redundancy Detection in Keyframe-based SLAM. IEEE International Conference on 3D Vision (3DV), 2019. PDF.

[System Architecture] Patrik Schmuck and Margarita Chli. CCM‐SLAM: Robust and Efficient Centralized Collaborative Monocular Simultaneous Localization and Mapping for Robotic Teams. Journal of Field Robotics (JFR), 2019. PDF

[Collaborative VI-SLAM] Patrik Schmuck, Marco Karrer and Margarita Chli. CVI-SLAM - Collaborative Visual-Inertial SLAM. IEEE Robotics and Automation Letters (RA-L), 2018. PDF

Video:

Mesh

2 License

COVINS is released under a GPLv3 license. For a list of code/library dependencies (and associated licenses), please see thirdparty_code.md.

For license-related questions, please contact the authors: collaborative (dot) slam (at) gmail (dot) com.

If you use COVINS in an academic work, please cite:

@article{schmuck2021covins,
  title={COVINS: Visual-Inertial SLAM for Centralized Collaboration},
  author={Schmuck, Patrik and Ziegler, Thomas and Karrer, Marco and Perraudin, Jonathan and Chli, Margarita},
  journal={arXiv preprint arXiv:2108.05756},
  year={2021}
}

3 Basic Setup

This section explains how you can build the COVINS server back-end, as well as the provided version of the ORB-SLAM3 front-end able to communicate with the back-end. COVINS was developed under Ubuntu 18.04, and we provide installation instructions for 18.04 as well as 20.04. Note that we also provide a Docker implementation for simplified deployment of COVINS.

Environment Setup

Dependencies

  • sudo apt-get update
  • Doxygen: sudo apt-get install doxygen
  • SuiteSparse: sudo apt-get install libsuitesparse-dev
  • YAML: sudo apt-get install libyaml-cpp-dev
  • VTK: sudo apt-get install libvtk6-dev
  • catkin_tools (from the catkin_tools manual)
    • sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu `lsb_release -sc` main" > /etc/apt/sources.list.d/ros-latest.list'
    • wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
    • sudo apt-get update
    • sudo apt-get install python3-catkin-tools
  • ws_tools: sudo apt-get install python3-wstool
  • OMP: sudo apt-get install libomp-dev
  • Glewsudo apt install libglew-dev
  • ROS

Set up your workspace

This will create a workspace for COVINS as ~/ws/covins_ws. All further commands will use this path structure - if you decide to change the workspace path, you will need to adjust the commands accordingly.

  • cd ~
  • mkdir -p ws/covins_ws/src
  • cd ~/ws/covins_ws
  • catkin init
  • ROS Setup
    • U18/Melodic: catkin config --extend /opt/ros/melodic/
    • U20/Noetic: catkin config --extend /opt/ros/noetic/
  • catkin config --merge-devel
  • catkin config --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo

COVINS Installation

We provide a script (covins/install_file.sh) that will perform a full installation of COVINS, including back-end, front-end, and third-party packages, if the environment is set up correctly. If the installation fails, we strongly recommend executing the steps in the build script manually one by one. The script might not perform a correct installation under certain circumstances if executed multiple times.

  • cd ~/ws/covins_ws/src
  • git clone https://github.com/VIS4ROB-lab/covins.git
  • cd ~/ws/covins_ws
  • chmod +x src/covins/install_file.sh
  • ./src/covins/install_file.sh 8
    • The argument 8 is optional, and specifies the number of jobs the build process should use.

Generally, when the build process of COVINS or ORB-SLAM3 fails, make sure you have correctly sourced the workspace, and that the libraries in the third-party folders, such as DBoW2 and g2o are built correctly.

A remark on fix_eigen_deps.sh: compiling code with dependencies against multiple Eigen versions is usually fatal and must be avoided. Therefore, we specify and download the Eigen version explicitly through the eigen_catkin package, and make sure all Eigen dependencies point to this package.

Installing ROS Support for the ORB-SLAM3 Front-End

If you want to use rosbag files to pass sensor data to COVINS, you need to explicitly build the ORB-SLAM3 front-end with ROS support.

  • Install vision_opencv:
    • cd ~/ws/covins_ws/src
    • Clone: git clone https://github.com/ros-perception/vision_opencv.git
    • Check out the correct branch
      • U18/Melodic: git checkout melodic
      • U20/Noetic: git checkout noetic
    • Go to ~/ws/covins_ws/src/vision_opencv/cv_bridge/CMakeLists.txt
    • Add the opencv3_catkin dependency: change the line find_package(catkin REQUIRED COMPONENTS rosconsole sensor_msgs) to find_package(catkin REQUIRED COMPONENTS rosconsole sensor_msgs opencv3_catkin)
    • If you are running Ubuntu 20 (or generally have OpenCV 4 installed): remove the lines that search for an OpenCV 4 version in the CMakeLists.txt
    • source ~/ws/covins_ws/devel/setup.bash
    • catkin build cv_bridge
    • [Optional] Check correct linkage:
      • cd ~/ws/covins_ws/devel/lib
      • ldd libcv_bridge.so | grep opencv_core
      • This should only list libopencv_core.so.3.4 as a dependency
  • catkin build ORB_SLAM3
  • [Optional] Check correct linkage:
    • ~/ws/covins_ws/src/covins/orb_slam3/Examples/ROS/ORB_SLAM3
      • ldd Mono_Inertial | grep opencv_core
      • This should mention libopencv_core.so.3.4 as the only libopencv_core dependency

4 Running COVINS

This section explains how to run COVINS on the EuRoC dataset. If you want to use a different dataset, please do not forget to use a correct parameter file instead of covins/orb_slam3/Examples/Monocular-Inertial/EuRoC.yaml.

Setting up the environment

  • In ~/ws/covins_ws/src/covins/covins_comm/config/config_comm.yaml: adjust the value of sys.server_ip to the IP of the machine where the COVINS back-end is running
  • In every of the provided scripts to run the ORB-SLAM3 front-end (e.g., euroc_examples_mh1.sh, in orb_slam3/covins_examples/), adjust pathDatasetEuroc to the path where the dataset has been uncompressed. The default expected path is /MH_01_easy/mav0/... (for euroc_examples_mh1.sh, in this case)
  • In ~/ws/covins_ws/src/covins/covins_backend/config/config_backend.yaml: adjust the path of sys.map_path0 to the directory where you would like to load maps from.

Running the COVINS Server Back-End

  • Source your workspace: source ~/ws/covins_ws/devel/setup.bash
  • In a terminal, start a roscore: roscore
  • Start the COVINS backend by executing rosrun covins_backend covins_backend_node

Running the ORB-SLAM3 Front-End

Example scripts are provided in orb_slam3/covins_examples/. Don't forget to correctly set the dataset path in every script you want to use (see above: Setting up the environment). You can also check the original ORB-SLAM3 Repo for help on how to use the ORB-SLAM3 front-end.

  • Download the EuRoC dataset (ASL dataset format)
  • Source your workspace: source ~/ws/covins_ws/devel/setup.bash
  • Execute one of the example scripts provided in the orb_slam3/ folder, such as euroc_examples_mh123_vigba
    • euroc_examples_mhX.sh runs the front-end with a single sequence from EuRoC MH1-5.
    • euroc_examples_mh123_vigba.sh runs a 3-agent collaborative SLAM session (sequential) followed by Bundle Adjustment.
    • euroc_examples_mh12345_vigba.sh runs a 5-agent collaborative SLAM session (sequential) followed by Bundle Adjustment.
    • Multiple front-ends can run in parallel. The front-ends can run on the same machine, or on different machines connected through a wireless network. However, when running multiple front-ends on the same machine, note that the performance of COVINS might degrade if the computational resources are overloaded by running too many agents simultaneously.
    • Common error sources:
      • If the front-end is stuck after showing Loading images for sequence 0...LOADED!, most likely your dataset path is wrong.
      • If the front-end is stuck after showing --> Connect to server or shows an error message Could no establish connection - exit, the server is not reachable - the IP might be incorrect, you might have forgotten to start the server, or there is a problem with your network (try pinging the server IP)

COVINS does not support resetting the map onboard the agent. Since map resets are more frequent at the beginning of a session or dataset, for example due to faulty initialization, in the current implementation, the COVINS communication module is set up such that it only starts sending data if a pre-specified number of keyframes was already created by the front-end. This number is specified by comm.start_sending_after_kf in covins/covins_comm/config/config_comm.yaml, and is currently set to 50. Also check Limitations for more details.

Visualization

COVINS provides a config file for visualization with RVIZ (covins.rviz in covins_backend/config/)

  • Run tf.launch in covins_backend/launch/ to set up the coordinate frames for visualization: roslaunch ~/ws/covins_ws/src/covins/covins_backend/launch/tf.launch
  • Launch RVIZ: rviz -d ~/ws/covins_ws/src/covins/covins_backend/config/covins.rviz
    • Covisibility edges between keyframes of from different agents are shown in red, while edges between keyframes from the same agent are colored gray (those are not shown by default, but can be activated in RVIZ).
    • In case keyframes are visualized, removed keyframes are displayed in red (keyframes are not shown by default, but can be activated in RVIZ).
    • The section VISUALIZATION in config_backend.yaml provides several options to modify the visualization.

User Interaction

COVINS provides several options to interact with the map held by the back-end. This is implemented through ROS services.

  • Make sure your workspace is sourced: source ~/ws/covins_ws/devel/setup.bash
  • Map save: rosservice call /covins_savemap - this saves the map associated to the agent specified by AGENT_ID.
    • The map will be saved to the folder ..../covins_backend/output/map_data. Make sure the folder is empty, before you save a map (COVINS performs a brief check - if a folder named keyframes/ or mappoints/ exists in the target directory, it will show an error and abort the map save process. Any other files or folders will not result in an error though).
  • Map load: rosservice call /covins_loadmap 0 - loads a map stored on disk, from the folder specified by sys.map_path0 in config_backend.yaml.
    • Note: map load needs to be performed before registering any agent.
    • 0 specifies the operation mode of the load functionality. 0 means "standard" map loading, while 1 and 2 will perform place recognition (1) and place recognition and PGO (2). Note that both modes with place recognition are experimental, only "standard" map load is tested and supported for the open-source version of COVINS.
  • Bundle Adjustment: rosservice call /covins_gba - Performs visual-inertial bundle adjustemt on the map associated to the agent specified by AGENT_ID. Modes: 0: BA without outlier rejection, 1: BA with outlier rejection.
  • Map Compression / Redundancy Removal: rosservice call /covins_prunemap - performs redundancy detection and removal on the map associated to the agent specified by AGENT_ID.
    • MAX_KFs specifies the target number of keyframes held by the compressed map. If MAX_KFs=0, the threshold value for measuring redundancy specified by the parameter kf_culling_th_red in config_backend.yaml will be used.
    • All experiments with COVINS were performed specifying the target keyframe count. Therefore, we recommend resorting to this functionality.
    • The parameter kf_culling_max_time_dist in config_backend.yaml specifies a maximum time delta permitted between two consecutive keyframes, in order to ensure limit the error of IMU integration. If no keyframe can removed without violating this constraint, map compression will stop, even if the target number of keyframes is not reached.
  • Note: After a map merge of the maps associated to Agent 0 and Agent 1, the merged map is associated to both agents, i.e. rosservice call /covins_savemap 0 and rosservice call /covins_savemap 1 will save the same (shared) map.

Parameters

COVINS provides two parameter files to adjust the behavior of the system and algorithms.

  • ../covins_comm/config/config_comm.yaml contains all parameters related to communication and the agent front-end.
  • ../covins_backend/config/config_backend.yaml contains all parameters related to the server back-end.

The user should not be required to change any parameters to run COVINS, except paths and the server IP, as explained in this manual.

Output Files

  • COVINS automatically saves the trajectory estimates of each agent to a file in covins_backend/output. The file KF_ .csv stores the poses associated to the agent specified by AGENT_ID.

Running COVINS with ROS

  • Make sure your workspace is sourced: source ~/ws/covins_ws/devel/setup.bash
  • In ~/ws/covins_ws/src/covins/orb_slam3/launch_ros_euroc.launch: adjust the paths for voc and cam
  • cd to orb_slam3/ and run roslaunch launch_ros_euroc.launch
  • run the rosbag file, e.g. rosbag play MH_01_easy.bag
    • When using COVINS with ROS, we recommend skipping the initialization sequence performed at the beginning of each EuRoC MH trajectory. ORB-SLAM3 often performs a map reset after this sequence, which is not supported by COVINS and will therefore cause an error. For example, for MH1, this can be easily done by running rosbag play MH_01_easy.bag --start 45. (Start at: MH01: 45s; MH02: 35s; MH03-05: 15s)

5 Docker Implementation

We provide COVINS also as a Docker implementation. A guide how to install docker can be found here https://docs.docker.com/engine/install/. To avoid the need of sudo when running the commands below you can add your user to the docker group.

sudo usermod -aG docker $USER (see https://docs.docker.com/engine/install/linux-postinstall/)

Building the docker image

Build the docker file using the Make file provided in the docker folder. Provide the number of jobs make and catkin build should use. This can take a while. If the build fails try again with a reduced number of jobs value.

  • make build NR_JOBS=14

Running the docker image

The docker image can be used to run different parts of COVINS (e.g. server, ORB-SLAM3 front-end, ...).

ROS core

To start the roscore one can either use the host system ROS implementation (if ROS is installed). Otherwise, it can be started using the docker image.

  • ./run.sh -c

COVINS Server Back-End

The convins server back-end needs a running roscore, how to start one see above. Furthermore, the server needs two configuration files, one for the communication server on one for the back-end. These two files need to be linked when running the docker image.

  • ./run.sh -s ../covins_comm/config/config_comm.yaml ../covins_backend/config/config_backend.yaml

ORB-SLAM3 Front-End

The ORB-SLAM3 front-end client needs the communication server config file, the file which should be executed, and the path to the dataset. The dataset has to be given seperately since the file system of the docker container differs from the host system. Hence, the pathDatasetEuroc variable in the run script gets adapted automatically inside the docker container.

  • ./run.sh -o ../covins_comm/config/config_comm.yaml ../orb_slam3/covins_examples/euroc_examples_mh1

ORB-SLAM3 ROS Front-End

The ROS wrapper of the ORB-SLAM3 front-end can also be started in the docker container. It requires the server config file and the ROS launch file. A bag file can then for example be played on the host system.

  • ./run.sh -r ../covins_comm/config/config_comm.yaml ../orb_slam3/Examples/ROS/ORB_SLAM3/launch/launch_docker_ros_euroc.launch

Terminal

A terminal within the docker image can also be opened. This can for example be used to send rosservice commands.

  • ./run.sh -t

6 Extended Functionalities

Interfacing a Custom VIO System with COVINS

COVINS exports a generic communication interface, that can be integrated into custom keyframe-based VIO systems in order to share map data with the server back-end and generate a collaborative estimate. The code for the communication interface is located in the covins_comm folder, which builds a library with the same name that facilitates communication between the VIO system onboard the agent and the COVINS server back-end.

For straightforward understanding which steps need to be taken to interface a VIO front-end with COVINS, we have defined the preprocessor macro COVINS_MOD in covins/covins_comm/include/covins/covins_base/typedefs_base.hpp. This macro indicates all modifications made to the original ORB-SLAM3 code in order to set up the communication with the server back-end.

In a nutshell, the communication interface provides a base communicator class, which is intended to be used to create a derived communicator class tailored to the VIO system. The communicator module runs in a separate thread, taking care of setting up a connection to the server, and exchanging map data. For the derived class, the user only needs to define a function that can be used to pass data to the communicator module and fill the provided data containers, and the Run() function that is continuously executed by the thread allocated to the communicator module. Furthermore, the communicator module uses the predefined message types MsgKeyframe and MsgLandmark for transmitting data to the server, therefore, the user needs to define functions that fill those messages from the custom data structures of the VIO system.

Map Re-Use Onboard the Agent

COVINS also provides the functionality to share data from the collaborative estimate on the server-side with the agents participating in the estimate. COVINS provides only the infrastructure to share this data, the method for map re-use needs to be implement by the user.

By default, COVINS is configured to not send any data back to the agent. By setting comm.data_to_client to 1 in config_comm.yaml, this functionality can be activated. By default, the server then regularly sends information about one keyframe back to the agent. The agent will display a message that requests the user to define what to do with the received information.

  • In the function CollectDataForAgent() in covins_backend/src/covins_backend/, the data to send to the agent can be specified.
  • In the function ProcessKeyframeMessages() in orb_slam3/src/, the processing of the received keyframe can be specified.

7 Limitations and Known Issues

  • [MAP RESET] ORB-SLAM3 has the functionality to start a new map when tracking is lost, in order to improve robustness. This functionality is not supported by COVINS. The COVINS server back-end assumes that keyframes arriving from a specific agent are shared in a continuous fashion and belong to the same map, and if the agent map is reset and a second keyframe with a previously used ID arrives again at the server side, the back-end will detect this inconsistency and throw an error. We have almost never experienced this behavior on the EuRoC sequences when using the ASL dataset format, and rarely when using rosbag files.
    • Too little computational resources available to the front-end can be a reason for more frequent map resets.
    • Map resets are more frequent at the beginning of a dataset, and occur less when the VIO front-end is well initialized and already tracking the agent's pose over some time. Therefore, the communication module will only start sending data to the server once a pre-specified number of keyframes was created by the VIO front-end. This number is specified by comm.start_sending_after_kf in covins/covins_comm/config/config_comm.yaml, and is currently set to 50.
    • Particularly when running with rosbag files, setting the parameter orb.imu_stamp_max_diff: 2.0 in covins/covins_comm/config/config_comm.yaml, instead of the default (1.0), helped to significantly reduce map resets. We did not see any negative impact on the accuracy of the COVINS collaborative estimate from this change.
  • [Duplicate Files] The repository contains 2 copies of the ORB vocabularies, as well as 2 versions of the DBoW library. We decided to use this structure in order to keep the code of COVINS and ORB-SLAM3 as much separated as possible.
  • [Mixed Notation] COVINS mainly utilizes the Google C++ Style Guide. However, some modules re-use code of other open-source software using Hungarian notation, such as CCM-SLAM and ORB-SLAM2, and this code was not ported to the new notation convention yet (particularly, this applies to code parts related to the FeatureMatcher, KFDatabase, PlaceRecognition, Se3Solver).
Comments
  • Error running COVINS with your own camera

    Error running COVINS with your own camera

    When I use my camera, I change the camera topic subscribed in ros_mono.cc in ~/ROS/ORB_SLAM3/src, but every time I run it normally for a while, it will appear "bash: line 1: 19366 segfault (core has been transferred) Chu) "rosrun ORB_SLAM3 Mono" error, I want to know what happened, or how to use my camera to run COVINS

    opened by RoZhong 42
  • There is a problem transmitting data from the server to the client

    There is a problem transmitting data from the server to the client

    Hello, I want to transmit msg.T_w_s = T_w_s_ from the server to the client; but the client always receives the unit array. why this msg.T_sref_s = T_w_sref.inverse() * T_w_s_; can be transmitted Screenshot from 2022-06-08 16-58-56

    opened by WuZihao12 7
  • no eigen, ceres, opengv directory

    no eigen, ceres, opengv directory

    Hi everyone, in file fix_eigen_deps.sh

    #eigen_catkin
    cd ${BASEDIR}/..
    if [ -d "eigen_catkin" ]
    then
      cd eigen_catkin
      FIX_EIGEN_VERSION="1"
      if grep -q "covins_patched" CMakeLists.txt; then
        FIX_EIGEN_VERSION="0"
      fi
    #  echo "FIX_EIGEN_VERSION: $FIX_EIGEN_VERSION"
      if [ "$FIX_EIGEN_VERSION" == "1" ]
      then
        echo "set eigen_catkin to 3.3.4"
        sed -i '13d' CMakeLists.txt
        sed -i '12aset(EIGEN_MINIMUM_VERSION 3.3.4)' CMakeLists.txt
        sed -i '88d' CMakeLists.txt
        sed -i '88d' CMakeLists.txt
        sed -i '87a\ \ \ \ URL https://gitlab.com/libeigen/eigen/-/archive/3.3.4/eigen-3.3.4.tar.bz2' CMakeLists.txt
        sed -i '88a\ \ \ \ URL_MD5 6e74a04aeab3417120f1bdef6f3b4881' CMakeLists.txt
        sed -i '46aset(USE_SYSTEM_EIGEN "OFF")' CMakeLists.txt
        sed -i '1i# covins_patched' CMakeLists.txt
      else echo "eigen_catkin already set to version 3.3.4"
      fi
    else echo "ERROR: no eigen_catkin directory"
    fi
    

    it means there should be a folder called eigen_catkin in covins_ws/src, but there isn't. I have eigen3.4.0 and ceres on my ubuntu, not sure about opengv(I can run ORB_SLAM3 and 2 on my device). Do I need to copy these files in src or is this a bug? Or did I mistakenly operate something? thanks for your reply, in advance.

    opened by JaimeParker 6
  • Error when running client in docker image

    Error when running client in docker image

    Hi;

    I run the following:

    In terminal 1: ./run.sh -c In terminal 2: ./run.sh -s ../covins_comm/config/config_comm.yaml ../covins_backend/config/config_backend.yaml In terminal 3: ./run.sh -o ../covins_comm/config/config_comm.yaml ../orb_slam3/covins_examples/euroc_examples_mh1

    Then in terminal 3, I get this error:

    run_copy.sh: 1: run_copy.sh: %YAML:1.0: not found run_copy.sh: 7: run_copy.sh: sys.port:: not found run_copy.sh: 8: run_copy.sh: sys.server_ip:: not found run_copy.sh: 14: run_copy.sh: comm.send_updates:: not found run_copy.sh: 15: run_copy.sh: comm.data_to_client:: not found run_copy.sh: 17: run_copy.sh: comm.start_sending_after_kf:: not found run_copy.sh: 18: run_copy.sh: comm.kf_buffer_withold:: not found run_copy.sh: 19: run_copy.sh: comm.max_sent_kfs_per_iteration:: not found run_copy.sh: 20: run_copy.sh: comm.update_window_size:: not found run_copy.sh: 22: run_copy.sh: comm.to_agent_freq:: not found run_copy.sh: 24: run_copy.sh: comm.start_drift_estimation_after_kf:: not found run_copy.sh: 30: run_copy.sh: orb.activate_visualization:: not found run_copy.sh: 31: run_copy.sh: orb.imu_stamp_max_diff:: not found

    I used Docker installation

    opened by Tariq-Abuhashim 5
  • map reset frequently

    map reset frequently

    hi! I test this with realsense d435i camera. However,I find it will reset frequently.I konw orb-slam3 have the same problem.Is there any method to let this system run well with my own camara? Looking forward to your reply!

    opened by flyover-26 4
  • An error occurred in the middle of the program

    An error occurred in the middle of the program

    Loading ORB Vocabulary. This could take a while... Vocabulary loaded!

    +++++ KeyFrame Database Initialized +++++ selectserver: new connection from 192.168.31.31 on socket 11 Pass new ID 0 to client Map 0 : 50 KFs | 1495 LMs Map 0 : 100 KFs | 2287 LMs Map 0 : 150 KFs | 2515 LMs double free or corruption (out) Aborted (core dumped)

    When running the data set, the program was directly terminated, causing the front end to be unable to link to the server, and the map creation failed. How should I solve it? In addition, when I used ros to play the program, it also appeared that the data set was not played, and the server terminated the program. What should I do?

    opened by liming-jing 4
  • How to get the location information of different agents in the map?

    How to get the location information of different agents in the map?

    Hello, I ran two agents through the tutorial in your README, but only one pose topic (/covins_markers_be) is published in the terminal, I want to get the information of each agent in the global coordinate system, such as /covins_markers_be_agent1 and / covins_markers_be_agent2, is there any way to get it? Looking forward to your reply.

    opened by zhouleiqiang 3
  • catkin build ORB_SLAM3 error

    catkin build ORB_SLAM3 error

    Hello, my system is ubuntu20.04 noetic. When I install to catkin build ORBSLAM3 according to your steps, this error is reported. Do you have a solution? Looking forward to your reply!!!!

    Errors << ORB_SLAM3:cmake /home/robot/ros_ws/logs/ORB_SLAM3/build.cmake.034.log
    CMake Warning (dev) in CMakeLists.txt: No project() command is present. The top-level CMakeLists.txt file must contain a literal, direct call to the project() command. Add a line of code such as

    project(ProjectName)
    

    near the top of the file, but after cmake_minimum_required().

    CMake is pretending there is a "project(Project)" command on the first line. This warning is for project developers. Use -Wno-dev to suppress it.

    CMake Deprecation Warning at /opt/ros/noetic/share/ros/core/rosbuild/rosbuild.cmake:7 (cmake_policy): The OLD behavior for policy CMP0011 will be removed from a future version of CMake.

    The cmake-policies(7) manual explains that the OLD behaviors of all policies are deprecated and that a policy should be set to OLD only under specific short-term circumstances. Projects should be ported to the NEW behavior and not rely on setting a policy to OLD. Call Stack (most recent call first): CMakeLists.txt:2 (include)

    CMake Deprecation Warning at /opt/ros/noetic/share/ros/core/rosbuild/rosbuild.cmake:16 (cmake_policy): The OLD behavior for policy CMP0002 will be removed from a future version of CMake.

    The cmake-policies(7) manual explains that the OLD behaviors of all policies are deprecated and that a policy should be set to OLD only under specific short-term circumstances. Projects should be ported to the NEW behavior and not rely on setting a policy to OLD. Call Stack (most recent call first): CMakeLists.txt:2 (include)

    CMake Deprecation Warning at /opt/ros/noetic/share/ros/core/rosbuild/rosbuild.cmake:18 (cmake_policy): The OLD behavior for policy CMP0003 will be removed from a future version of CMake.

    The cmake-policies(7) manual explains that the OLD behaviors of all policies are deprecated and that a policy should be set to OLD only under specific short-term circumstances. Projects should be ported to the NEW behavior and not rely on setting a policy to OLD. Call Stack (most recent call first): CMakeLists.txt:2 (include)

    CMake Deprecation Warning at /opt/ros/noetic/share/ros/core/rosbuild/rosbuild.cmake:20 (cmake_policy): The OLD behavior for policy CMP0005 will be removed from a future version of CMake.

    The cmake-policies(7) manual explains that the OLD behaviors of all policies are deprecated and that a policy should be set to OLD only under specific short-term circumstances. Projects should be ported to the NEW behavior and not rely on setting a policy to OLD. Call Stack (most recent call first): CMakeLists.txt:2 (include)

    CMake Deprecation Warning at /opt/ros/noetic/share/ros/core/rosbuild/rosbuild.cmake:23 (cmake_policy): The OLD behavior for policy CMP0011 will be removed from a future version of CMake.

    The cmake-policies(7) manual explains that the OLD behaviors of all policies are deprecated and that a policy should be set to OLD only under specific short-term circumstances. Projects should be ported to the NEW behavior and not rely on setting a policy to OLD. Call Stack (most recent call first): CMakeLists.txt:2 (include)

    [rosbuild] Building package ORB_SLAM3 [rosbuild] Error from syntax check of ORB_SLAM3/manifest.xml Traceback (most recent call last): File "/usr/lib/python3.8/encodings/init.py", line 31, in import codecs File "/usr/lib/python3.8/codecs.py", line 96 *, _is_text_encoding=None): ^ SyntaxError: invalid syntax CMake Error at /opt/ros/noetic/share/ros/core/rosbuild/private.cmake:77 (message): [rosbuild] Syntax check of ORB_SLAM3/manifest.xml failed; aborting Call Stack (most recent call first): /opt/ros/noetic/share/ros/core/rosbuild/public.cmake:174 (_rosbuild_check_manifest) CMakeLists.txt:4 (rosbuild_init)

    cd /home/robot/ros_ws/build/ORB_SLAM3; catkin build --get-env ORB_SLAM3 | catkin env -si /usr/bin/cmake /home/robot/ros_ws/src/covins/orb_slam3/Examples/ROS/ORB_SLAM3 --no-warn-unused-cli -DCATKIN_DEVEL_PREFIX=/home/robot/ros_ws/devel -DCMAKE_INSTALL_PREFIX=/home/robot/ros_ws/install -DCMAKE_BUILD_TYPE=RelWithDebInfo; cd -

    .......................................................................................................................................................................................................... Failed << ORB_SLAM3:cmake [ Exited with code 1 ]
    Failed <<< ORB_SLAM3 [ 0.2 seconds ]
    [build] Summary: 7 of 8 packages succeeded.
    [build] Ignored: 72 packages were skipped or are blacklisted.
    [build] Warnings: None.
    [build] Abandoned: None.
    [build] Failed: 1 packages failed.
    [build] Runtime: 1.2 seconds total.

    opened by zhouleiqiang 3
  • failed to run in ros

    failed to run in ros

    hello, i have a question: after the following steps: In ~/ws/covins_ws/src/covins/orb_slam3/Examples/ROS/ORB_SLAM3/launch/launch_ros_euroc.launch: adjust the paths for voc and cam cd to orb_slam3/ and run roslaunch ORB_SLAM3 launch_ros_euroc.launch the error occurs: ERROR: cannot launch node of type [ORB_SLAM3/Mono_Inertial]: Cannot locate node of type [Mono_Inertial] in package [ORB_SLAM3]. Make sure file exists in package path and permission is set to executable (chmod +x) how to solve it?

    opened by selfInnovator 2
  • How to run COVINS front-end on different machines connected through a wireless network ?

    How to run COVINS front-end on different machines connected through a wireless network ?

    Hi ! @patriksc I've been trying to run COVINS front-end on different machines, but it seems it does not have tutourial about this. I can see the tutourial about using my own camera to perform the fornt-end , but it seems it is all performed on one machine(fornt-end and back-end). So how to exactly do this ? I didn't see any thing in CCM-SLAM tutourial either .

    opened by Janebek 2
  • What happens to keyframes received by the front-end ?

    What happens to keyframes received by the front-end ?

    Is this source complete? What happens to keyframes received at the front-end? In communicator_base.cpp , looking at auto CommunicatorBase::ProcessBufferIn()->void function, nothing seems to be using buffer_keyframes_in or buffer_landmarks_in.

    Also, the following functions don't do anything:

    if(this->TryLock()){
        this->ProcessKeyframeMessages()
        this->ProcessLandmarkMessages()
        this->ProcessNewKeyframes()
        this->ProcessNewLandmarks()
        this->ProcessAdditional()
        this->UnLock()
    }
    

    Are you planing on releasing the full code anytime in the future?

    opened by Tariq-Abuhashim 2
  • how to find the loop of the same agent

    how to find the loop of the same agent

    Hi! Thanks for your works! I find all loops detected by covins are from different agent when I used the EUROC dataset MH1. So, if I want to get loops from the single agent, what should I do?

    opened by XiliangLi 3
  • Docker multi-arch build and push to registries

    Docker multi-arch build and push to registries

    This extends the current docker build to use Buildx for multiple architectures and also expands so that the images can be pushed to arbitrary registries. There is also technical checks because multiarch requires at least 32GB of memory to build two images. Also instead of setting the number of jobs to 14 and then moving it down, it sets it to half the number of processors. The current C compiler will crash if there is not enough memory and there is now a way to monitor this with make statc

    • fix, feat: docker buildx on Mac, adding auto docker build
    • fix: readme.md ``` to ` change to vis4rob
    • fix: docker makefile push or load and NR_JOBS set
    opened by richtong 0
  • covins docker build does not work with multiple architectures or work with a container registry

    covins docker build does not work with multiple architectures or work with a container registry

    We want to be able to do more than a local build of the container and also to support multiple architecture that's is both Intel and M1 mac.

    see the pull request PR#1 for a revamp of ./docker that does this. Also revamped the make file to add the ability to build with buildkit for multiple architectures and to push to different registries.

    opened by richtong 0
  • Segfaults reported after commit e21f25992369d39c9abb920259dd8fef3f30d973

    Segfaults reported after commit e21f25992369d39c9abb920259dd8fef3f30d973

    Some users have reported running into a segfault after commit e21f25992369d39c9abb920259dd8fef3f30d973 (see issue #2). The maintainers cannot reproduce this issue, therefore, this needs to be observed whether it occurs for more users in the future. Since the issue was most likely introduced by the correction of the thread handing, we a special branch nothreadfix was created, which is similar to the current master, but does not have the thread handling corrections.

    When using this branch, the program will therefore still report terminate called without an active exception on termination, which can be ignored.

    under observation 
    opened by patriksc 4
  • Docker build fails when COVINS was previously built in catkin workspace on host

    Docker build fails when COVINS was previously built in catkin workspace on host

    Building the docker image from COVINS cloned into a catkin workspace fails, if COVINS was previously built in this workspace on the host machine using the provided instructions from the manual. On a freshly cloned version of COVINS (no catkin build process executed), the docker image builds smoothly.

    bug 
    opened by patriksc 0
Owner
ETHZ V4RL
Vision for Robotics Lab, ETH Zurich
ETHZ V4RL
Multi-robot collaborative exploration and mapping through Voronoi partition and DRL in unknown environment

Voronoi Multi_Robot Collaborate Exploration Introduction In the unknown environment, the cooperative exploration of multiple robots is completed by Vo

PeaceWord 6 Nov 22, 2022
A 3D Dense mapping backend library of SLAM based on taichi-Lang designed for the aerial swarm.

TaichiSLAM This project is a 3D Dense mapping backend library of SLAM based Taichi-Lang, designed for the aerial swarm. Intro Taichi is an efficient d

XuHao 230 Dec 19, 2022
VID-Fusion: Robust Visual-Inertial-Dynamics Odometry for Accurate External Force Estimation

VID-Fusion VID-Fusion: Robust Visual-Inertial-Dynamics Odometry for Accurate External Force Estimation Authors: Ziming Ding , Tiankai Yang, Kunyi Zhan

ZJU FAST Lab 86 Nov 18, 2022
We utilize deep reinforcement learning to obtain favorable trajectories for visual-inertial system calibration.

Unified Data Collection for Visual-Inertial Calibration via Deep Reinforcement Learning Update: The lastest code will be updated in this branch. Pleas

ETHZ ASL 27 Dec 29, 2022
SSL_SLAM2: Lightweight 3-D Localization and Mapping for Solid-State LiDAR (mapping and localization separated) ICRA 2021

SSL_SLAM2 Lightweight 3-D Localization and Mapping for Solid-State LiDAR (Intel Realsense L515 as an example) This repo is an extension work of SSL_SL

Wang Han 王晗 1.3k Jan 8, 2023
FLVIS: Feedback Loop Based Visual Initial SLAM

FLVIS Feedback Loop Based Visual Inertial SLAM 1-Video EuRoC DataSet MH_05 Handheld Test in Lab FlVIS on UAV Platform 2-Relevent Publication: Under Re

UAV Lab - HKPolyU 182 Dec 4, 2022
Official page of Struct-MDC (RA-L'22 with IROS'22 option); Depth completion from Visual-SLAM using point & line features

Struct-MDC (click the above buttons for redirection!) Official page of "Struct-MDC: Mesh-Refined Unsupervised Depth Completion Leveraging Structural R

Urban Robotics Lab. @ KAIST 37 Dec 22, 2022
This project uses reinforcement learning on stock market and agent tries to learn trading. The goal is to check if the agent can learn to read tape. The project is dedicated to hero in life great Jesse Livermore.

Reinforcement-trading This project uses Reinforcement learning on stock market and agent tries to learn trading. The goal is to check if the agent can

Deepender Singla 1.4k Dec 22, 2022
A real-time motion capture system that estimates poses and global translations using only 6 inertial measurement units

TransPose Code for our SIGGRAPH 2021 paper "TransPose: Real-time 3D Human Translation and Pose Estimation with Six Inertial Sensors". This repository

Xinyu Yi 261 Dec 31, 2022
A multi-entity Transformer for multi-agent spatiotemporal modeling.

baller2vec This is the repository for the paper: Michael A. Alcorn and Anh Nguyen. baller2vec: A Multi-Entity Transformer For Multi-Agent Spatiotempor

Michael A. Alcorn 56 Nov 15, 2022
Multi-task Multi-agent Soft Actor Critic for SMAC

Multi-task Multi-agent Soft Actor Critic for SMAC Overview The CARE formulti-task: Multi-Task Reinforcement Learning with Context-based Representation

RuanJingqing 8 Sep 30, 2022
A parallel framework for population-based multi-agent reinforcement learning.

MALib: A parallel framework for population-based multi-agent reinforcement learning MALib is a parallel framework of population-based learning nested

MARL @ SJTU 348 Jan 8, 2023
A Planar RGB-D SLAM which utilizes Manhattan World structure to provide optimal camera pose trajectory while also providing a sparse reconstruction containing points, lines and planes, and a dense surfel-based reconstruction.

ManhattanSLAM Authors: Raza Yunus, Yanyan Li and Federico Tombari ManhattanSLAM is a real-time SLAM library for RGB-D cameras that computes the camera

null 117 Dec 28, 2022
Real-Time SLAM for Monocular, Stereo and RGB-D Cameras, with Loop Detection and Relocalization Capabilities

ORB-SLAM2 Authors: Raul Mur-Artal, Juan D. Tardos, J. M. M. Montiel and Dorian Galvez-Lopez (DBoW2) 13 Jan 2017: OpenCV 3 and Eigen 3.3 are now suppor

Raul Mur-Artal 7.8k Dec 30, 2022
PyTorch implementation for ACL 2021 paper "Maria: A Visual Experience Powered Conversational Agent".

Maria: A Visual Experience Powered Conversational Agent This repository is the Pytorch implementation of our paper "Maria: A Visual Experience Powered

Jokie 22 Dec 12, 2022
PaddleRobotics is an open-source algorithm library for robots based on Paddle, including open-source parts such as human-robot interaction, complex motion control, environment perception, SLAM positioning, and navigation.

简体中文 | English PaddleRobotics paddleRobotics是基于paddle的机器人开源算法库集,包括人机交互、复杂运动控制、环境感知、slam定位导航等开源算法部分。 人机交互 主动多模交互技术TFVT-HRI 主动多模交互技术是通过视觉、语音、触摸传感器等输入机器人

null 185 Dec 26, 2022
Symmetry and Uncertainty-Aware Object SLAM for 6DoF Object Pose Estimation

SUO-SLAM This repository hosts the code for our CVPR 2022 paper "Symmetry and Uncertainty-Aware Object SLAM for 6DoF Object Pose Estimation". ArXiv li

Robot Perception & Navigation Group (RPNG) 97 Jan 3, 2023
A list of papers about point cloud based place recognition, also known as loop closure detection in SLAM (processing)

A list of papers about point cloud based place recognition, also known as loop closure detection in SLAM (processing)

Xin Kong 17 May 16, 2021
This package is for running the semantic SLAM algorithm using extracted planar surfaces from the received detection

Semantic SLAM This package can perform optimization of pose estimated from VO/VIO methods which tend to drift over time. It uses planar surfaces extra

Hriday Bavle 125 Dec 2, 2022