zang09/ORB_SLAM3_ROS2

Modification of repository so that this ROS2 wrapper can be used in navigation.

Opened this issue · 14 comments

Hi, people.
I modified the original codebase so that I could use it inside navigation.
https://github.com/jnskkmhr/orbslam3/tree/main

Here is what I did:

  • Modified the node to provide topics (tf2, tracked image, pose topics)
  • The stereo-inertial node did not work because of QOS setting in IMU subscriber, so I fixed this.
  • SLAM pose was an optical frame pose expressed in OpenCV frame, but I needed camera frame pose in ROS FLU coordinate.
  • The node provide map to odom (localization) transform.
  • Docker for easy development.

Currently, unfortunately, the stereo-inertial node does not work properly.
I see IMU initialization takes a lot of time, and the pose sometimes jumps.
This might be because of the wrong calibration configuration.
Please send PR if you know how to solve issues.

I tried to install your version, but I am stuck at a dependency problem: It seems that CmakeLists.txt cannot find the epoxy library.

colcon build --cmake-args -DCMAKE_CXX_FLAGS="-w" --symlink-install --packages-select orbslam3
Starting >>> orbslam3
--- stderr: orbslam3                         
CMake Error at CMakeLists.txt:33 (find_package):
  By not providing "Findepoxy.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "epoxy", but
  CMake did not find one.

  Could not find a package configuration file provided by "epoxy" with any of
  the following names:

    epoxyConfig.cmake
    epoxy-config.cmake

  Add the installation prefix of "epoxy" to CMAKE_PREFIX_PATH or set
  "epoxy_DIR" to a directory containing one of the above files.  If "epoxy"
  provides a separate development package or SDK, be sure it has been
  installed.


gmake: *** [Makefile:528: cmake_check_build_system] Error 1
---
Failed   <<< orbslam3 [0.69s, exited with code 2]
                                
Summary: 0 packages finished [1.09s]
  1 package failed: orbslam3
  1 package had stderr output: orbslam3

@NilsRublein
Did you use docker to build the package ?
Could you also check if this path is same in your case? (Path to ORB-SLAM3/CMakeModules)
If you are using docker, there might be other issues.

not sure where i'm supposed to run colcon build, but neither on the machine nor in the container it works.

@hermanndererdmann
Hey, apologies for the confusion.
I modified README so that it is clear where to run the colcon build.

By the way, I recommend that you use docker as it is difficult for me to figure out some dependency issues that some people may face.
I did a clean install of orbslam3 for sanity check again, and everything works just fine.

This is what i get. (no realsense connected, just trying to launch the package)

ubuntu@hp:~/Downloads/test/ros/src/orbslam3$ ./docker/build_image.sh
docker build /home/ubuntu/Downloads/test/ros/src/orbslam3/docker --tag orbslam3-ros2 -f /home/ubuntu/Downloads/test/ros/src/orbslam3/docker/dockerfile-foxy
[+] Building 1.8s (23/23) FINISHED docker:default
=> [internal] load build definition from dockerfile-foxy 0.0s
=> => transferring dockerfile: 2.32kB 0.0s
=> [internal] load metadata for docker.io/osrf/ros:foxy-desktop 1.4s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [ 1/19] FROM docker.io/osrf/ros:foxy-desktop@sha256:ce6126b2edd2231ed 0.0s
=> CACHED [ 2/19] RUN apt-get update && apt-get install -y --no-inst 0.0s
=> CACHED [ 3/19] WORKDIR /home/thirdparty 0.0s
=> CACHED [ 4/19] RUN git clone https://github.com/stevenlovegrove/Pango 0.0s
=> CACHED [ 5/19] RUN git clone https://github.com/jnskkmhr/ORB-SLAM3-ST 0.0s
=> CACHED [ 6/19] RUN cd ORB_SLAM3 && git pull origin && chmod +x build. 0.0s
=> CACHED [ 7/19] RUN cd ORB_SLAM3/Thirdparty/Sophus/build && make insta 0.0s
=> CACHED [ 8/19] RUN mkdir -p /etc/apt/keyrings && curl -sSf https://li 0.0s
=> CACHED [ 9/19] RUN apt-get update && apt-get install -y apt-transport 0.0s
=> CACHED [10/19] RUN echo "deb [signed-by=/etc/apt/keyrings/librealsens 0.0s
=> CACHED [11/19] RUN apt-get update && apt-get install -y librealsense2 0.0s
=> CACHED [12/19] WORKDIR /home/thirdparty/ros2_ws/src 0.0s
=> CACHED [13/19] RUN git clone https://github.com/IntelRealSense/realse 0.0s
=> CACHED [14/19] WORKDIR /home/thirdparty/ros2_ws 0.0s
=> CACHED [15/19] RUN rosdep install -i --from-path src --rosdistro foxy 0.0s
=> CACHED [16/19] RUN /bin/bash -c "source /opt/ros/foxy/setup.sh && col 0.0s
=> CACHED [17/19] WORKDIR /home/ros2_ws 0.0s
=> CACHED [18/19] RUN echo "source /opt/ros/foxy/setup.bash" >> /root/.b 0.0s
=> CACHED [19/19] RUN echo "source /home/thirdparty/ros2_ws/install/setu 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:8b7cfc5238fd6f98958b8ac986b628dea4df460e4f8df 0.0s
=> => naming to docker.io/library/orbslam3-ros2 0.0s

1 warning found (use --debug to expand):

  • LegacyKeyValueFormat: "ENV key=value" should be used instead of legacy "ENV key value" format (line 2)
    ubuntu@hp:/Downloads/test/ros/src/orbslam3$ ./docker/run_container.sh
    non-network local connections being added to access control list
    docker: Error response from daemon: Conflict. The container name "/orbslam3-ros2-container" is already in use by container "81fae4d3b3135d56929da1b9794d5d98fcae8c52f3c9d1a51a0c5a5092858ee3". You have to remove (or rename) that container to be able to reuse that name.
    See 'docker run --help'.
    ubuntu@hp:
    /Downloads/test/ros/src/orbslam3$ ./docker/run_container.sh
    non-network local connections being added to access control list
    root@hp:/home/ros2_ws# colcon build --cmake-args -DCMAKE_CXX_FLAGS="-w" --symlink-install --packages-select orbslam3
    [0.335s] WARNING:colcon.colcon_core.package_selection:ignoring unknown package 'orbslam3' in --packages-select

Summary: 0 packages finished [0.12s]
root@hp:/home/ros2_ws# ls
build install log
root@hp:/home/ros2_ws# source install/setup.bash
root@hp:/home/ros2_ws# ros2 launch realsense2_camera rs_launch.py enable_infra1:=true enable_infra2:=true enable_accel:=true enable_gyro:=true unite_imu_method:=2 infra_width:=640 infra_height:=480 camera_name:=d455 camera_namespace:=d455
[INFO] [launch]: All log files can be found below /root/.ros/log/2024-07-18-08-56-26-586723-hp-62
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [realsense2_camera_node-1]: process started with pid [64]
[realsense2_camera_node-1] [INFO] [1721292986.869427926] [d455.d455]: RealSense ROS v4.55.1
[realsense2_camera_node-1] [INFO] [1721292986.869600847] [d455.d455]: Built with LibRealSense v2.55.1
[realsense2_camera_node-1] [INFO] [1721292986.869615324] [d455.d455]: Running with LibRealSense v2.55.1
[realsense2_camera_node-1] [WARN] [1721292986.876328754] [d455.d455]: No RealSense devices were found!
^C[WARNING] [launch]: user interrupted with ctrl-c (SIGINT)
[realsense2_camera_node-1] [INFO] [1721292989.137370221] [rclcpp]: signal_handler(signal_value=2)
[INFO] [realsense2_camera_node-1]: process has finished cleanly [pid 64]
root@hp:/home/ros2_ws# ros2 launch orbslam3 -
--debug --print-description --show-arguments -n
--noninteractive --show-all-subprocesses-output -a -p
--print --show-args -d -s
root@hp:/home/ros2_ws# ros2 launch orbslam3 stereo_inertial_d455.launch.yaml
Package 'orbslam3' not found: "package 'orbslam3' not found, searching: ['/home/thirdparty/ros2_ws/install/realsense2_description', '/home/thirdparty/ros2_ws/install/realsense2_camera', '/home/thirdparty/ros2_ws/install/realsense2_camera_msgs', '/opt/ros/foxy']"
root@hp:/home/ros2_ws#

@hermanndererdmann
Please clone this orbslam3 repository under ~/ros2_ws/src (It's written in README).
It seems you cloned the repository in /Downloads/test/ros/src/orbslam3.
This is important since the docker/run_container.sh shell file mounts your host's ~/ros2_ws directory to /home/ros2_ws directory in container.

@NilsRublein Did you use docker to build the package ? Could you also check if this path is same in your case? (Path to ORB-SLAM3/CMakeModules) If you are using docker, there might be other issues.

@jnskkmhr I just tried to build it myself without the docker. In my case the path was not correct to the ORBSLAM3 repo, As you forked from this repo, I expected you also used this version of ORBSLAM3. After fixing the path and some dependencies (sophus & OpenCV) I managed to build and run it!

@NilsRublein
That's good to hear.
On my side, I am using modified ORB-SLAM3-Stereo-Fixed repo as I failed to build it.
https://github.com/jnskkmhr/ORB-SLAM3-STEREO-FIXED
I remember it was something related to find_package(epoxy) and find_package(OpenGL).

I did not explain this in README as OS3 is automatically built inside docker file.
https://github.com/jnskkmhr/orbslam3/blob/e9e05bc96cf8572e117b73fda14054e7d3bb2bda/docker/dockerfile-foxy#L33C15-L33C69

Btw, can you also let me know if you face a pose scale issue?
I think it is related to calibration, and I found out this when I compared OS3 with T265 VIO.

@jnskkmhr Thank you for your great contributions.

Can I also use your repository (https://github.com/jnskkmhr/orbslam3/tree/main) with Humble?

@NamTruongTran
Hi, I have not tested the repository with Humble yet.
You need to change the version of OpenCV here (I think apt in Ubuntu22.04 installs 4.5.4) or source build OpenCV4.2 on Ubuntu22.04 with humble.

@jnskkmhr

Thank you so much for you reply i really appreciate your time.
I want to ./build.sh this:
https://github.com/zang09/ORB-SLAM3-STEREO-FIXED

I got the following error message:

help2

help

I setup:
-Ubuntu 20.04 ROS2 foxy
-libopenCV version 4.2.0 (build from source)

"I have been stuck for almost 2 days now."
Do you have any solution for that?

Thank you !

@NamTruongTran
Please use this: https://github.com/jnskkmhr/ORB-SLAM3-STEREO-FIXED instead of https://github.com/zang09/ORB-SLAM3-STEREO-FIXED
I modified couple lines in source code and CMakeLists.txt as there were dependency errors.

Also please refer to this: jnskkmhr#1
I do not want to deal with host install issues.
That is why I highly recommend that you use docker.
In your case, you need to base your docker image on jetson ubuntu 20.04.

@jnskkmhr

first of all thanks for your contribution,

I just tested on Ubuntu 22.04 with ros2 humble, the package is built (here is my CMakeLists.txt, and it is needed to set correct path of ORBSLAM3 lib folder location from CMakeModules/FindORB_SLAM3.cmake to set(ORB_SLAM3_ROOT_DIR "~/thirdparty/ORB_SLAM3")). After that the nodes are started and working, however, have not conducted a deep test on if the published odometry is correct, (I will be back soon), I will push to your repo under branch humble version

@adamanov
Hi, thanks for the contribution.
I think the current odometry has some scale issues.
I still have not figured out this problem yet, so I highly welcome your PR in the future.