• DepthAIROS
  • How to synchronize rectified left and right frames ?

@ShivamSharma it will work as well, up to the user. The code posted above looks correct, yes. Does it not work as expected?

    erik
    According to SLAM algorithms like RTABMAP and Isaac SLAM, it doesn't synchronize. Can you help me get good output from SLAM? I think the current issue is synchronization. I get jitter messages of 66 ms or 100 ms difference between consecutive frames when I run Isaac slam, and in RTABMAP I get a constant 0.033 s difference between the left and right frames. Rtabmap also complains sometimes that it has not received frames in the 5-second timeframe, even though the fps is around 25. I thought this was related to QoS policy in ROS, but I have tried different policies and have had no success with SLAM so far.

    The QoS policy is the following:

    // Create a custom QoS profile
        rmw_qos_profile_t custom_qos_profile = rmw_qos_profile_default;
        custom_qos_profile.history = RMW_QOS_POLICY_HISTORY_KEEP_LAST;
        custom_qos_profile.depth = 1; // Keep only the last message
        custom_qos_profile.reliability = RMW_QOS_POLICY_RELIABILITY_BEST_EFFORT;
        custom_qos_profile.durability = RMW_QOS_POLICY_DURABILITY_VOLATILE;
        custom_qos_profile.deadline = RMW_QOS_DEADLINE_DEFAULT;
        custom_qos_profile.lifespan = RMW_QOS_LIFESPAN_DEFAULT;
        custom_qos_profile.liveliness = RMW_QOS_POLICY_LIVELINESS_SYSTEM_DEFAULT;
        custom_qos_profile.liveliness_lease_duration =
            RMW_QOS_LIVELINESS_LEASE_DURATION_DEFAULT;
        custom_qos_profile.avoid_ros_namespace_conventions = false;
    
        // Convert rmw_qos_profile_t to rclcpp::QoS
        auto qos =
            rclcpp::QoS(rclcpp::QoSInitialization::from_rmw(custom_qos_profile));
    
        rectifLeftImagePub = this->create_publisher<sensor_msgs::msg::Image>(
            "left/image_rect", qos);

    I process the synchronized raw frames with OpenCV using the rectification map created from the calibration, and then publish them next to each other inside the while loop. Where am I going wrong? I give the Depthai timestamp to the header of info and image messages.

    Like the following:

    rclcpp::Time frame_time(
                leftFrame->getTimestamp().time_since_epoch().count());

    If you could help me with this issue, I would really appreciate it. My employment depends on getting the slam working on this OAK camera setup.

    erik
    Thanks a lot for your quick replies.

    Will the slam that you mentioned run on the Jetson Orin Nano in real time with the custom oak camera setup I have?

    Which branch of depthai_core I have to switch to? I currently use the main branch, which doesn't have a folder for slam. Will I be able to get the map in ROS 2 from this slam?

    • erik replied to this.

      ShivamSharma Yes, it will. Should even run on RPI5. Branch is in the URL, v3_develop. Not sure about the ros2 part, but you can just publish the map to ros I assume.

        erik

        Hi,

        I changed the branch to the v3_develop branch. I installed it using the cmake command given in the readme file. When I first ran the slam file, I got an error for rerun and then I ran:
        $ /usr/bin/python3 /home/shivam157/depthai-core/examples/python/install_requirements.py --install_rerun

        Which gave me the following error:

        ERROR: Failed building wheel for depthai
        Failed to build depthai
        ERROR: ERROR: Failed to build installable wheels for some pyproject.toml based projects (depthai)
        Couldn't install dependencies as wheels and trying to compile from sources failed

        Depthai-python was installed I don't know what the issue is.

        After that, I ran:

        
        $ python3 rtabmap_vio_slam.py 
        Traceback (most recent call last):
          File "/home/shivam157/depthai-core/examples/python/RVC2/VSLAM/rtabmap_vio_slam.py", line 3, in <module>
            from rerun_node import RerunNode
          File "/home/shivam157/depthai-core/examples/python/RVC2/VSLAM/rerun_node.py", line 13, in <module>
            class RerunNode(dai.node.ThreadedHostNode):
        AttributeError: module 'depthai.node' has no attribute 'ThreadedHostNode'

        What do I need to do to run this SLAM?

        erik
        I have never used Github Actions, so it is not very clear to me how I can install Python Depthai. Can't I just use pip3 install depthai? Like given in this website

        How long do I have to wait for wheels to be ready?

        Hi @erik , I have an OAK-D Pro and NVIDIA AGX Orin.
        Can I run VIO with `dai.node.RTABMapVIO` in this setup? or does it only support RCV3?
        and is there any documentation associated to VIO or VSLAM?
        Thanks for you feedback in advance.

        Michael

        • erik replied to this.

          michaelphlin Yep you can, in that case the RTABMapVIO would run on the NVIDIA AGX Orin, so device would only provide color/depth/IMU stream.

          erik

          I ran Python3 install_requirements.py today and I still see that it is building the wheels and giving an error:

          shivam157@ubuntu:~/depthai-core/examples/python$ python3 install_requirements.py
          pip 24.2 from /home/shivam157/.local/lib/python3.10/site-packages/pip (python 3.10)
          Requirement already satisfied: pip in /home/shivam157/.local/lib/python3.10/site-packages (24.2)
          Requirement already satisfied: pyyaml in /home/shivam157/.local/lib/python3.10/site-packages (6.0.1)
          Requirement already satisfied: requests in /home/shivam157/.local/lib/python3.10/site-packages (2.32.3)
          Requirement already satisfied: charset-normalizer<4,>=2 in /home/shivam157/.local/lib/python3.10/site-packages (from requests) (2.0.12)
          Requirement already satisfied: idna<4,>=2.5 in /usr/lib/python3/dist-packages (from requests) (3.3)
          Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/lib/python3/dist-packages (from requests) (1.26.5)
          Requirement already satisfied: certifi>=2017.4.17 in /usr/lib/python3/dist-packages (from requests) (2020.6.20)
          Looking in indexes: https://pypi.org/simple, https://artifacts.luxonis.com/artifactory/luxonis-python-snapshot-local
          Collecting depthai==3.0.0-alpha.0.dev0+25a9f0057d769b430bf3a543eaa8f33254518d03
            Using cached https://artifacts.luxonis.com/artifactory/luxonis-python-snapshot-local/depthai/depthai-3.0.0a0.dev0%2B25a9f0057d769b430bf3a543eaa8f33254518d03.tar.gz (187 kB)
            Installing build dependencies ... done
            Getting requirements to build wheel ... done
            Preparing metadata (pyproject.toml) ... done
          Building wheels for collected packages: depthai
            Building wheel for depthai (pyproject.toml) ... error
            error: subprocess-exited-with-error
            
            × Building wheel for depthai (pyproject.toml) did not run successfully.
            \u2502 exit code: 1
            \u2570\u2500> [68 lines of output]
                /tmp/pip-build-env-8tz847ck/overlay/local/lib/python3.10/dist-packages/setuptools/dist.py:289: InformationOnly: Normalizing '3.0.0-alpha.0.dev0+25a9f0057d769b430bf3a543eaa8f33254518d03' to '3.0.0a0.dev0+25a9f0057d769b430bf3a543eaa8f33254518d03'
                  self.metadata.version = self._normalize_version(self.metadata.version)
                running bdist_wheel
                running build
                running build_py
                creating build
                creating build/lib.linux-aarch64-cpython-310
                creating build/lib.linux-aarch64-cpython-310/depthai_cli
                copying depthai_cli/__init__.py -> build/lib.linux-aarch64-cpython-310/depthai_cli
                copying depthai_cli/depthai_cli.py -> build/lib.linux-aarch64-cpython-310/depthai_cli
                running build_ext
                CMake Warning:
                  Ignoring extra path from command line:
                
                   "/tmp"
                
                
                CMake Error: The source directory "/tmp" does not appear to contain CMakeLists.txt.
                Specify --help for usage, or press the help button on the CMake GUI.
                Traceback (most recent call last):
                  File "/home/shivam157/.local/lib/python3.10/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
                    main()
                  File "/home/shivam157/.local/lib/python3.10/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
                    json_out['return_val'] = hook(**hook_input['kwargs'])
                  File "/home/shivam157/.local/lib/python3.10/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 251, in build_wheel
                    return _build_backend().build_wheel(wheel_directory, config_settings,
                  File "/tmp/pip-build-env-8tz847ck/overlay/local/lib/python3.10/dist-packages/setuptools/build_meta.py", line 415, in build_wheel
                    return self._build_with_temp_dir(
                  File "/tmp/pip-build-env-8tz847ck/overlay/local/lib/python3.10/dist-packages/setuptools/build_meta.py", line 397, in _build_with_temp_dir
                    self.run_setup()
                  File "/tmp/pip-build-env-8tz847ck/overlay/local/lib/python3.10/dist-packages/setuptools/build_meta.py", line 497, in run_setup
                    super().run_setup(setup_script=setup_script)
                  File "/tmp/pip-build-env-8tz847ck/overlay/local/lib/python3.10/dist-packages/setuptools/build_meta.py", line 313, in run_setup
                    exec(code, locals())
                  File "<string>", line 220, in <module>
                  File "/tmp/pip-build-env-8tz847ck/overlay/local/lib/python3.10/dist-packages/setuptools/__init__.py", line 108, in setup
                    return distutils.core.setup(**attrs)
                  File "/tmp/pip-build-env-8tz847ck/overlay/local/lib/python3.10/dist-packages/setuptools/_distutils/core.py", line 184, in setup
                    return run_commands(dist)
                  File "/tmp/pip-build-env-8tz847ck/overlay/local/lib/python3.10/dist-packages/setuptools/_distutils/core.py", line 200, in run_commands
                    dist.run_commands()
                  File "/tmp/pip-build-env-8tz847ck/overlay/local/lib/python3.10/dist-packages/setuptools/_distutils/dist.py", line 970, in run_commands
                    self.run_command(cmd)
                  File "/tmp/pip-build-env-8tz847ck/overlay/local/lib/python3.10/dist-packages/setuptools/dist.py", line 945, in run_command
                    super().run_command(command)
                  File "/tmp/pip-build-env-8tz847ck/overlay/local/lib/python3.10/dist-packages/setuptools/_distutils/dist.py", line 989, in run_command
                    cmd_obj.run()
                  File "/tmp/pip-build-env-8tz847ck/overlay/local/lib/python3.10/dist-packages/setuptools/command/bdist_wheel.py", line 373, in run
                    self.run_command("build")
                  File "/tmp/pip-build-env-8tz847ck/overlay/local/lib/python3.10/dist-packages/setuptools/_distutils/cmd.py", line 316, in run_command
                    self.distribution.run_command(command)
                  File "/tmp/pip-build-env-8tz847ck/overlay/local/lib/python3.10/dist-packages/setuptools/dist.py", line 945, in run_command
                    super().run_command(command)
                  File "/tmp/pip-build-env-8tz847ck/overlay/local/lib/python3.10/dist-packages/setuptools/_distutils/dist.py", line 989, in run_command
                    cmd_obj.run()
                  File "/tmp/pip-build-env-8tz847ck/overlay/local/lib/python3.10/dist-packages/setuptools/_distutils/command/build.py", line 135, in run
                    self.run_command(cmd_name)
                  File "/tmp/pip-build-env-8tz847ck/overlay/local/lib/python3.10/dist-packages/setuptools/_distutils/cmd.py", line 316, in run_command
                    self.distribution.run_command(command)
                  File "/tmp/pip-build-env-8tz847ck/overlay/local/lib/python3.10/dist-packages/setuptools/dist.py", line 945, in run_command
                    super().run_command(command)
                  File "/tmp/pip-build-env-8tz847ck/overlay/local/lib/python3.10/dist-packages/setuptools/_distutils/dist.py", line 989, in run_command
                    cmd_obj.run()
                  File "<string>", line 93, in run
                  File "<string>", line 217, in build_extension
                  File "/usr/lib/python3.10/subprocess.py", line 369, in check_call
                    raise CalledProcessError(retcode, cmd)
                subprocess.CalledProcessError: Command '['cmake', '/tmp', '-DDEPTHAI_BUILD_PYTHON=ON', '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/tmp/pip-install-sjf68bin/depthai_306aec13e4264ef3b83fdb9d5d84ad54/build/lib.linux-aarch64-cpython-310/', '-DPYTHON_EXECUTABLE=/usr/bin/python3', '-DDEPTHAI_PYTHON_COMMIT_HASH=25a9f0057d769b430bf3a543eaa8f33254518d03', '-DCMAKE_BUILD_TYPE=Release', '-DHUNTER_CONFIGURATION_TYPES=Release', '-DHUNTER_JOBS_NUMBER=2']' returned non-zero exit status 1.
                [end of output]
            
            note: This error originates from a subprocess, and is likely not a problem with pip.
            ERROR: Failed building wheel for depthai
          Failed to build depthai
          ERROR: ERROR: Failed to build installable wheels for some pyproject.toml based projects (depthai)
          Processing /home/shivam157/depthai-core/bindings/python
            Installing build dependencies ... done
            Getting requirements to build wheel ... done
            Preparing metadata (pyproject.toml) ... done
          Building wheels for collected packages: depthai
            Building wheel for depthai (pyproject.toml) ... /
          
          
            note: This error originates from a subprocess, and is likely not a problem with pip.
            ERROR: Failed building wheel for depthai
          Failed to build depthai
          ERROR: ERROR: Failed to build installable wheels for some pyproject.toml based projects (depthai)
          Couldn't install dependencies as wheels and trying to compile from sources failed

            ShivamSharma

            @erik I have the same issue today after I follow the CMake instruction with v3_develop branch.

            Is there any instruction can guide us step by step setup this VIO/ Rtabmap SLAM pipeline?

            Thanks.

            Michael

            @michaelphlin @ShivamSharma
            Checkout to 4b6fb2bd on depthai-core. I used this commit as it has already built wheels. Go to examples/python, create venv, source it, call install_requirements.py. This will install required depthai libraries. Then go to RVC2/VSLAM folder, and run eg. basalt_vio.py. Note that this is heavily WIP, so some things won't work.

            @erik Thanks for your help!!! the lib dependency is not longer a issue now.
            After adding imu.enableFirmwareUpdate(True) line into rtabmap_vio_slam.py and re-running it, I receive the following error message:
            Does that means I need to calibrate the IMU and camera again? or is there any factor calibrated matrix I can use for SLAM?
            python3 rtabmap_vio_slam.py

            [1844301041693CF500] [3.6] [1.682] [IMU(2)] [warning] IMU 'enableFirmwareUpdate' is deprecated! Use 'device.startIMUFirmwareUpdate'

            [1844301041693CF500] [3.6] [1.710] [IMU(2)] [warning] Performing IMU firmware update, do NOT disconnect the device.

            [1844301041693CF500] [3.6] [1.832] [IMU(2)] [warning] IMU firmware update status: 0%

            [2024-07-30 15:59:45.717] [ThreadedNode] [error] Node threw exception, stopping the node. Exception message: IMU calibration data is not available on device yet.

            Hi @erik

            Yes, based on the spec, I should have BNO086 on my OAK-D Pro and OAK-D Pro W.

            If there’s extra step I need to initialize my IMU, please kindly let me know.

            I really appreciate your help on this issue.

            sincerely,

            Michael

            @jakaskerl @erik Does depthai API or SDK have a script to calibrate IMU? How do I calculate the IMU extrinsics of the OAK FFC 3P? Will the slam work without IMU?