Vins-application: D435i + vins_fusion์— ๊ด€ํ•œ ์ผ๋ถ€ ์ž…๋ ฅ

์— ๋งŒ๋“  2020๋…„ 09์›” 16์ผ  ยท  9์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: engcang/vins-application

VIO ๋ชจ๋“œ์—์„œ VINS-FUSION์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๋ช‡ ์•ˆ ๋˜๋Š” ์‚ฌ๋žŒ ์ค‘ ํ•œ ๋ช…์ด๋ฏ€๋กœ ๋ช‡ ๊ฐ€์ง€ ์š”์ ์„ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•ฉ๋‹ˆ๋‹ค.

D435i๋กœ VINS FUSION์„ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค(๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ). ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ถœ์‹œ realsense_stereo_imu_config.yaml์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ๋žŒ๋“ค์ด ๋ณด๊ณ ํ•œ ๊ฒƒ์„ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์นด๋ฉ”๋ผ๋ฅผ ๋งŒ์ง€์ž ๋งˆ์ž ๊ณ„์‚ฐ๋œ ํฌ์ฆˆ๊ฐ€ ๋ฏธ์ณค์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” Kalibr๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์นด๋ฉ”๋ผ๋ฅผ ๋ณด์ •ํ•˜๊ณ  ๋‹ค์Œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.
cam0:
  cam_overlaps: [1]
  camera_model: pinhole
  distortion_coeffs: [0.3775752250096366, -0.08329757139021714, 0.6504570262599587, -0.4530039925701512]
  distortion_model: equidistant
  intrinsics: [395.5922288679944, 395.5957501002353, 319.88738279106286, 239.07386401539998]
  resolution: [640, 480]
  rostopic: /camera/infra1/image_rect_raw
cam1:
  T_cn_cnm1:
  - [0.9999953397168069, 9.448668958037214e-05, 0.0030514942108417595, -0.04984248508758902]
  - [-9.749429725933605e-05, 0.9999995096576434, 0.0009854843073503579, 6.189814698173665e-05]
  - [-0.0030513995994150846, -0.0009857772179980872, 0.9999948585886561, 0.00015202509092000083]
  - [0.0, 0.0, 0.0, 1.0]
  cam_overlaps: [0]
  camera_model: pinhole
  distortion_coeffs: [0.31220975539351176, 0.48299676137352554, -1.4010717249687126, 2.191483852686]
  distortion_model: equidistant
  intrinsics: [396.5827833428163, 396.75838144377565, 319.1950768721882, 238.53973946284336]
  resolution: [640, 480]
  rostopic: /camera/infra2/image_rect_raw

์ด ๋งค๊ฐœ๋ณ€์ˆ˜(imu = 0)๋กœ VINS_FUSION์„ ์‹คํ–‰ํ•  ๋•Œ ์ ์ ˆํ•œ ๋™์ž‘์„ ์–ป์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์ •์ด ๊ดœ์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ ๋ถ„์•ผ์˜ ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ๊ฒฝ์šฐ PDF ๋ณด๊ณ ์„œ๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

  • ์นด๋ฉ”๋ผ IMu ๋ณด์ •์€ ๋…ธ์ด์ฆˆ ๋ฐ€๋„์™€ ๋ฌด์ž‘์œ„ ๋ณดํ–‰ ๊ฐ’์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” Allan ๋ถ„์‚ฐ ์†Œํ”„ํŠธ์›จ์–ด์™€ matlab์˜ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ  ๊ฐ€์†์„ ์œ„ํ•ด ์ด๊ฒƒ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.
    allan_acc
accelerometer_noise_density: 0.0011060    #Noise density (continuous-time)
accelerometer_random_walk:   8.6056e-05    #Bias random walk

๊ทธ๋Ÿฌ๋‚˜ ์ž์ด๋กœ์˜ ๊ฒฝ์šฐ ๋‚˜๋Š” ๋ถ„๋ช…ํžˆ ํšŒ์˜์ ์ž…๋‹ˆ๋‹ค.
allan_gyro

๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

gyroscope_noise_density:     50.427    #Noise density (continuous-time)
gyroscope_random_walk:       0.3480    #Bias random walk

์—ฌ๊ธฐ์—์„œ ์ด๋Ÿฌํ•œ ๊ฐ€์น˜์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์˜๊ฒฌ์„ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ imu-camera ๋ณด์ •์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

cam0:
  T_cam_imu:
  - [0.999848715163262, 0.0018345448477758066, 0.017296856118190283, -0.009035083963879727]
  - [-0.001867318311452875, 0.999996491602708, 0.0018788040335944412, 0.002129300542443833]
  - [-0.01729334868368733, -0.0019108185351930207, 0.9998486329759259, -0.005593943362795322]
  - [0.0, 0.0, 0.0, 1.0]
  cam_overlaps: [1]
  camera_model: pinhole
  distortion_coeffs: [0.3775752250096366, -0.08329757139021714, 0.6504570262599587,
    -0.4530039925701512]
  distortion_model: equidistant
  intrinsics: [395.5922288679944, 395.5957501002353, 319.88738279106286, 239.07386401539998]
  resolution: [640, 480]
  rostopic: /camera/infra1/image_rect_raw
  timeshift_cam_imu: -0.028184396371617668
cam1:
  T_cam_imu:
  - [0.9997911085949877, 0.0019231918046627172, 0.020347985347160178, -0.058894395640646836]
  - [-0.0019818392674274344, 0.999993939322739, 0.0028624519050287085, 0.0021865657711008357]
  - [-0.02034235698054308, -0.002902180399802527, 0.9997888606407872, -0.005416418875488448]
  - [0.0, 0.0, 0.0, 1.0]
  T_cn_cnm1:
  - [0.9999953397168102, 9.448668958037212e-05, 0.003051494210841759, -0.04984248508758902]
  - [-9.749429725933604e-05, 0.9999995096576467, 0.0009854843073503574, 6.189814698173665e-05]
  - [-0.003051399599415084, -0.0009857772179980868, 0.9999948585886594, 0.00015202509092000083]
  - [0.0, 0.0, 0.0, 1.0]
  cam_overlaps: [0]
  camera_model: pinhole
  distortion_coeffs: [0.31220975539351176, 0.48299676137352554, -1.4010717249687126,
    2.191483852686]
  distortion_model: equidistant
  intrinsics: [396.5827833428163, 396.75838144377565, 319.1950768721882, 238.53973946284336]
  resolution: [640, 480]
  rostopic: /camera/infra2/image_rect_raw
  timeshift_cam_imu: -0.028184788415138273

ํƒ€์ž„ ์‹œํ”„ํŠธ๊ฐ€ ์Œ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์—์„œ๋„ ๋†€๋ž์Šต๋‹ˆ๋‹ค! ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ?
์นด๋ฉ”๋ผ ๋ณ€ํ™˜๊ณผ ๊ด€๋ จํ•˜์—ฌ VINS_FUSION ๊ด€๋ จ ์Šค๋ ˆ๋“œ์—์„œ body_T_cam0/1์ด ์นด๋ฉ”๋ผ ํ”„๋ ˆ์ž„์—์„œ IMU ํ”„๋ ˆ์ž„์œผ๋กœ์˜ ๋ณ€ํ™˜์ž„์„ ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.

p = body_T_cam0 * q
p: point in IMU coordinates
q: point in camera coordinates

๊ทธ๋ฆฌ๊ณ  Kalibr์˜ T_cam_imu๋Š” IMU ์™ธ๋ถ€ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. IMU์—์„œ ์นด๋ฉ”๋ผ ์ขŒํ‘œ(T_c_i)๋กœ ๋ณ€ํ™˜ํ•˜์ง€๋งŒ VINS_FUSION์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ํ˜•์‹์„ ์–ป๋Š” ๋ฐ ์ง€๊ธˆ๊นŒ์ง€ ์˜์•„ํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ชจ๋“  ์ž‘์—…์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์—ฌ์ „ํžˆ IMU๋กœ VINS๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๊ธธ์–ด์„œ ์ฃ„์†กํ•˜์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ์ž˜๋ชป๋œ ๋ถ€๋ถ„์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@FaboNo ์•ˆ๋…•ํ•˜์„ธ์š”.

  • ์˜ˆ. Pixhawk4 mini๊ฐ€ D435i๋ณด๋‹ค IMU๊ฐ€ ๋” ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์›์ธ Pixhawk 4 mini๋Š” 2๊ฐœ์˜ 6DOF IMU์™€ 1๊ฐœ์˜ ์ž๊ธฐ๊ณ„๋ฅผ ์‚ฌ์šฉํ•œ ๋‹ค์Œ ์ด๋ฅผ ํ•„ํ„ฐ๋งํ•˜์—ฌ ํ•˜๋‚˜์˜ ROS ์ฃผ์ œ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค(ํ•„ํ„ฐ๋ง์— ๋Œ€ํ•ด 100% ํ™•์‹ ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ๋‘ ๊ฐœ์˜ IMU๊ฐ€ ์žˆ์Œ).
  • 100Hz๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ, PX4์™€ MAVROS๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ตœ๋Œ€ ์•ฝ 150Hz๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ์œผ๋กœ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋””์„ ๊ฐ€ IMU์™€ ์นด๋ฉ”๋ผ FPS์˜ ๋น„์œจ์ด 3:1์ธ ๊ฒƒ์ด VINS์— ์ตœ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ณดํ†ต 30Hz ์นด๋ฉ”๋ผ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— 100Hz๊ฐ€ ์ ๋‹นํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  9 ๋Œ“๊ธ€

@FaboNo ์•„๋ž˜ ๊ตฌ์„ฑ์œผ๋กœ ์ž‘๋™ํ•˜๋„๋ก ๊ด€๋ฆฌํ–ˆ์œผ๋ฉฐ ์ž์ฒด ๋ณด์ •์„ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์œผ๋ฉฐ ์ ์ ˆํ•œ ๋ณด์ •์œผ๋กœ ๋” ์ž˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ ์ž˜ ์ž‘๋™ํ•˜๊ณ  ๋ฐœ์‚ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๋ ˆํฌ์—์„œ ์ œ๊ณต๋˜๋Š” left.yaml ๋ฐ right.yaml์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

realsense ์˜ต์…˜์—์„œ ์ž๋™ ๋…ธ์ถœ์„ ๋„๊ณ  IR ์ด๋ฏธ ํ„ฐ๋ฅผ ๋„๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

%YAML:1.0

#common parameters
#support: 1 imu 1 cam; 1 imu 2 cam: 2 cam; 
imu: 1
num_of_cam: 2

imu_topic: "/camera/imu"
image0_topic: "/camera/infra1/image_rect_raw"
image1_topic: "/camera/infra2/image_rect_raw"
output_path: "/home/dji/output/"

cam0_calib: "left.yaml"
cam1_calib: "right.yaml"
image_width: 640
image_height: 480


# Extrinsic parameter between IMU and Camera.
estimate_extrinsic: 1   # 0  Have an accurate extrinsic parameters. We will trust the following imu^R_cam, imu^T_cam, don't change it.
                        # 1  Have an initial guess about extrinsic parameters. We will optimize around your initial guess.

body_T_cam0: !!opencv-matrix
   rows: 4
   cols: 4
   dt: d
   data: [  1,0,0,0.00552,
            0,1,0,-0.0051,
            0,0,1,-0.01174,
            0., 0., 0., 1. ]

body_T_cam1: !!opencv-matrix
   rows: 4
   cols: 4
   dt: d
   data: [ 1,0,0,-0.04464144,
           0,1,0,-0.0051,
           0,0,1,-0.01174,
           0., 0., 0., 1. ]

#Multiple thread support
multiple_thread: 1

#feature traker paprameters
max_cnt: 150            # max feature number in feature tracking
min_dist: 30            # min distance between two features 
freq: 10                # frequence (Hz) of publish tracking result. At least 10Hz for good estimation. If set 0, the frequence will be same as raw image
F_threshold: 1.0        # ransac threshold (pixel)
show_track: 1           # publish tracking image as topic
flow_back: 1            # perform forward and backward optical flow to improve feature tracking accuracy

#optimization parameters
max_solver_time: 0.04  # max solver itration time (ms), to guarantee real time
max_num_iterations: 8   # max solver itrations, to guarantee real time
keyframe_parallax: 10.0 # keyframe selection threshold (pixel)

#imu parameters       The more accurate parameters you provide, the better performance
acc_n: 0.1          # accelerometer measurement noise standard deviation. #0.2   0.04
gyr_n: 0.01         # gyroscope measurement noise standard deviation.     #0.05  0.004
acc_w: 0.001         # accelerometer bias random work noise standard deviation.  #0.002
gyr_w: 0.0001       # gyroscope bias random work noise standard deviation.     #4.0e-5
g_norm: 9.805         # gravity magnitude

#unsynchronization parameters
estimate_td: 1                      # online estimate time offset between camera and imu
td: -0.072                             # initial value of time offset. unit: s. readed image clock + td = real image clock (IMU clock)

#loop closure parameters
load_previous_pose_graph: 0        # load and reuse previous pose graph; load from 'pose_graph_save_path'
pose_graph_save_path: "/home/dji/output/pose_graph/" # save and load path
save_image: 0                   # save image in pose graph for visualization prupose; you can close this function by setting 0 

@FaboNo ์•ˆ๋…•ํ•˜์„ธ์š” FaboNo. ๋‹ต๋ณ€์ด ๋Šฆ์–ด์„œ ์ •๋ง ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. ์šฐ์„ , ๋‚˜๋Š” ๋‹น์‹ ์˜ ์นด๋ฉ”๋ผ ๋ชจ๋ธ์„ ๊ต์ • ํ•  ๊ฒƒ์„ ๊ถŒ์žฅ pinhold-radtan ๋ณด๋‹ค๋Š” equidistant ์‚ฌ์šฉํ•œ.

  2. ์˜ฌ๋ฐ”๋ฅธ ์นด๋ฉ”๋ผ ๋ณด์ • ํ›„ 2๊ฐœ์˜ ์นด๋ฉ”๋ผ์™€ 0๊ฐœ์˜ imu ๋ชจ๋“œ๋กœ VINS-Fusion์„ ์‹คํ–‰ํ•ด ๋ณด์‹ญ์‹œ์˜ค.
    ๋จผ์ € ์ž˜ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋น ๋ฅธ ๋™์ž‘์ด๋‚˜ ์ˆœ์ˆ˜ํ•œ ํšŒ์ „ ์—†์ด ์‰ฌ์šด ๋™์ž‘์—์„œ)

  3. body_T_cam ์ด Kalibr ๊ฒฐ๊ณผ์—์„œ T_cam_imu ์˜ ์—ญํ–‰๋ ฌ ์ธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
    ๋˜ํ•œ 2๊ฐœ์˜ ์นด๋ฉ”๋ผ ๋ชจ๋“œ(์œ„)๋งŒ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— body_T_cam0 ๋ฐ 1์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

  4. ์Œ์ˆ˜ timeshift_cam_imu ๋Š” d435i์˜ ์ •์ƒ ๊ฐ’์œผ๋กœ, ์นด๋ฉ”๋ผ๊ฐ€ IMU๋ณด๋‹ค ์ตœ์‹  ๋ฒ„์ „์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  5. ๋‚ด ๊ฒฝํ—˜์ƒ d435i์— ์ ํ•ฉํ•˜์ง€ ์•Š์€ IMU ์บ˜๋ฆฌ๋ธŒ๋ ˆ์ด์…˜์„ ์œ„ํ•ด Kalibr Allan ์„ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
    ์˜คํžˆ๋ ค d435i์˜ IMU ๋ชจ๋ธ์„ ์ฐพ์€ ๋‹ค์Œ ์—ฌ๊ธฐ์— ํŠน์ • ๋ชจ๋ธ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค

  6. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์—์„œ ์™€ ๊ฐ™์ด ๊ธฐ๋ณธ imu parameters ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
    ๊ทธ๋“ค์€ ์ถฉ๋ถ„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. (๋˜๋Š” ๊ธฐ๋ณธ๊ฐ’์˜ 3๋ฐฐ์™€ ๊ฐ™์ด ์•ฝ๊ฐ„ ์ฆ๊ฐ€)

  7. ์—ฌ๊ธฐ์— ์„ค๋ช…๋œ ๋Œ€๋กœ D435i SDK ์—์„œ IMU calibration ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@FaboNo
๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ๋‚˜๋Š” D435i์— ๋Œ€ํ•œ ์›๋ž˜ ์ž‘์„ฑ์ž์˜ ๊ธฐ๋ณธ ๋งค๊ฐœ ๋ณ€์ˆ˜/yaml ํŒŒ์ผ์ด ์ด์ „์— ๊ฝค ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
๋ชจ๋“  ์™œ๊ณก ๊ฐ’์ด 0์ด๊ณ  ์ดˆ์  ๊ฑฐ๋ฆฌ/์ฃผ์  ๊ฐ’ ๋ฐ ๊ณต์นญ body_T_cam ๊ฐ’๋งŒ ํฌํ•จ๋œ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

์™œ๊ณก ๊ฐ’์ด ํฐ equidistant ์นด๋ฉ”๋ผ ๊ณ ์œ  ๋ณด์ • ๊ฒฐ๊ณผ๊ฐ€ ์ฃผ์š” ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@engcang ๋ฉ”์‹œ์ง€ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ด๋ฏธ์ง€๋Š” ์ด๋ฏธ ์ˆ˜์ •๋˜์—ˆ์œผ๋ฏ€๋กœ Kalibr์„ ์‹คํ–‰ํ•˜๋ฉด ๊ฑฐ์˜ ์“ธ๋ชจ๊ฐ€ ์—†์Šต๋‹ˆ๊นŒ?
์ˆ˜์ •๋  ๋•Œ ์™œ๊ณก๋„ 0๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@marufino ๋ฉ”์‹œ์ง€ ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๋‚ด์ผ ํ•ด๋ณด๊ณ  ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค

@FaboNo
์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ž‘๋™์‹œํ‚ค์…จ๋‚˜์š”?
์ตœ๊ทผ์— Intel D435i๋กœ VINS-Fusion(์Šคํ…Œ๋ ˆ์˜ค)์„ ํ…Œ์ŠคํŠธํ•  ๊ธฐํšŒ๊ฐ€ ์žˆ์—ˆ๊ณ  ์•„์ง ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ์—ฌ๊ธฐ ๊ฒฐ๊ณผ ํด๋ฆฝ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@engcang ๋‹ต๋ณ€์ด ๋„ˆ๋ฌด ๋Šฆ์–ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์˜์ƒ์„ ๋ดค๋Š”๋ฐ ์ธ์ƒ์ ์ด๋„ค์š”. ์ฃผ๋กœ PixHawk4๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • IMU ์ •ํ™•๋„๊ฐ€ D435i๋ณด๋‹ค ๋‚ซ๋‹ค๋Š” ๋œป์ธ๊ฐ€์š”?
  • IMU ๋ฐ์ดํ„ฐ๋ฅผ 100hz, 200hz๋กœ ์ฝ๋Š” ์ฃผํŒŒ์ˆ˜๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
  • PX4๋ฅผ ์‚ฌ์šฉํ•˜์…จ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด Mavros๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์œผ์…จ์Šต๋‹ˆ๊นŒ? ๊ฐœ์ธ์ ์œผ๋กœ PixHawk2๋ฅผ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ์„ค๋“๋ ฅ์ด ์—†์—ˆ๊ณ  IMU ์ฃผํŒŒ์ˆ˜๋ฅผ 100Hz ์ด์ƒ ์˜ฌ๋ฆฌ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
    ์•„์ฃผ ์ข‹์€ ์ž‘ํ’ˆ!

@FaboNo ์•ˆ๋…•ํ•˜์„ธ์š”.

  • ์˜ˆ. Pixhawk4 mini๊ฐ€ D435i๋ณด๋‹ค IMU๊ฐ€ ๋” ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์›์ธ Pixhawk 4 mini๋Š” 2๊ฐœ์˜ 6DOF IMU์™€ 1๊ฐœ์˜ ์ž๊ธฐ๊ณ„๋ฅผ ์‚ฌ์šฉํ•œ ๋‹ค์Œ ์ด๋ฅผ ํ•„ํ„ฐ๋งํ•˜์—ฌ ํ•˜๋‚˜์˜ ROS ์ฃผ์ œ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค(ํ•„ํ„ฐ๋ง์— ๋Œ€ํ•ด 100% ํ™•์‹ ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ๋‘ ๊ฐœ์˜ IMU๊ฐ€ ์žˆ์Œ).
  • 100Hz๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ, PX4์™€ MAVROS๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ตœ๋Œ€ ์•ฝ 150Hz๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ์œผ๋กœ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋””์„ ๊ฐ€ IMU์™€ ์นด๋ฉ”๋ผ FPS์˜ ๋น„์œจ์ด 3:1์ธ ๊ฒƒ์ด VINS์— ์ตœ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ณดํ†ต 30Hz ์นด๋ฉ”๋ผ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— 100Hz๊ฐ€ ์ ๋‹นํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

@engcang ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. realsense_stereo_imu_config.yaml์—์„œ imu ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ–ˆ๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์œ ์ง€ํ–ˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ์–ด์จŒ๋“  ๋‹น์‹ ์˜ ์„ค์ •์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค

@FaboNo
์•ˆ๋…•ํ•˜์„ธ์š”. ์ผ๋ฐ˜์ ์œผ๋กœ yaml ํŒŒ์ผ์—์„œ IMU ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ Kalibr_allan ์—์„œ ์–ป์€ ๋Œ€๋กœ IMU ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๊ทธ๊ฒƒ๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

4์กฑ ๋ณดํ–‰ ๋กœ๋ด‡์ด ์ง€๋ฉด์— ์„ธ๊ฒŒ ๋‹ฟ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฏธ์นœ ๊ฒฝ์šฐ์—๋งŒ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ 10๋ฐฐ ์ด์ƒ์œผ๋กœ ์„ค์ •ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰