创建您的第一个相机应用
  • PG电子

  • PG电子

    创建您的第一个相机应用

    这个快速入门将帮助你快速使用Orbbec SDK,构建你的第一个相机应用程序需要用到以下函数:

     

     

    queryDeviceList()

    deviceCount()

    getDevice()

    getDeviceInfo()

    firmwareVersion()

    serialNumber()

    connectionType()

    getSensorList()

    getSensor()

     

    先决条件

    连接Orbbec设备。
    下载并安装Orbbec SDK。

     

    头文件

    包含Orbbec SDK的主要头文件

    ```cpp
    #include <iostream>
    #include "utils.hpp"
    #include "libobsensor/ObSensor.hpp"
    #include "libobsensor/hpp/Error.hpp"
    ```

     

    查找Orbbec设备

    首先,我们需要检查您的计算机连接了多少个Orbbec设备。使用函数来检索连接的设备。

    // Create a Context.
    ob::Context ctx;

    // Query the list of connected devices
    auto devList = ctx.queryDeviceList();
    if (devList->deviceCount() == 0) {
        std::cerr << "Device not found!" << std::endl;
        return -1;
    }

    如果检测到设备,您可以继续访问其信息和传感器。

     

    访问设备信息

    获取设备列表后,打开第一个设备并检索一些基本信息,比如设备名称和固件版本。

    auto dev = devList->getDevice(0);
    auto devInfo = dev->getDeviceInfo();
    std::cout << "Device name: " << devInfo->name() << std::endl;
    std::cout << "Firmware version: " << devInfo->firmwareVersion() << std::endl;

    // By getting the serial number of the device
    auto sn = devInfo->serialNumber();
    std::cout << "Serial number: " << sn << std::endl;

    // By getting the connection type of the device
    auto connectType = devInfo->connectionType();
    std::cout << "ConnectionType: " << connectType << std::endl;

     

    列出传感器

    接下来,通过获取传感器列表并打印每个传感器类型。

       // Get the list of supported sensors
        std::cout << "Sensor types: " << std::endl;
        auto sensorList = dev->getSensorList();
        for(uint32_t i = 0; i < sensorList->count(); i++) {
            auto sensor = sensorList->getSensor(i);
            switch(sensor->type()) {
            case OB_SENSOR_COLOR:
                std::cout << "\tColor sensor" << std::endl;
                break;
            case OB_SENSOR_DEPTH:
                std::cout << "\tDepth sensor" << std::endl;
                break;
            case OB_SENSOR_IR:
                std::cout << "\tIR sensor" << std::endl;
                break;
            case OB_SENSOR_IR_LEFT:
                std::cout << "\tIR Left sensor" << std::endl;
                break;
            case OB_SENSOR_IR_RIGHT:
                std::cout << "\tIR Right sensor" << std::endl;
                break;
            case OB_SENSOR_GYRO:
                std::cout << "\tGyro sensor" << std::endl;
                break;
            case OB_SENSOR_ACCEL:
                std::cout << "\tAccel sensor" << std::endl;
                break;
            default:
                break;
            }
        }

     

     

    错误处理

    在你的应用程序中包含错误处理是很重要的。Orbbec SDK提供了详细的异常,可以捕获以了解在执行过程中发生了什么错误。

    ```cpp
    catch(ob::Error &e) {
        std::cerr << "Error: " << e.getMessage() << std::endl;
        return -2;
    }
    ```

     

    完整代码

    #include <iostream>
    #include "utils.hpp"
    #include "libobsensor/ObSensor.hpp"
    #include "libobsensor/hpp/Error.hpp"

    #define ESC 27

    int main(int argc, char **argv) try {
        // Print the sdk version number, the sdk version number is divided into major version number, minor version number and revision number
        std::cout << "SDK version: " << ob::Version::getMajor() << "." << ob::Version::getMinor() << "." << ob::Version::getPatch() << std::endl;
        // Print sdk stage version
        std::cout << "SDK stage version: " << ob::Version::getStageVersion() << std::endl;

        // Create a Context.
        ob::Context ctx;

        // Query the list of connected devices
        auto devList = ctx.queryDeviceList();

        // Get the number of connected devices
        if(devList->deviceCount() == 0) {
            std::cerr << "Device not found!" << std::endl;
            return -1;
        }

        // Create a device, 0 means the index of the first device
        auto dev = devList->getDevice(0);

        // Get device information
        auto devInfo = dev->getDeviceInfo();

        // Get the name of the device
        std::cout << "Device name: " << devInfo->name() << std::endl;

        // Get the pid, vid, uid of the device
        std::cout << "Device pid: " << devInfo->pid() << " vid: " << devInfo->vid() << " uid: " << devInfo->uid() << std::endl;

        // By getting the firmware version number of the device
        auto fwVer = devInfo->firmwareVersion();
        std::cout << "Firmware version: " << fwVer << std::endl;

        // By getting the serial number of the device
        auto sn = devInfo->serialNumber();
        std::cout << "Serial number: " << sn << std::endl;

        // By getting the connection type of the device
        auto connectType = devInfo->connectionType();
        std::cout << "ConnectionType: " << connectType << std::endl;

        // Get the list of supported sensors
        std::cout << "Sensor types: " << std::endl;
        auto sensorList = dev->getSensorList();
        for(uint32_t i = 0; i < sensorList->count(); i++) {
            auto sensor = sensorList->getSensor(i);
            switch(sensor->type()) {
            case OB_SENSOR_COLOR:
                std::cout << "\tColor sensor" << std::endl;
                break;
            case OB_SENSOR_DEPTH:
                std::cout << "\tDepth sensor" << std::endl;
                break;
            case OB_SENSOR_IR:
                std::cout << "\tIR sensor" << std::endl;
                break;
            case OB_SENSOR_IR_LEFT:
                std::cout << "\tIR Left sensor" << std::endl;
                break;
            case OB_SENSOR_IR_RIGHT:
                std::cout << "\tIR Right sensor" << std::endl;
                break;
            case OB_SENSOR_GYRO:
                std::cout << "\tGyro sensor" << std::endl;
                break;
            case OB_SENSOR_ACCEL:
                std::cout << "\tAccel sensor" << std::endl;
                break;
            default:
                break;
            }
        }

        std::cout << "Press ESC to exit! " << std::endl;

        while(true) {

            // Get the value of the pressed key, if it is the esc key, exit the program
            int key = getch();
            if(key == ESC)
                break;
        }

        return 0;
    }
    catch(ob::Error &e) {
        std::cerr << "function:" << e.getName() << "\nargs:" << e.getArgs() << "\nmessage:" << e.getMessage() << "\ntype:" << e.getExceptionType() << std::endl;
        exit(EXIT_FAILURE);
    }

     

    下一步

    -了解如何使用Orbbec SDK配置和使用单个传感器。

    -探索Orbbec SDK文档中提供的高级功能和设置。

    -开始将Orbbec设备功能集成到您的更大型项目和应用程序中。

     

     

     

     

     

     

     

     

     

     

     

     


    友情链接: