Ros에서 DJI Drone Matrice 100과 RealSense D435i의 IMU 가속도 센서 성능 비교

비 GPS 환경에서 무인 항공기 비행 제어 개발, 공중 호버링의 제어 정확도를 높이려면,
정확한 가속도 정보를 얻을 수 있는지 여부는 중요합니다.

이번에는 DJI Drone Matrice 100과 RealSense D435i의 IMU 가속도 센서 성능을 비교해 보겠습니다.

비교 환경



우분투 16.04 + ROS Kinetic
DJI Drone Matrice 100
DJI Onboard SDK (OSDK) 3.8
DJI Onboard SDK ROS 3.8
RealSense D435i
realsense-ros 2.2.8

비교 방법



DJI Drone Matrice 100에 RealSense D435i를 올려
정지 상태와 손으로 무인 항공기를 이동하는 상태에서 ROS의 rosbag을 얻고
rqt_bag에서 ​​Z 방향의 가속도를 비교합니다.
비교의 참고치로서, 별도로 Lidar로부터 취한 드론 위치 차분의 시간 미분으로
자작한 가속도를 참고하여 비교합니다. (다른 참고 가능한 IMU 관성 센서가 없다)

비교 결론



DJI IMU 가속도의 오차가 RealSense보다 크다고 합니다.

ROS 시작



DJI Drone Matrice 100의 Ros 시작 launch file


<launch>
    <node pkg="dji_sdk" type="dji_sdk_node" name="dji_sdk">
    <!-- node parameters -->
    <param name="serial_name" type="string" value="/dev/ttyUSB_dji_drone"/>
    <param name="baud_rate" type="int" value="230400"/>
    <param name="app_id" type="int" value="XXX"/>
    <param name="app_version" type="int" value="1"/>
    <param name="align_time" type="bool" value="false"/>
    <param name="enc_key" type="string" value="XXX"/>
    <param name="use_broadcast" type="bool" value="true"/>
    </node>
</launch>

RealSense D435i의 Ros 시작 launch file


<launch>
<include file="$(find realsense2_camera)/launch/rs_camera.launch">
    <!-- node parameters -->
    <arg name="align_depth"         value="true"/>
    <arg name="linear_accel_cov"    value="1.0"/>
    <arg name="unite_imu_method"    value="linear_interpolation"/>
    <arg name="enable_fisheye"      default="false"/>
    <arg name="enable_depth"        default="false"/>
    <arg name="enable_infra1"       value="false"/>
    <arg name="enable_infra2"       value="false"/>
    <arg name="enable_color"        default="false"/>
    <arg name="enable_gyro"         default="true"/>
    <arg name="enable_accel"        default="true"/>
</include>
</launch>

ROS IMU Topic rate 비교



DJI /dji_sdk/imu Topic 100HZ


$ rostopic hz /dji_sdk/imu
subscribed to [/dji_sdk/imu]
average rate: 100.752
    min: 0.001s max: 0.015s std dev: 0.00187s window: 98

RealSense /camera/imu Topic 464HZ


$ rostopic hz /camera/imu 
subscribed to [/camera/imu]
average rate: 464.291
    min: 0.000s max: 0.010s std dev: 0.00132s window: 455

ROS IMU Topic 데이터 내용 비교



DJI /dji_sdk/imu Topic




항목      
항목명
유무


orientation
자세
있음

angular_velocity
각속도
있음

linear_acceleration
Line 가속도
있음

covariance
공분산
모두 0

$ rostopic echo /dji_sdk/imu

header: 
  seq: 237
  stamp: 
    secs: 1569478809
    nsecs: 122336009
  frame_id: "body_FLU"
orientation: 
  x: -0.00366802891774
  y: -0.00091475364914
  z: 0.773214044034
  w: 0.634133858817
orientation_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
angular_velocity: 
  x: 0.00093776488211
  y: 0.00052648014389
  z: 0.0036175835412
angular_velocity_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
linear_acceleration: 
  x: 0.484034068901
  y: -0.087910623651
  z: -0.0438347323649
linear_acceleration_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

RealSense /camera/imu Topic




항목      
항목명
유무


orientation
자세
없음

angular_velocity
각속도
있음

linear_acceleration
Line 가속도
있음

covariance
공분산
velocity:0.01 acceleration:1.0


*covariance 공분산은 rs_camera.launch 설정 파일에서 고정 설정
$ rostopic echo /camera/imu

header: 
  seq: 864
  stamp: 
    secs: 1569478808
    nsecs: 504884720
  frame_id: "camera_imu_optical_frame"
orientation: 
  x: 0.0
  y: 0.0
  z: 0.0
  w: 0.0
orientation_covariance: [-1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
angular_velocity: 
  x: 0.00175957498141
  y: -0.00349944853224
  z: -0.00175487692468
angular_velocity_covariance: [0.01, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, 0.0, 0.01]
linear_acceleration: 
  x: -0.128430217505
  y: 0.153774112463
  z: 9.47220611572
linear_acceleration_covariance: [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]

IMU의 Z 방향 가속도 비교



비교 대상 데이터 처리



DJI IMU와 RealSense IMU 그대로 비교에는 보기 어렵기 때문에 데이터를 가공합니다.
  • DJI IMU: Z의 위 방향이 마이너스이므로, 「-1」을 곱해 가공합니다.
  • RealSense IMU: 중력 가속도 "9.8"이 들어 있기 때문에 첫 번째 값을 0으로, 이후의 값은 차이를 취하도록 가공합니다.
  • 자작 IMU : LiDAR에서 위치 차이의 시간 미분으로 계산합니다.


  • rqt_bag로 비교



    정지 상태와 손으로 드론을 이동하는 상태의 비교 결과


    정지 상태 부분의 확대 비교



    드론이 정지 상태로 놓여 있습니다.


    IMU



    DJI
    3개의 IMU의 노이즈 진동 최대치의 경향이 대체로 동일

    RealSense
    3개의 IMU의 노이즈 진동 최대치의 경향이 대체로 동일

    자작
    3개의 IMU의 노이즈 진동 최대치의 경향이 대체로 동일




    수동 이동 상태 부분의 확대 비교



    손으로 드론을 위로 이동한 후 지면으로 돌아온 상태의 비교 결과


    IMU



    DJI
    최대값과 RealSense, 자작 최대값의 차이가 크다

    RealSense
    최대치와 자작 최대치의 경향이 대체로 동일

    자작
    최대값과 RealSense 최대값의 추세가 거의 동일


    좋은 웹페이지 즐겨찾기