Processing math: 100%

[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 2 에 대한 상세 설치 방법
    • 1 Reference Site 방문 (혹은 구글에 realsense ros github 라고 검색하면 나옴!)


    • 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

    • 41 Download ROS realsense source code
      • 해당 버전을 찾았으면 하단의 Assets 누르고 Source code .ziportar.gz라고 되어 있는 부분 눌러 다운로드!
    • 42 Download SDK librealsense 
      • 해당 버전을 찾았으면 "Supported RealSense SDK" 에 링크가 걸려 있어 거기로 들어가면 됨!
        • 마찬가지로 하단의 Assets 누르고 Source code .ziportar.gz라고 되어 있는 부분 눌러 다운로드!

    • 51 Build ROS realsense source code
      • 압축을 풀고 해당 workspace src에 옮기고 다음과 같이 빌드
# Go to workspace
$ catkin build realsense2_camera
      • 만약 "ddynamic_reconfigure" 관련하여 에러가 발생하였다면, 다음과 같이 하면 해결!
        • $ sudo apt-get install ros-melodic-ddynamic-reconfigure
    • 52 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

[Using IMU integrated in D435i or D455 Camera]

  • Realsense camera 안에는 내장되어 있는 IMU 센서가 있어 이를 사용할 수도 있음!
    • IMU 센서 데이터를 사용하기 전에, UDEV 규칙 파일을 먼저 local udev rule setting 위치 (/etc/udev/rule.d/)에 다운 받아둠 PermissionSetting
      • [기초 방법] 다음과 같은 명령어면 충분!
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 파일 rscamera.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]

$ 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를 저장하고 있는 파일이다. configfile!
    • 저자도 파라미터 전부는 모르지만 parameter 중 auto exposure & emittor 관련 된 것들을 수정할 때 사용
      • 예를들면, "controls-autoexposure-auto" autoexposure & "controls-laserstate" emittor 
    • 추가로 depth 에 관한 부분도 조정할 수 있는데 json file과 친해지면 좋을듯합니다! (굳이 realsense-viewer에서 조정안해도 무관!)
    • 원하는 json file을 만들어두면 launch file 중 <arg name="json_file_path" default=""> 에 넣어서 원하는 환경에 depend 하게 데이터를 취득할 수 있음!!

  • 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 로 설정 !!

realsense-viewer 안에서 체크할 수 있음!

+ Recent posts