MI Lab/Intel RealSense - 2022.02~2022.06

[RealSense] Intel RealSense D455 개발환경 세팅

코딩뽀시래기 2022. 2. 17. 16:24
728x90

Intel RealSense D455를 사용하기 위해 개발환경을 세팅해주려고 한다.

 

1. Intel RealSense SDK 2.0 설치

2. Visual Studio 설치

3. 테스트

 


 

1. Intel RealSense SDK 2.0 설치

 

https://www.intelrealsense.com/sdk-2/

 

Developing depth sensing applications - collision avoidance, object detection, volumetric capture and more

Free cross-platform SDK for depth cameras (lidar, stereo, coded light). 10+ wrappers including ROS 2, Python, C/C++, C#, Unity and more. Try!

www.intelrealsense.com

 

우선 위 사이트로 들어가서 Intel RealSense SDK 2.0을 다운로드 받는다. 위 사이트에서 설치 버튼을 누르면 깃허브 페이지로 이동되는데, 페이지 최하단에서 각자의 환경에 맞는 SDK를 선택하여 설치하면 된다.

 

난 윈도우10을 사용 중이므로 세 번째에 해당하는 것을 다운로드 하겠다. 다운로드가 완료되면 파일을 실행해서 설치를 해주면 된다.

 

'Intel RealSense Viewer and Quality Tool'은 카메라를 쉽게 연동해주는 툴이고, Visual Studio에서 개발하려면 'C/C++ Developer Package'만 설치해주면 된다고 한다. 하지만 뭐가 뭔지 잘 모르는 나는 미래가 두렵기 때문에... 기본으로 체크되어 있는 걸 다 설치하겠다. 그리고 next 해서 install 해주기.

 

설치 완료 후 환경 변수를 적용한다. (이 부분은 필수는 아닌 거 같으나 예상치 못한 오류를 대비하기 위한 작업인 것 같다) '시스템 속성 > 환경 변수 > Path' 에 'C:\Program Files (x86)\Intel RealSense SDK 2.0\bin\x64' 경로를 추가하면 된다.

 


 

2. Visual Studio 설치

 

그리고 C++ 프로젝트를 생성하라는데... 다들 Visual Studio를 쓰고 있다 vsCode로는 안 되는 걸까. 또 잘 모르는 나는 다른 사람들이 쓰는 걸 따라가겠다... Visual Studio를 설치했다.

 

설치 후 컴퓨터를 재부팅하라는 안내멘트가 떠서 재부팅 해줬다. 그리고 Visual Studio를 시작해서 C++ 프로젝트를 생성해줬다. '빈 프로젝트'가 아니라 '콘솔 앱' 템플릴으로 생성했다

 

 

위 화면이 나타나면 '보기 > 다른 창 > 속성관리자'을 선택한다.

 

이제 속성관리자에서 Release x64에 기존 속성 시트를 추가한다. 해당 폴더에서 마우스 우클릭을 하면 된다.

'C:\Program Files (x86)\Intel RealSense SDK 2.0'에 있는 아래 3개를 추가해주면 된다.

 

아래 사진처럼 이 부분도 Release x64로 변경한다.

 


 

3. 테스트

 

예제코드로 실행을 해보려고 했는데 바로 오류가 생겼다. 다양한 예제코드가 있지만 '#include <librealsense2/rs.hpp>'는 반드시 해주는데 'librealsense2/rs.hpp' 파일소스를 찾을 수 없다는 오류가 뜨는 것이다.

 

일단 오류 기록...

 

+) 해결 2022.02.22.화

아래 링크를 참고해서 "librealsense2/rs.hpp"를 열 수 없는 문제는 해결을 했다.

https://devhyeon.tistory.com/7

 

Intel realsense 개발환경 설정(C/C++)

https://github.com/IntelRealSense/librealsense/releases IntelRealSense/librealsense Intel® RealSense™ SDK. Contribute to IntelRealSense/librealsense development by creating an account on GitHub. g..

devhyeon.tistory.com

 

그러나... 새로운 오류와의 만남.

얜 또 뭘까...? 이 오류는 검색해도 나랑 같은 경우를 찾을 수가 없다... 일단 해결해보자.

 

아직 해결은 못했지만 opencv_highgui가 영상 및 비디오 입출력을 담당하는 모듈인 것은 알아냈다. 혹시 RealSense 카메라카 컴퓨터에는 연결이 되었지만 코드와는 제대로 연결이 안 된 것 아닐까...?

 

+) 해결...? 2022.02.23.수

파일탐색기에서 opencv_highgui341.lib 파일의 위치를 찾아서 프로젝트 속성에 경로를 추가해줬다. 그랬더니 위 오류가 더이상 발생하지 않았다. 그리고 새로운 오류...

 

얘도 해결을 해보자...

 

+) 애매한 해결 2022.02.23.수

그냥 열 수 없다고 하는 파일의 경로를 다 연결하고, 프로젝트 파일에 lib 파일을 넣어줘서 오류가 뜨긴 하는데 예제 코드로 얻고 싶었던 값은 나온다.

 

+) 허무한 해결 2022.02.23.수

Visual Studio를 2022 버전이 아니라 2019 버전으로 삭제 후 다시 설치해줬다. 그랬더니 첫 번째에 떴던 오류도 발생하지 않고 정상적으로 작동했다... 며칠 간 뻘짓한 것이 아까운....

 

중심 부분이 카메라와 얼마나 떨어져있는지 거리를 계산해서 보여준다. 코드를 실행시킨 그 순간의 거리만 나오는 줄 알았는데, 실시간으로 보여주고 있다.

 

// License: Apache 2.0. See LICENSE file in root directory.
// Copyright(c) 2019 Intel Corporation. All Rights Reserved.

#include <librealsense2/rs.hpp> // Include RealSense Cross Platform API
#include <iostream>             // for cout

// Hello RealSense example demonstrates the basics of connecting to a RealSense device
// and taking advantage of depth data
int main(int argc, char* argv[]) try
{
    // Create a Pipeline - this serves as a top-level API for streaming and processing frames
    rs2::pipeline p;

    // Configure and start the pipeline
    p.start();

    while (true)
    {
        // Block program until frames arrive
        rs2::frameset frames = p.wait_for_frames();

        // Try to get a frame of a depth image
        rs2::depth_frame depth = frames.get_depth_frame();

        // Get the depth frame's dimensions
        auto width = depth.get_width();
        auto height = depth.get_height();

        // Query the distance from the camera to the object in the center of the image
        float dist_to_center = depth.get_distance(width / 2, height / 2);

        // Print the distance
        std::cout << "The camera is facing an object " << dist_to_center << " meters away \r";
    }

    return EXIT_SUCCESS;
}
catch (const rs2::error& e)
{
    std::cerr << "RealSense error calling " << e.get_failed_function() << "(" << e.get_failed_args() << "):\n    " << e.what() << std::endl;
    return EXIT_FAILURE;
}
catch (const std::exception& e)
{
    std::cerr << e.what() << std::endl;
    return EXIT_FAILURE;
}

 

728x90