[Reference Site]
[Installation]
- 설치 방법
- [Method 1] local에 설치하는 방법이 존재 (끗!)
# Example of ROS "melodic" version
$ sudo apt-get install ros-melodic-realsense2-camera
-
- [Method 2] github에서 불러와서 workspace에서만 include되게 빌드하는 방법
- 설치 전 주의 사항
- Method 1의 경우, latest한 version의 realsense package를 설치하기 때문에 librealsense SDK와 버전이 맞지 않아 에러가 발생할 수 있는 문제가 있음!
- 그래서 작성자는 보통 [Method 2]을 추천함!!
- Method 1의 경우, latest한 version의 realsense package를 설치하기 때문에 librealsense SDK와 버전이 맞지 않아 에러가 발생할 수 있는 문제가 있음!
- Method 2 에 대한 상세 설치 방법
- (1) Reference Site 방문 (혹은 구글에 realsense ros github 라고 검색하면 나옴!)
-
- (2) 그러면 바로 git clone 하지 말고!! 우측에 Release로 들어가기!
- 혹시 모르니 해당 Release site도 넣어둠!
- (2) 그러면 바로 git clone 하지 말고!! 우측에 Release로 들어가기!
-
- (3) [중요] 여기서 해당 librealsense SDK 및 realsense-ros package 설치하기 전에 다음과 같은 조건을 체크한 후에 설치를 진행해야함!
- 체크할 항목들!
- (1) Supported ROS Distribution 확인
- (2) Supported Platforms 확인
- (3) Supported Devices 확인
- 저자의 예시
- Ubuntu 18.04 LTS / ROS Melodic / D455 Realsense Camera 라면 다음과 같은 버전을 설치 및 다운!
- 1) install ROS realsense version → 2.3.2
- 2) intsall SDK librealsense version → 2.50.0
- Ubuntu 18.04 LTS / ROS Melodic / D455 Realsense Camera 라면 다음과 같은 버전을 설치 및 다운!
- 체크할 항목들!
- (3) [중요] 여기서 해당 librealsense SDK 및 realsense-ros package 설치하기 전에 다음과 같은 조건을 체크한 후에 설치를 진행해야함!
-
- (4-1) Download ROS realsense source code
- 해당 버전을 찾았으면 하단의 Assets 누르고 Source code (.zip or tar.gz)라고 되어 있는 부분 눌러 다운로드!
- (4-2) Download SDK librealsense
- 해당 버전을 찾았으면 "Supported RealSense SDK" 에 링크가 걸려 있어 거기로 들어가면 됨!
- 마찬가지로 하단의 Assets 누르고 Source code (.zip or tar.gz)라고 되어 있는 부분 눌러 다운로드!
- 해당 버전을 찾았으면 "Supported RealSense SDK" 에 링크가 걸려 있어 거기로 들어가면 됨!
- (4-1) Download ROS realsense source code
-
- (5-1) Build ROS realsense source code
- 압축을 풀고 해당 workspace src에 옮기고 다음과 같이 빌드
- (5-1) Build ROS realsense source code
# Go to workspace
$ catkin build realsense2_camera
-
-
- 만약 "ddynamic_reconfigure" 관련하여 에러가 발생하였다면, 다음과 같이 하면 해결!
- $ sudo apt-get install ros-melodic-ddynamic-reconfigure
- 만약 "ddynamic_reconfigure" 관련하여 에러가 발생하였다면, 다음과 같이 하면 해결!
- (5-2) Install SDK librealsense
- 압축을 풀고 다음과 같이 진행
-
# Dependencies
$ sudo apt-get install git libssl-dev libusb-1.0-0-dev pkg-config libgtk-3-dev
$ sudo apt-get install libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev
# Unzip librealsense.zip
$ cd librealsense
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_BUILD_TYPE=Release
$ sudo make uninstall
$ make clean
$ make
$ sudo make install
-
-
- (6) Realsense ROS package 실행!
- $ source devel setup.bash
$ roslaunch realsense2_camera rs_camera.launch
- $ source devel setup.bash
- (6) Realsense ROS package 실행!
-
[Using IMU integrated in D435i or D455 Camera]
- Realsense camera 안에는 내장되어 있는 IMU 센서가 있어 이를 사용할 수도 있음!
- IMU 센서 데이터를 사용하기 전에, UDEV 규칙 파일을 먼저 local udev rule setting 위치 (/etc/udev/rule.d/)에 다운 받아둠 (Permission Setting)
- [기초 방법] 다음과 같은 명령어면 충분!
- IMU 센서 데이터를 사용하기 전에, UDEV 규칙 파일을 먼저 local udev rule setting 위치 (/etc/udev/rule.d/)에 다운 받아둠 (Permission Setting)
sudo wget -O /etc/udev/rules.d/99-realsense-libusb.rules https://raw.githubusercontent.com/IntelRealSense/librealsense/master/config/99-realsense-libusb.rules
-
-
- [추천 방법] 아직까지 에러가 확인되지 않았으나, 위에 설치한 버전에 맞춰서 rule 파일을 넣어주는게 심리적으로 안정감이 들어서 작성자는 이렇게 활용! ㅎㅎ
- 위에 SDK librealsense 폴더 중 "config" 폴더가 있는데 그 안에 "99-realsense-libusb.rules" 라는 파일이 존재
- 해당 파일을 "/etc/udev/rule.d" 로 옮겨주기만 하면 끝!!
-
-
- 그 뒤에 launch 파일 (rs_camera.launch) 중 다음과 같은 argument들을 변경!
<!-- IMU Options are: [none, copy, linear_interpolation] -->
<arg name="gyro_fps" default="200"/>
<arg name="accel_fps" default="63"/>
<arg name="enable_gyro" default="true"/>
<arg name="enable_accel" default="true"/>
<arg name="unite_imu_method" default="linear_interpolation"/>
-
- 그렇게 되면 topic 중 /camera/imu 가 생성나오면서 IMU 데이터 사용이 가능해진다.
[Using Compressed Image Topic]
- Realsense ROS package에서는 compressed image를 publish 할 수 있어 이를 활용하자! (데이터 용량이 기존에 비해 엄청나게 작아지는 이점이 있음!)
- 이를 활용하기 위해서 사전에 필요한 package 및 라이브러리를 순차적으로 설치 및 빌드시키면 사용할 수 있게됨
$ sudo apt-get update
$ sudo apt-get install libjpeg-dev libpng-dev libtiff-dev libturbojpeg0-dev
$ cd ./${WORKSPACE}/src/
$ git clone https://github.com/ros-perception/image_common.git
$ cd /image_common
$ git checkout ${ROS_DIST}-devel
$ cd ../../
$ catkin build
$ cd ./${WORKSPACE}/src/
$ git clone https://github.com/ros-perception/image_transport_plugins.git
$ cd /image_transport_plugins
$ git checkout ${ROS_DIST}-devel
$ cd ../../
$ catkin build
[Topics]
- Intel T265 Tracking Camera related launch file
$ roscd realsense2_camera
$ cd launch
$ roslaunch rs_t265.launch
- T265 camera topic
- Topic name → /camera/odom/sample
- Message type → nav_msgs/Odometry
- Intel D435i & D455i RGB-D Camera
$ roscd realsense2_camera
$ cd launch
$ roslaunch rs_camera.launch
- D435 & D455 camera topic
- Image topic name → /camera/color/image_raw
- Message type → sensor_msgs/Image
-
- Compressed topic name → /camera/color/image_rect_raw/compressed
- Message type → sensor_msgs/CompressedImage
-
- Left Infra topic name → /camera/infra1/image_rect_raw
- Right Infra topic name → /camera/infra2/image_rect_raw
- Message type → sensor_msgs/Image
-
- Camera built-in IMU topic name → /camera/imu
- Message type → sensor_msgs/Imu
- 내장되어 있는 IMU data 값은 개인적으로 사용해본 결과 엄청 좋진 않고 hz가 계속 변해서 일정한 값을 주지 않는 경우도 본적이 있어 주의해서 사용하면 좋을듯 합니다! (그래도 도움이 많이 되긴 합니다! ㅎㅎ)
[Basic Configuration]
- Settings of camera (기본 셋팅)
$ roscd realsense2_camera
$ cd launch/includes
$ gedit nodelet.launch.xml
##### Default settings in nodelet.launch.xml file #####
# Depth related
<arg name="depth_width" default="640"/>
<arg name="depth_height" default="480"/>
<arg name="enable_depth" default="true"/>
<arg name="depth_fps" default="30"/>
# Infra related
<arg name="infra_width" default="640"/>
<arg name="infra_height" default="480"/>
<arg name="enable_infra" default="true"/>
<arg name="enable_infra1" default="true"/>
<arg name="enable_infra2" default="true"/>
<arg name="infra_fps" default="30"/>
# Color related
<arg name="color_width" default="640"/>
<arg name="color_height" default="480"/>
<arg name="enable_color" default="true"/>
<arg name="color_fps" default="30"/>
# Built-in IMU related
<arg name="gyro_fps" default="200"/>
<arg name="accel_fps" default="63"/>
<arg name="enable_gyro" default="false"/>
<arg name="enable_accel" default="false"/>
<arg name="unite_imu_method" default="linear_interpolation"/> \
<!-- Options are: [none, copy, linear_interpolation] -->
# High ACC emitter off
<arg name="json_file_path" default="$(find ~)/high_acc_emitter_off.json"/>
# Reset prior camera when restart launch file
<arg name="initial_reset" default="false"/>
[About JSON files]
- launch file 에서 상위단의 argument를 조정했다면 json file은 상세적인 parameter를 저장하고 있는 파일이다. (쉽게 말하면 config file이라고 생각하면된다!)
- 저자도 파라미터 전부는 모르지만 parameter 중 auto exposure & emittor 관련 된 것들을 수정할 때 사용
- 예를들면, "controls-autoexposure-auto" (auto exposure 관련) & "controls-laserstate" (emittor 관련)
- 추가로 depth 에 관한 부분도 조정할 수 있는데 json file과 친해지면 좋을듯합니다! (굳이 realsense-viewer에서 조정안해도 무관!)
- 원하는 json file을 만들어두면 launch file 중 <arg name="json_file_path" default=""> 에 넣어서 원하는 환경에 depend 하게 데이터를 취득할 수 있음!!
- 저자도 파라미터 전부는 모르지만 parameter 중 auto exposure & emittor 관련 된 것들을 수정할 때 사용
- Exmaple json file
{
"aux-param-autoexposure-setpoint": "1536",
"aux-param-colorcorrection1": "0.298828",
"aux-param-colorcorrection10": "-0",
"aux-param-colorcorrection11": "-0",
"aux-param-colorcorrection12": "-0",
"aux-param-colorcorrection2": "0.293945",
"aux-param-colorcorrection3": "0.293945",
"aux-param-colorcorrection4": "0.114258",
"aux-param-colorcorrection5": "-0",
"aux-param-colorcorrection6": "-0",
"aux-param-colorcorrection7": "-0",
"aux-param-colorcorrection8": "-0",
"aux-param-colorcorrection9": "-0",
"aux-param-depthclampmax": "65536",
"aux-param-depthclampmin": "0",
"aux-param-disparityshift": "0",
"controls-autoexposure-auto": "True",
"controls-autoexposure-manual": "8500",
"controls-color-autoexposure-auto": "True",
"controls-color-autoexposure-manual": "166",
"controls-color-backlight-compensation": "0",
"controls-color-brightness": "0",
"controls-color-contrast": "50",
"controls-color-gain": "64",
"controls-color-gamma": "300",
"controls-color-hue": "0",
"controls-color-power-line-frequency": "3",
"controls-color-saturation": "64",
"controls-color-sharpness": "50",
"controls-color-white-balance-auto": "True",
"controls-color-white-balance-manual": "4600",
"controls-depth-gain": "16",
"controls-laserpower": "150",
"controls-laserstate": "off",
"ignoreSAD": "0",
"param-amplitude-factor": "0",
"param-autoexposure-setpoint": "1536",
"param-censusenablereg-udiameter": "6",
"param-censusenablereg-vdiameter": "7",
"param-censususize": "6",
"param-censusvsize": "7",
"param-depthclampmax": "65536",
"param-depthclampmin": "0",
"param-depthunits": "1000",
"param-disableraucolor": "0",
"param-disablesadcolor": "0",
"param-disablesadnormalize": "0",
"param-disablesloleftcolor": "0",
"param-disableslorightcolor": "1",
"param-disparitymode": "0",
"param-disparityshift": "0",
"param-lambdaad": "751",
"param-lambdacensus": "6",
"param-leftrightthreshold": "10",
"param-maxscorethreshb": "2893",
"param-medianthreshold": "796",
"param-minscorethresha": "4",
"param-neighborthresh": "108",
"param-raumine": "6",
"param-rauminn": "3",
"param-rauminnssum": "7",
"param-raumins": "2",
"param-rauminw": "2",
"param-rauminwesum": "12",
"param-regioncolorthresholdb": "0.785714",
"param-regioncolorthresholdg": "0.565558",
"param-regioncolorthresholdr": "0.985323",
"param-regionshrinku": "3",
"param-regionshrinkv": "0",
"param-robbinsmonrodecrement": "25",
"param-robbinsmonroincrement": "2",
"param-rsmdiffthreshold": "1.65625",
"param-rsmrauslodiffthreshold": "0.71875",
"param-rsmremovethreshold": "0.809524",
"param-scanlineedgetaub": "13",
"param-scanlineedgetaug": "15",
"param-scanlineedgetaur": "30",
"param-scanlinep1": "155",
"param-scanlinep1onediscon": "160",
"param-scanlinep1twodiscon": "59",
"param-scanlinep2": "190",
"param-scanlinep2onediscon": "507",
"param-scanlinep2twodiscon": "493",
"param-secondpeakdelta": "647",
"param-texturecountthresh": "0",
"param-texturedifferencethresh": "1722",
"param-usersm": "1",
"param-zunits": "1000",
"stream-depth-format": "Z16",
"stream-fps": "30",
"stream-height": "480",
"stream-ir-format": "R8L8",
"stream-width": "640"
}
[Others]
- [중요] Auto Exposure !!!
- 카메라에서는 자동적으로 노출을 조절하게 되는데 자동으로 설정하게 되면 실내 및 야외에서 위치 추정시 자동 노출 조절 때문에 이미지들 간의 matching 에 어려움이 생기게 됨
- 따라서, realsense-viewer를 통해서 auto exposure를 disable 로 설정 !!