Skip to main content

LibMultiSense python package wrapped using pybind11

Project description

LibMultiSense

LibMultiSense is a C++ and Python library designed to simplify interaction with the MultiSense S family of stereo sensors developed by Carnegie Robotics. It provides a comprehensive, easy-to-use API for capturing and processing stereo sensor data an generating depth images, color images, and 3D point clouds.

Official product page: Carnegie Robotics MultiSense Products

Detailed documentation: LibMultiSense Documentation

LibMultiSense was recently refactored to have a new API. The following examples in the README all assume the user is using the new API. To build with the new API, the following CMake arguments should be set.

-DBUILD_LEGACY_API=0FF

The README for the Legacy API can be found here.

The LibMultiSense C++ and Python library has been tested with the following operating systems

  • Ubuntu
    • 20.04
    • 22.04
    • 24.04
  • MacOS Sequoia
  • Windows 11

Table of Contents

Client Networking Prerequisite

The MultiSense comes preconfigured with a static 10.66.171.21 IP address with a /24 subnet. To connect to the MultiSense, a client machine must be updated with an IP address on the 10.66.171 subnet.

Please see the host network configuration for details on how to set a client machine's IP address and MTU.

Quickstart Guide

Below are minimal examples demonstrating basic usage of LibMultiSense to capture rectified images from the camera.

Before running the examples make sure LibMultiSense is installed, and your machines network is properly configured.

For new users, it's recommended to start with the Python version of LibMultiSense. After installing the libmultisense package, several command-line utilities are automatically installed and can be run directly from your terminal:

  • multisense_device_info_utility: Display information about a connected MultiSense device.
  • multisense_save_image_utility: Save images (rectified, color, depth) from the camera to disk.
  • multisense_point_cloud_utility: Generate and save 3D point clouds in .ply format.
  • multisense_version_info_utility: Show firmware and hardware version information.
  • multisense_change_ip_utility: Update the network configuration of a MultiSense device.

Example usage:

multisense_device_info_utility --ip_address 10.66.171.21

Python

Install the LibMultiSenes python client and OpenCV dependency via

pip install libmultisense opencv-python
import libmultisense as lms
import cv2

channel_config = lms.ChannelConfig()
channel_config.ip_address = "10.66.171.21"
with lms.Channel.create(channel_config) as channel:
    channel.start_streams([lms.DataSource.LEFT_RECTIFIED_RAW, lms.DataSource.RIGHT_RECTIFIED_RAW])

    while True:
        frame = channel.get_next_image_frame()
        if frame:
            for source, image in frame.images.items():
                cv2.imwrite(str(source) + ".png", image.as_array)

C++

#include <MultiSense/MultiSenseChannel.hh>
#include <MultiSense/MultiSenseUtilities.hh>

namespace lms = multisense;

int main()
{
    const auto channel = lms::Channel::create(lms::Channel::Config{"10.66.171.21"});
    channel->start_streams({lms::DataSource::LEFT_RECTIFIED_RAW, lms::DataSource::RIGHT_RECTIFIED_RAW});

    while(true)
    {
        if (const auto image_frame = channel->get_next_image_frame(); image_frame)
        {
            for (const auto &[source, image]: image_frame->images)
            {
                const auto path = std::to_string(image_frame->frame_id) +  "_" +
                                  std::to_string(static_cast<int>(source)) + ".png";
                lms::write_image(image, path);
            }
        }
    }
    return 0;
}

Optional Dependencies When Building From Source

OpenCV

LibMultiSense optionally has OpenCV utility functions to make the LibMultiSense client API easier to integrate with existing systems. To build the OpenCV helpers the following CMake argument should be set

-DBUILD_OPENCV=ON

This will require a system installation of OpenCV, or an installation which can be pointed to with CMake's CMAKE_PREFIX_PATH argument

nlohmann json

LibMultiSense optionally uses nlohmann_json for serialization of base LibMultiSense types. To build the nlohmann_json serialization helpers the following CMake argument should be set

-DBUILD_JSON_SERIALIZATION=ON

This will require a system installation of nlohmann_json, or an installation which can be pointed to with CMake's CMAKE_PREFIX_PATH argument

pybind11

LibMultiSense optionally uses pybind11 to generate python bindings for the C++ API. To build the pybind11 python bindings the following CMake argument should be set

-DBUILD_PYTHON_BINDINGS=ON

This will require a system installation of pybind11, or an installation which can be pointed to with CMake's CMAKE_PREFIX_PATH argument

googletest

LibMultiSense optionally uses googletest for unit testing the C++ API. To build the googletest unit tests the following CMake argument should be set

-DBUILD_TESTS=ON

This will require a system installation of googletest, or an installation which can be pointed to with CMake's CMAKE_PREFIX_PATH argument


Installation

Linux

Python

PyPi (Recommended)

The following command installs/updates to the latest version of the LibMultisense Python API:

pip install --upgrade libmultisense

To avoid conflicts with other Python packages, it's recommended to utilize venv to isolate dependency installations.

From Source

LibMultiSense uses pybind11 to generate Python bindings for the base LibMultiSense API. These bindings can be installed via pip into a Python virtual environment or a local Python project.

To install the LibMultiSense Python bindings

> sudo apt install build-essential pybind11-dev nlohmann-json3-dev

> git clone https://github.com/carnegierobotics/LibMultiSense.git
> cd LibMultiSense
> pip install .

C++

LibMultiSense uses CMake for its build system.

To build the standalone LibMultiSense library and demonstration applications.

# Note this only needs to be run once before building
> sudo apt install build-essential nlohmann-json3-dev

> git clone https://github.com/carnegierobotics/LibMultiSense.git
> cd LibMultiSense
> mkdir build
> cd build && cmake -DBUILD_LEGACY_API=OFF -DBUILD_JSON_SERIALIZATION=ON -DCMAKE_INSTALL_PREFIX=../install ..
> make install
> cd ../install

To build the standalone LibMultiSense library without the demonstration applications, set the cmake variable -DMULTISENSE_BUILD_UTILITIES=OFF


MacOS

Python

PyPi (Recommended)

The following command installs/updates to the latest version of the LibMultisense Python API:

pip install --upgrade libmultisense

To avoid conflicts with other Python packages, it's recommended to utilize venv to isolate dependency installations.

From Source

LibMultiSense uses pybind11 to generate Python bindings for the base LibMultiSense API. These bindings can be installed via pip into a Python virtual environment or a local Python project.

To install the LibMultiSense Python bindings

> brew install pybind11 nlohmann-json

> git clone https://github.com/carnegierobotics/LibMultiSense.git
> cd LibMultiSense
> pip install .

C++

LibMultiSense uses CMake for its build system.

To build the standalone LibMultiSense library and demonstration applications.

# Note this only needs to be run once before building
> brew install nlohmann-json

> git clone https://github.com/carnegierobotics/LibMultiSense.git
> cd LibMultiSense
> mkdir build
> cd build && cmake -DBUILD_LEGACY_API=OFF -DBUILD_JSON_SERIALIZATION=ON -DCMAKE_INSTALL_PREFIX=../install ..
> make install
> cd ../install

To build the standalone LibMultiSense library without the demonstration applications, set the cmake variable -DMULTISENSE_BUILD_UTILITIES=OFF


Windows

Python

PyPi (Recommended)

The following command installs/updates to the latest version of the LibMultisense Python API.

After installing Python via the Microsoft Store execute the following command in a Powershell terminal

pip install --upgrade libmultisense

To avoid conflicts with other Python packages, it's recommended to utilize venv to isolate dependency installations.

From Source

LibMultiSense uses pybind11 to generate Python bindings for the base LibMultiSense API. These bindings can be installed via pip into a Python virtual environment or a local Python project. To ensure Windows has the proper build tools installed, please install Microsoft Visual Studio with the C++ and CMake extensions.

Note you will need to have a version of Python installed on your Windows system. This was tested with Python 3.9 installed via the Microsoft Store on Windows 11.

To install the LibMultiSense Python bindings open a powershell terminal and execute the following commands

> git clone https://github.com/carnegierobotics/LibMultiSense.git
> cd LibMultiSense
> git clone https://github.com/microsoft/vcpkg.git
> ./vcpkg/bootstrap-vcpkg.bat

> $Env:VCPKG_ROOT = ./vcpkg

> pip install .

C++

LibMultiSense uses CMake and vcpkg to build the LibMultiSense library. To ensure Windows has the proper build tools installed, please install Microsoft Visual Studio with the C++ and CMake extensions.

Open a powershell terminal and execute the following commands:

> git clone https://github.com/carnegierobotics/LibMultiSense.git
> cd LibMultiSense
> git clone https://github.com/microsoft/vcpkg.git
> ./vcpkg/bootstrap-vcpkg.bat

> $Env:VCPKG_ROOT = ./vcpkg

> cmake --build build --config Release --target install

CMake Project Integration

Integrating LibMultiSense into an existing CMake project is easy. There are two primary methods for integration: a local install on your system, or a submodule clone within your repository

Local Installation

LibMultiSense is installed on your system (i.e. in a location like /opt/multisense)

find_package(MultiSense)
target_link_libraries(<your-library-or-binary> MultiSense)

When running CMake, make sure to specify the location of the LibMultiSense install via -DCMAKE_PREFIX_PATH

Git Submodule

Clone the LibMultiSense repository into the existing project's source tree. In the main CMakeLists.txt file of the project, add the following lines:

 include_directories(LibMultiSense/source/LibMultiSense)
 add_subdirectory(LibMultiSense/source/LibMultiSense)

Documentation

Documentation of high-level LibMultiSense concepts can be found here

Doxygen documentation can be built for LibMultisense by running the Doxygen configuration file located in the docs directory

> cd LibMultiSense/docs
> doxygen Doxyfile

HTML and LaTex documentation will be generated in the docs directory.

Usage examples are included in the Doxygen documentation.


Support

To report an issue with this library or request a new feature, please use the GitHub issues system

For product support, please see the support section of our website Individual support requests can be created in our support portal

Wireshark Plugin

A Wireshark Lua dissector is provided in the wireshark directory to help analyze MultiSense network traffic on UDP port 9001.

Installation

To install the plugin:

Linux

Copy the plugin to your personal Wireshark plugins directory:

mkdir -p ~/.local/lib/wireshark/plugins
cp wireshark/multisense.lua ~/.local/lib/wireshark/plugins/

Windows

Copy wireshark/multisense.lua to %APPDATA%\Wireshark\plugins.

MacOS

Copy wireshark/multisense.lua to ~/.config/wireshark/plugins.

Manual Loading

Alternatively, you can load the plugin manually when starting Wireshark:

wireshark -X lua_script:wireshark/multisense.lua

Camera Configuration

Camera settings like resolution, exposure, FPS, gain, gamma, and white balance can be configured via the LibMultiSense image::Config

Python

import libmultisense as lms
import cv2

def main():
    channel_config = lms.ChannelConfig()
    channel_config.ip_address = "10.66.171.21"

    with lms.Channel.create(channel_config) as channel:
        if not channel:
            print("Invalid channel")
            exit(1)

        config = channel.get_config()
        config.frames_per_second = 10.0
        config.width = 960
        config.height = 600
        config.disparities = lms.MaxDisparities.D256
        config.image_config.auto_exposure_enabled = True
        config.image_config.gamma = 2.2
        if channel.set_config(config) != lms.Status.OK:
            print("Cannot set configuration")
            exit(1)

if __name__ == "__main__":
    main()

C++

#include <iostream>

#include <MultiSense/MultiSenseChannel.hh>
#include <MultiSense/MultiSenseUtilities.hh>

namespace lms = multisense;

int main(int argc, char** argv)
{
    const auto channel = lms::Channel::create(lms::Channel::Config{"10.66.171.21"});
    if (!channel)
    {
        std::cerr << "Failed to create channel" << std::endl;;
        return 1;
    }

    auto config = channel->get_config();
    config.frames_per_second = 10.0;
    config.width = 960;
    config.height = 600;
    config.disparities = lms::MultiSenseConfig::MaxDisparities::D256;
    config.image_config.auto_exposure_enabled = true;
    config.image_config.gamma = 2.2;
    if (const auto status = channel->set_config(config); status != lms::Status::OK)
    {
        std::cerr << "Cannot set config" << std::endl;
        return 1;
    }

    return 0;
}

Point Cloud Generation

Disparity images can be converted to 3D point cloud images using the client API.

The following modified version of the Quickstart example, converts disparity images to 3D point clouds colorized using the left rectified image.

Python

import libmultisense as lms
import cv2

def main():
    channel_config = lms.ChannelConfig()
    channel_config.ip_address = "10.66.171.21"

    with lms.Channel.create(channel_config) as channel:
        if not channel:
            print("Invalid channel")
            exit(1)

        if channel.start_streams([lms.DataSource.LEFT_RECTIFIED_RAW, lms.DataSource.LEFT_DISPARITY_RAW]) != lms.Status.OK:
            print("Unable to start streams")
            exit(1)

        while True:
            frame = channel.get_next_image_frame()
            if frame:
                point_cloud = lms.create_gray8_pointcloud(frame,
                                                         args.max_range,
                                                         lms.DataSource.LEFT_RECTIFIED_RAW,
                                                         lms.DataSource.LEFT_DISPARITY_RAW)

                print("Saving pointcloud for frame id: ", frame.frame_id)
                lms.write_pointcloud_ply(point_cloud, str(frame.frame_id) + ".ply")

if __name__ == "__main__":
    main()

C++

#include <iostream>

#include <MultiSense/MultiSenseChannel.hh>
#include <MultiSense/MultiSenseUtilities.hh>

namespace lms = multisense;

volatile bool done = false;

int main(int argc, char** argv)
{
    const auto channel = lms::Channel::create(lms::Channel::Config{"10.66.171.21"});
    if (!channel)
    {
        std::cerr << "Failed to create channel" << std::endl;;
        return 1;
    }

    if (const auto status = channel->start_streams({lms::DataSource::LEFT_RECTIFIED_RAW,
                                                    lms::DataSource::LEFT_DISPARITY_RAW}); status != lms::Status::OK)
    {
        std::cerr << "Cannot start streams: " << lms::to_string(status) << std::endl;
        return 1;
    }

    const double max_range_m = 20.0;

    while(!done)
    {
        if (const auto image_frame = channel->get_next_image_frame(); image_frame)
        {
            if (const auto point_cloud = lms::create_color_pointcloud<uint8_t>(image_frame.value(),
                                                                               max_range_m,
                                                                               lms::DataSource::LEFT_RECTIFIED_RAW,
                                                                               lms::DataSource::LEFT_DISPARITY_RAW); point_cloud)
            {
                std::cout << "Saving pointcloud for frame id: " << image_frame->frame_id << std::endl;
                lms::write_pointcloud_ply(point_cloud.value(), std::to_string(image_frame->frame_id) + ".ply");
            }
        }
    }

    return 0;
}

Depth Image Generation

Disparity images can be converted to depth images using the client API

The following modified version of the Quickstart example, converts disparity images to openni depth images and saves them to disk using OpenCV.

Python

import libmultisense as lms
import cv2

def main():
    channel_config = lms.ChannelConfig()
    channel_config.ip_address = "10.66.171.21"

    with lms.Channel.create(channel_config) as channel:
        if not channel:
            print("Invalid channel")
            exit(1)

        if channel.start_streams([lms.DataSource.LEFT_DISPARITY_RAW]) != lms.Status.OK:
            print("Unable to start streams")
            exit(1)

        # Set to true to save the depth image in the frame of the aux color camera
        in_aux_frame = False

        while True:
            frame = channel.get_next_image_frame()
            if frame:
                # MONO16 depth images are quantized to 1 mm per 1 pixel value to match the OpenNI standard.
                # For example, a depth image pixel with a value of 10 would correspond to a depth of 10mm
                depth_image = lms.create_depth_image(frame, lms.PixelFormat.MONO16, lms.DataSource.LEFT_DISPARITY_RAW, in_aux_frame, 65535)
                if depth_image:
                    print("Saving depth image for frame id: ", frame.frame_id)
                    cv2.imwrite(str(frame.frame_id) + ".png", depth_image.as_array)

if __name__ == "__main__":
    main()

C++

#include <iostream>

#include <opencv2/opencv.hpp>

#define HAVE_OPENCV 1
#include <MultiSense/MultiSenseChannel.hh>
#include <MultiSense/MultiSenseUtilities.hh>

namespace lms = multisense;

volatile bool done = false;

int main(int argc, char** argv)
{
    const auto channel = lms::Channel::create(lms::Channel::Config{"10.66.171.21"});
    if (!channel)
    {
        std::cerr << "Failed to create channel" << std::endl;;
        return 1;
    }

    if (const auto status = channel->start_streams({lms::DataSource::LEFT_DISPARITY_RAW}); status != lms::Status::OK)
    {
        std::cerr << "Cannot start streams: " << lms::to_string(status) << std::endl;
        return 1;
    }

    // Set to true to save the depth image in the frame of the aux color camera
    const bool in_aux_frame = false;

    while(!done)
    {
        if (const auto image_frame = channel->get_next_image_frame(); image_frame)
        {
            //
            // MONO16 depth will be quantized to mm to match OpenNI's depth format
            //
            if (const auto depth_image = lms::create_depth_image(image_frame.value(),
                                                                 lms::Image::PixelFormat::MONO16,
                                                                 lms::DataSource::LEFT_DISPARITY_RAW,
                                                                 in_aux_frame,
                                                                 65535); depth_image)
            {
                std::cout << "Saving depth image for frame id: " << image_frame->frame_id << std::endl;
                cv::imwrite(std::to_string(image_frame->frame_id) + ".png", depth_image->cv_mat());
            }
        }
    }

    return 0;
}

Color Image Generation

Luma and Chroma Aux images can be converted to BGR color images using the client API

The following modified version of the Quickstart example, converts luma and chroma aux images to BGR images and saves them to disk using OpenCV.

Python

import libmultisense as lms
import cv2

def main():
    channel_config = lms.ChannelConfig()
    channel_config.ip_address = "10.66.171.21"

    with lms.Channel.create(channel_config) as channel:
        if not channel:
            print("Invalid channel")
            exit(1)

        if channel.start_streams([lms.DataSource.AUX_RAW]) != lms.Status.OK:
            print("Unable to start streams")
            exit(1)

        while True:
            frame = channel.get_next_image_frame()
            if frame:
                bgr = lms.create_bgr_image(frame, lms.DataSource.AUX_RAW)
                if bgr:
                    cv2.imwrite(str(frame.frame_id) + ".png", bgr.as_array)

if __name__ == "__main__":
    main()

C++

#include <iostream>

#include <opencv2/opencv.hpp>

#define HAVE_OPENCV 1
#include <MultiSense/MultiSenseChannel.hh>
#include <MultiSense/MultiSenseUtilities.hh>

namespace lms = multisense;

volatile bool done = false;

int main(int argc, char** argv)
{
    const auto channel = lms::Channel::create(lms::Channel::Config{"10.66.171.21"});
    if (!channel)
    {
        std::cerr << "Failed to create channel" << std::endl;;
        return 1;
    }

    if (const auto status = channel->start_streams({lms::DataSource::AUX_RAW}); status != lms::Status::OK)
    {
        std::cerr << "Cannot start streams: " << lms::to_string(status) << std::endl;
        return 1;
    }

    while(!done)
    {
        if (const auto image_frame = channel->get_next_image_frame(); image_frame)
        {
            if (const auto bgr = create_bgr_image(image_frame.value(), lms::DataSource::AUX_RAW); bgr)
            {
                cv::imwrite(std::to_string(image_frame->frame_id) + ".png", bgr->cv_mat());
            }
        }
    }

    return 0;
}

Lighting Control

MultiSense units like the KS21 contain integrated lighting which can be controlled via the lighting_config. Some units also support driving external LEDs via GPIO.

Python

import libmultisense as lms

def main():
    channel_config = lms.ChannelConfig()
    channel_config.ip_address = "10.66.171.21"

    with lms.Channel.create(channel_config) as channel:
        if not channel:
            print("Invalid channel")
            exit(1)

        config = channel.get_config()

        # Check if the camera supports lighting
        if config.lighting_config is not None:
            # Internal LEDs (Integrated into the camera)
            if config.lighting_config.internal is not None:
                # Set the lighting intensity to 50%
                config.lighting_config.internal.intensity = 50.0
                # Enable flashing. When enabled the lights will only be on while the camera is exposing
                config.lighting_config.internal.flash = True

            # External LEDs (Driven via external GPIO)
            if config.lighting_config.external is not None:
                # Set the external lighting intensity to 100%
                config.lighting_config.external.intensity = 100.0
                # Sync external flash with the main stereo pair
                config.lighting_config.external.flash = lms.FlashMode.SYNC_WITH_MAIN_STEREO
                # Number of pulses per exposure (useful for human persistence of vision)
                config.lighting_config.external.pulses_per_exposure = 1

            if channel.set_config(config) != lms.Status.OK:
                print("Cannot set configuration")
                exit(1)

if __name__ == "__main__":
    main()

C++

#include <iostream>
#include <MultiSense/MultiSenseChannel.hh>

namespace lms = multisense;

int main(int argc, char** argv)
{
    const auto channel = lms::Channel::create(lms::Channel::Config{"10.66.171.21"});
    if (!channel)
    {
        std::cerr << "Failed to create channel" << std::endl;
        return 1;
    }

    auto config = channel->get_config();

    // Check if the camera supports lighting
    if (config.lighting_config)
    {
        // Internal LEDs (Integrated into the camera)
        if (config.lighting_config->internal)
        {
            // Set the lighting intensity to 50%
            config.lighting_config->internal->intensity = 50.0f;
            // Enable flashing. When enabled the lights will only be on while the camera is exposing
            config.lighting_config->internal->flash = true;
        }

        // External LEDs (Driven via external GPIO)
        if (config.lighting_config->external)
        {
            // Set the external lighting intensity to 100%
            config.lighting_config->external->intensity = 100.0f;
            // Sync external flash with the main stereo pair
            config.lighting_config->external->flash = lms::MultiSenseConfig::LightingConfig::ExternalConfig::FlashMode::SYNC_WITH_MAIN_STEREO;
            // Number of pulses per exposure (useful for human persistence of vision)
            config.lighting_config->external->pulses_per_exposure = 1;
        }

        if (const auto status = channel->set_config(config); status != lms::Status::OK)
        {
            std::cerr << "Cannot set configuration" << std::endl;
            return 1;
        }
    }

    return 0;
}

IMU Data Streaming

LibMultiSense supports streaming IMU data from the camera. The IMU must first be configured to enable the desired sensors (accelerometer, gyroscope) and set their sample rates and ranges.

Python

import libmultisense as lms

def main():
    channel_config = lms.ChannelConfig()
    channel_config.ip_address = "10.66.171.21"

    with lms.Channel.create(channel_config) as channel:
        if not channel:
            print("Invalid channel")
            exit(1)

        #
        # Get the current configuration
        #
        config = channel.get_config()

        #
        # Configure the IMU. We first need to get the IMU info to find supported rates and ranges
        #
        info = channel.get_info()
        if not info.imu:
            print("Sensor does not have an IMU")
            exit(1)

        imu_config = lms.ImuConfig()
        imu_config.samples_per_frame = 10 # Number of samples per ImuFrame

        # Enable Accelerometer. Select appropriate rate/range
        if info.imu.accelerometer:
            accel_mode = lms.ImuOperatingMode()
            accel_mode.enabled = True
            accel_mode.rate = info.imu.accelerometer.rates[0]
            accel_mode.range = info.imu.accelerometer.ranges[0]
            imu_config.accelerometer = accel_mode

        # Enable Gyroscope. Select appropriate rate/range
        if info.imu.gyroscope:
            gyro_mode = lms.ImuOperatingMode()
            gyro_mode.enabled = True
            gyro_mode.rate = info.imu.gyroscope.rates[0]
            gyro_mode.range = info.imu.gyroscope.ranges[0]
            imu_config.gyroscope = gyro_mode

        config.imu_config = imu_config
        if channel.set_config(config) != lms.Status.OK:
            print("Failed to set IMU configuration")
            exit(1)

        #
        # Start the IMU stream
        #
        if channel.start_streams([lms.DataSource.IMU]) != lms.Status.OK:
            print("Unable to start IMU stream")
            exit(1)

        while True:
            imu_frame = channel.get_next_imu_frame()
            if imu_frame:
                for sample in imu_frame.samples:
                    if sample.accelerometer:
                        print(f"Accel: x={sample.accelerometer.x}, y={sample.accelerometer.y}, z={sample.accelerometer.z}")
                    if sample.gyroscope:
                        print(f"Gyro: x={sample.gyroscope.x}, y={sample.gyroscope.y}, z={sample.gyroscope.z}")

if __name__ == "__main__":
    main()

C++

#include <iostream>
#include <MultiSense/MultiSenseChannel.hh>

namespace lms = multisense;

int main(int argc, char** argv)
{
    const auto channel = lms::Channel::create(lms::Channel::Config{"10.66.171.21"});
    if (!channel)
    {
        std::cerr << "Failed to create channel" << std::endl;
        return 1;
    }

    //
    // Get the current configuration
    //
    auto config = channel->get_config();

    //
    // Configure the IMU. We first need to get the IMU info to find supported rates and ranges
    //
    const auto info = channel->get_info();
    if (!info.imu)
    {
        std::cerr << "Sensor does not have an IMU" << std::endl;
        return 1;
    }

    lms::MultiSenseConfig::ImuConfig imu_config;
    imu_config.samples_per_frame = 10;

    // Enable Accelerometer
    if (info.imu->accelerometer)
    {
        lms::MultiSenseConfig::ImuConfig::OperatingMode accel_mode;
        accel_mode.enabled = true;
        accel_mode.rate = info.imu->accelerometer->rates[0];
        accel_mode.range = info.imu->accelerometer->ranges[0];
        imu_config.accelerometer = accel_mode;
    }

    // Enable Gyroscope
    if (info.imu->gyroscope)
    {
        lms::MultiSenseConfig::ImuConfig::OperatingMode gyro_mode;
        gyro_mode.enabled = true;
        gyro_mode.rate = info.imu->gyroscope->rates[0];
        gyro_mode.range = info.imu->gyroscope->ranges[0];
        imu_config.gyroscope = gyro_mode;
    }

    config.imu_config = imu_config;
    if (const auto status = channel->set_config(config); status != lms::Status::OK)
    {
        std::cerr << "Failed to set IMU configuration: " << lms::to_string(status) << std::endl;
        return 1;
    }

    //
    // Start the IMU stream
    //
    if (const auto status = channel->start_streams({lms::DataSource::IMU}); status != lms::Status::OK)
    {
        std::cerr << "Cannot start IMU stream: " << lms::to_string(status) << std::endl;
        return 1;
    }

    while(true)
    {
        if (const auto imu_frame = channel->get_next_imu_frame(); imu_frame)
        {
            for (const auto& sample : imu_frame->samples)
            {
                if (sample.accelerometer)
                {
                    std::cout << "Accel: x=" << sample.accelerometer->x
                              << ", y=" << sample.accelerometer->y
                              << ", z=" << sample.accelerometer->z << std::endl;
                }
                if (sample.gyroscope)
                {
                    std::cout << "Gyro: x=" << sample.gyroscope->x
                              << ", y=" << sample.gyroscope->y
                              << ", z=" << sample.gyroscope->z << std::endl;
                }
            }
        }
    }

    return 0;
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

libmultisense-7.6.0-cp313-cp313-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.13Windows x86-64

libmultisense-7.6.0-cp313-cp313-win32.whl (2.5 MB view details)

Uploaded CPython 3.13Windows x86

libmultisense-7.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

libmultisense-7.6.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl (3.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ i686

libmultisense-7.6.0-cp313-cp313-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

libmultisense-7.6.0-cp312-cp312-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.12Windows x86-64

libmultisense-7.6.0-cp312-cp312-win32.whl (2.5 MB view details)

Uploaded CPython 3.12Windows x86

libmultisense-7.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

libmultisense-7.6.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (3.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686

libmultisense-7.6.0-cp312-cp312-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

libmultisense-7.6.0-cp311-cp311-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.11Windows x86-64

libmultisense-7.6.0-cp311-cp311-win32.whl (2.5 MB view details)

Uploaded CPython 3.11Windows x86

libmultisense-7.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

libmultisense-7.6.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (3.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686

libmultisense-7.6.0-cp311-cp311-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

libmultisense-7.6.0-cp310-cp310-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.10Windows x86-64

libmultisense-7.6.0-cp310-cp310-win32.whl (2.5 MB view details)

Uploaded CPython 3.10Windows x86

libmultisense-7.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

libmultisense-7.6.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (3.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686

libmultisense-7.6.0-cp310-cp310-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

libmultisense-7.6.0-cp39-cp39-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.9Windows x86-64

libmultisense-7.6.0-cp39-cp39-win32.whl (2.5 MB view details)

Uploaded CPython 3.9Windows x86

libmultisense-7.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

libmultisense-7.6.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (3.1 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ i686

libmultisense-7.6.0-cp39-cp39-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

libmultisense-7.6.0-cp38-cp38-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.8Windows x86-64

libmultisense-7.6.0-cp38-cp38-win32.whl (2.5 MB view details)

Uploaded CPython 3.8Windows x86

libmultisense-7.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

libmultisense-7.6.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (3.1 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ i686

libmultisense-7.6.0-cp38-cp38-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

File details

Details for the file libmultisense-7.6.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f1c210a4ecd8e78ace2b7616f0a6440416bfc8c5afdd37348dea800dd46c6b15
MD5 b0e6c7b92f1c5dd96aa9ed287e413aa5
BLAKE2b-256 635fbf5761c6ad425e10a0e8cdf9cda7eb9691997cfb56d5198c1adbdc364283

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp313-cp313-win32.whl.

File metadata

  • Download URL: libmultisense-7.6.0-cp313-cp313-win32.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for libmultisense-7.6.0-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 96d46d22ee4bd8a76cc293498e77beffd3673f4d59f350aebbf9b89a4e9fe0ce
MD5 dfda6f70e46e9a129e0e1e7e5cd50985
BLAKE2b-256 f880a5e8ac75543bc36f1d9d7e79028a5d8ee5c28a449b0fd9ca3b7f83cb4b10

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6bd04b77d21a03ea80f64e9178eaa5b40d3ead94f43b97a97adb07e3c329bca6
MD5 269be9f4f8643bbc2072f04b0be71e64
BLAKE2b-256 b5217623fe62373042d24510bacb513faae85e7b18227738df44a3c0e0819640

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 05ead093f7904981f88e5983777c9d9e933abfdcff3b353370abc7b2d08b6ed4
MD5 f37f0c30964d0e0c9fb8701e2a66a934
BLAKE2b-256 efe7394f10ec1c8a3258fb642f3076d56f4880de946ad4431ae47cb68d45104c

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 232d90c466e1ce133035115c4d65a1837e5593ad4b73b69f1d3146c39bc2dce4
MD5 28012dc718cd847ca97bda63f9ec8180
BLAKE2b-256 c2bbcb0b51b27b197a9fcd6800b869e12df92fc1768c84103e17f82df27910e6

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3a9bc9ddaea821183c80f1b5bb2b0b85d097d5c5ec6ae7925149e98cb3e1409c
MD5 f52acdb45c1fa0306d40975a7557beba
BLAKE2b-256 5bba3bfae12200f13e08e09ce940c787bb746d45da2b2ba5ceb044285a02ce5c

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp312-cp312-win32.whl.

File metadata

  • Download URL: libmultisense-7.6.0-cp312-cp312-win32.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for libmultisense-7.6.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 90ce74b85f085a711ae2f60db18c640c6cea2753e0a86ed524bd69536226b0ad
MD5 cdca85fd498e232fc40dd378d7f3b85d
BLAKE2b-256 100347af272dceacd3939bdea56665fb2d079b10da88f9864ef12500af3878fe

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 79aec813a4faff87ec6c7c9dcbe5d1626008f0240a1a76d4aa635fb217495eae
MD5 36b3736a19e268cb36a545a606d5ee3d
BLAKE2b-256 f6f477b28cbba9e2ea1e3e64a02dc77e7feb374698dde63e7785b8e7814683b2

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 8e3b28511619aea85ed7808138b21d7e8886ae0e8bb7fc55304cf3cc77be81bd
MD5 5455f9c51abb8e62b288cdaac8b76f0c
BLAKE2b-256 2b9e3058e3c7f95387dfd710e359d9416c7d1e9dab8fc1ee9f5cbd742c08cd6d

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6ac72a3024c3a45d82c675cb2e94aa3fb1f7ed7c3597d857221b8c2907bb8c22
MD5 7ae42d57cf9761e03678ca0b014e23e0
BLAKE2b-256 70d910f9e687ef149a1858281b6757584b1c52eadf7b23be816d91528342166f

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 135e4b99d844c1e02b8609966ab564b8f3ff7f7900b407c84564c1937a77460e
MD5 f4ea540b4b9a5087ba8c47372436185e
BLAKE2b-256 233596892f396190777fd8cef29d16c08078cb601d26de6c8f1fa9c06ca345ee

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp311-cp311-win32.whl.

File metadata

  • Download URL: libmultisense-7.6.0-cp311-cp311-win32.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for libmultisense-7.6.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 f9653d1b7b40479625be88f94446275b2edf50f9f3baf5f41ec45a9a8ce6f383
MD5 033e9104e0c4612b5e854ce5713262ed
BLAKE2b-256 942e964fd693c87b089528d651434871835581c4457d4e8d8b53b29def8e8915

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9cd618d21a75ae1dea21d25a52caffd611300172db7b6aa4e5f46d0cf2dc26d0
MD5 594a94f1a6cf54a1756f58d6d06dcdf2
BLAKE2b-256 398fab5ab227b6ca53bd7bf7818a7b93d6aff409b571056aa1c269488c440e3a

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 319003d0a28365604c3225579eb7c965912c60f559834560a74efb16f3bb7a65
MD5 0260d092f58ed240bb1cee132a48b87f
BLAKE2b-256 3bb9cb3c5b29c27cf17646a6bf52b6b9ef9b04f4728734e513f51200b02e7253

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 592ba2ce57a298a9220cafb74d5eb19e744c59cc308cc37df9f1a42324b1351e
MD5 233da7d278b091c05397e2d72b33a440
BLAKE2b-256 b271f8e8821a8f865e5a83117a260c2acdfb7ce46f6da968e0dcc2831077167c

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 7d74c7af69c8f0e31e439f672729a3fbd548bf7c896ad90f04ad03d7dbd0a051
MD5 b205a8b69d4f654cc8e8d4243301a8b1
BLAKE2b-256 d3af6bbdf45cc27c077cd5e6d27bb219bbcd1b58ffcb8532ad7da37c4e404686

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp310-cp310-win32.whl.

File metadata

  • Download URL: libmultisense-7.6.0-cp310-cp310-win32.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for libmultisense-7.6.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 75f9baf8b0e943ad5fe072ee812dc10f7fe6f821da30598f1af36d15ea425c23
MD5 a844a6b039fa67ae8e4788e275e08f54
BLAKE2b-256 20ea882608cf65301f0ca45ec28b6c4a0ce57d663d2031b0e7254d1371978a5a

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a6a96f1fb2555ae2d96797a7a1d428b3cabc990844def43a79aba7e7a0d41eb5
MD5 4b19f0f47e622a6ae3fea8c540bf9780
BLAKE2b-256 61516316c261fbdb6ab45d1ef688020ff559c636954bb5a33762db920d828f60

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 4808b32242df5c06e1cbad524ca2b2782093c572d23fda451bad3ba54890b977
MD5 d88ea30581853c99fb8d08962a115bb9
BLAKE2b-256 1203b493e51f7d78bbb4bd70b88573213f301f668f630a8bb5034e2f13bbdb9a

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a2c158a7c9d2c1eb3872af274d07c9ec8cc630969fb0303ccb906219cd71e3aa
MD5 2ce44feec4954ce20a8e87966f0f6913
BLAKE2b-256 bbe07a4d90db98062b873062592a906782fabaf688a70a70bdfeebd2773427a8

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 9c1d4ded5999e14fc480340422544a1e76050ccd6b7abf4ab756feec45fd5d50
MD5 db90ec8adddd7c095c22771e3907b0c5
BLAKE2b-256 d04063e89b54614b72029e3b977805f80e669b9e50cfe54cfcd80813c61790f6

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp39-cp39-win32.whl.

File metadata

  • Download URL: libmultisense-7.6.0-cp39-cp39-win32.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for libmultisense-7.6.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 b9bc3a7b01cb062669654c745a3df2d559020675b2dcc73d745a7557988e64f4
MD5 86e743494946f7abb69609c6ec7eac08
BLAKE2b-256 7f6dc2d7fc84914f1f08388e55f1a7a7518b059ed75686b7019845d88bb5bf57

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4988fb0e4582a8a8211d332fb0c492c58924e6f24afc8cff5866d5717e1ad5fe
MD5 b91b1081d090f421893c59341b6fb764
BLAKE2b-256 bde232c60c13db7067e4b6050e8b57817374bb496335354042d11f0fac029fd9

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 8d7748618536011952007b600371f3de7ea1910cc9463ab1afee1c9b5e34c545
MD5 785b5a393fa814bd1011b991520efdac
BLAKE2b-256 7f0cd28dafb199249184f892ed7c1c7890927cb31c40ec563587fec636244afa

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d19c2a3ad146ac77900212639ba3dccacdf274eae2ecef51ad1a04ae022a98ea
MD5 5efdbcd4c80b682adfba5636a8c627b8
BLAKE2b-256 ec9a5dae1f7e88e6e6d240f89548b33f11e1e6fba932725969f94a3dd241c9cb

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 71f89957ed6cff9c6b3957455abd23be58d9f282083146d05e77c767608fea1b
MD5 34d5cfadd1c646d8ea34e0d4a7da3533
BLAKE2b-256 58cd5b0dc908eb1a99c691149e22d9de90305a58b94cb1c431f8ad719d248f27

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp38-cp38-win32.whl.

File metadata

  • Download URL: libmultisense-7.6.0-cp38-cp38-win32.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for libmultisense-7.6.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 300024cd9e815497a7afb1291209d7f10f7b496eed0c0326a35083d44dc9f39d
MD5 7a60809106eb07048ec2fcb9d9f8b506
BLAKE2b-256 df029449224a3d8d0b13b4ed28ed24d4b9a6ca9a2eea0e9506de45011587e8ab

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 54b2bd484334ece31c90e7c12f80960a25787b6cc7dfbd1af549436b3dc3db60
MD5 cc1869d51d55be7c33e12262fea61b29
BLAKE2b-256 34a461df74b93092b2998123dcb867803fdd047c185d85c14c29ec2ba77902c6

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 fa9b352e965d738bd36626725e78a7c500fa189dc74261a9317537935918b1af
MD5 e4227ea08b245215e91d31807bdbfd61
BLAKE2b-256 699458af4e7a6772544f46e00e91975c3d2c1b2cf8418a4132560c8e09ed7009

See more details on using hashes here.

File details

Details for the file libmultisense-7.6.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for libmultisense-7.6.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 688feb7435a5c14a115c63193b4634a65d5bd5879cbb936dbca861f9754229d1
MD5 9974974ba084cf6e55aae252b7886309
BLAKE2b-256 f1e8448323317d6da8f0a438b5689e552e5d5ac4064432000892cf80b3820479

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page