نظرًا لأنك واحد من القلائل الذين تمكنوا من تشغيل VINS-FUSION على وضع VIO ، أعود إليك لتوضيح بعض النقاط وطلب ملاحظاتك.
أحاول تشغيل VINS FUSION باستخدام D435i (مثل العديد من الأشخاص على ما أعتقد). باستخدام الإصدار المتاح realsense_stereo_imu_config.yaml ، لقد اختبرت ما قد أبلغ عنه الناس ، بمجرد لمس الكاميرا ، أصبح الوضع المحسوب مجنونًا.
لذلك استخدمت كاليبر:
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
أعتقد أن المعايرة على ما يرام لأنني عندما أقوم بتشغيل VINS_FUSION باستخدام هذه المعلمات (imu = 0) ، حصلت على سلوك لائق. سأكون أكثر من سعيد لمشاركة تقرير pdf معك إذا لزم الأمر لأنني لست خبيرا في هذا المجال.
accelerometer_noise_density: 0.0011060 #Noise density (continuous-time)
accelerometer_random_walk: 8.6056e-05 #Bias random walk
لكن من الواضح أنني متشكك في الدوران:
لأن القيم كالتالي:
gyroscope_noise_density: 50.427 #Noise density (continuous-time)
gyroscope_random_walk: 0.3480 #Bias random walk
هنا أود أن آخذ رأيك في هذه القيم؟
ومع ذلك ، تمكنت من إجراء معايرة كاميرا imu:
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.
ومع ذلك ، على الرغم من كل هذا العمل ، ما زلت غير قادر على تشغيل VINS مع IMU. آسف لكونك طويلاً ولكن هل ترى شيئًا خاطئًا هنا قد يفسر سبب عدم عمله؟
شكرا جزيلا
FaboNo تمكنت من تشغيلها مع التكوين أدناه ، ولم أكن بحاجة إلى تشغيل
لقد استخدمت اليسار. yaml و right.yaml المقدمين في هذا الريبو
تأكد من إيقاف تشغيل التعريض التلقائي وإيقاف تشغيل باعث الأشعة تحت الحمراء في خيارات realsense ،
%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
تضمين التغريدة أنا آسف جدا لتأخر الرد. لم أدرك أنني حصلت على مشكلة جديدة.
بادئ ذي بدء ، أوصيك بمعايرة طراز الكاميرا بـ pinhold-radtan
، بدلاً من equidistant
، الذي استخدمته.
بعد معايرة الكاميرا الصحيحة ، يرجى محاولة تشغيل VINS-Fusion بكاميرا 2 و 0 وضع imu.
يجب أن يعمل جيدًا أولاً (في ظل حركات سهلة ، بدون حركة سريعة أو دوران خالص)
تأكد من أن تعيين body_T_cam
هو مصفوفة معكوسة لـ T_cam_imu
من نتيجة Kalibr الخاصة بك.
تحقق أيضًا من body_T_cam0 و 1 قبل تشغيل وضع الكاميراتين فقط (أعلاه).
سالب timeshift_cam_imu
هي القيمة العادية لـ d435i ، مما يعني أن الكاميرا أحدث من IMU.
ليس عليك تشغيل كاليبر آلان لـ IMU calibraiton الخاص بك ، والذي لم يكن مناسبًا لـ d435i من أجل تجربتي ،
بدلاً من ذلك ، وجدت نموذج IMU الخاص بـ d435i ثم استخدمت معلمة هذا النموذج المحدد كما هو الحال هنا
ومع ذلك ، أوصي باستخدام الافتراضي فقط imu parameters
كما هو الحال هنا
يجب أن تكون كافية. (أو قم بزيادتها قليلاً ، مثل 3 أضعاف القيم الافتراضية)
أوصيك بتشغيل IMU calibration
من D435i SDK كما أوضحت هنا
تضمين التغريدة
بالمناسبة ، راجعت المعلمة الافتراضية / ملفات yaml من المؤلفين الأصليين لـ D435i تعمل جيدًا من قبل.
حتى مع جميع قيم التشويه 0 والأطوال البؤرية / قيم النقاط الرئيسية والقيم الاسمية body_T_cam
.
أعتقد أن نتائج المعايرة الجوهرية للكاميرا equidistant
مع قيم تشويه ضخمة هي المشكلة الرئيسية.
engcang شكرًا لك على رسالتك ، في الواقع تم تصحيح الصور بالفعل ، لذا فإن تشغيل Kalibr عليها يكاد يكون عديم الفائدة ، أليس كذلك؟
عند تصحيحها ، يجب أن يكون التشويه مساويًا للصفر أيضًا.
marufino شكرًا جزيلاً على رسالتك ،
تضمين التغريدة
أي أخبار عن هذا الموضوع؟ هل حصلت عليه العمل؟
لقد أتيحت لي مؤخرًا فرصة لاختبار VINS-Fusion (استريو) باستخدام Intel D435i وإليك مقطع النتيجة ، إذا كنت مهتمًا بذلك حتى الآن.
engcang أنا آسف للرد في وقت متأخر جدا. لقد شاهدت الفيديو وهو مثير للإعجاب. لذا لدي بعض الأسئلة لك ، وذلك أساسًا لأنك استخدمت PixHawk4.
تضمين التغريدة
engcang أشكركم على ردكم. أتساءل هل قمت بتغيير قيم معلمات imu في realsense_stereo_imu_config.yaml أم احتفظت بها دون تغيير؟
سأحاول الإعداد الخاص بك على أي حال
تضمين التغريدة
أهلا. عادة ، لا أقوم بتغيير معلمات IMU في ملف yaml. حاولت أيضًا ضبط معلمات IMU كما حصلت عليها من Kalibr_allan ،
كيف لم أستطع الحصول على أداء أفضل باستخدامها.
فقط للحالات المجنونة مثل الروبوتات الرباعية التي تلامس الأرض بقوة ، أحاول ضبط المعلمات أكبر بعشر مرات أو أقل ، وهي تعمل.
التعليق الأكثر فائدة
تضمين التغريدة