Étalonnage conjoint de la caméra binoculaire et de l'IMU

avant-propos

Pour la fusion laser visuelle ultérieure SLAM et passant par VINS-Fusion, il est nécessaire de calibrer les paramètres internes de la caméra binoculaire et de l'IMU et leurs paramètres externes (matrice de transformation).

Prêt à travailler

  • Caméra binoculaire : ZED-m
  • IMU : realsense-t265 (utilisez simplement ses informations imu)
  • Système : Ubuntu16.04 + ROS kinetic (il est recommandé d'utiliser ros pur, c'est-à-dire que le nouveau système est installé avec ros et qu'une machine virtuelle peut être utilisée)

Étalonnage de la caméra binoculaire

Ici, vous devez obtenir la matrice de paramètres internes de l'appareil photo, vous pouvez utiliser les informations d'étalonnage fournies avec l'appareil photo, ou vous pouvez utiliser la boîte à outils d'étalonnage pour calibrer, comme VINS-Fusion, Kalibr, ici je prends Kalibr comme exemple .

Installation de Kalibr

Parce que l'étalonnage ultérieur des joints nécessite également d'utiliser Kalibr , voici son installation. Vous pouvez accéder directement au Wiki pour voir le didacticiel d'installation officiel. Le didacticiel a écrit deux méthodes d'installation. Ici, nous utilisons le code source pour compiler et installer. Officiellement utilisé Ubuntu14.04+ ROS indigo, vous pouvez également tester Ubuntu16.04.

# 这里默认你已经做好了准备工作,比如创建工作空间kalibr_workspace,source了

# 安装libv4l,不然报错找不到libv4l
sudo apt install libv4l-dev

# 首先进入工作空间的src文件夹,克隆下源码
cd ~/kalibr_workspace/src
git clone https://github.com/ethz-asl/Kalibr.git

# 编译,时间有点长可以出去玩一下
cd ~/kalibr_workspace
catkin_make

Une fois l'installation terminée, nous testerons si l'installation est réussie. Ici, une carte de calibrage est générée. Pour imprimer sur du papier A4, la commande est la suivante

# 启动rosmaster
roscore

# 生成标定板(7行6列,每个棋盘格宽0.05m)
rosrun kalibr kalibr_create_target_pdf --type checkerboard --nx 6 --ny 7 --csx 0.05 --csy 0.05

Vous pouvez trouver le pdf généré dans le répertoire actuel (comme indiqué sur la figure), l'imprimer en fonction de la taille réelle, chaque grille doit mesurer 2,92 cm, créer un
insérez la description de l'image ici
nouveau target_6x7.yaml et enregistrer les paramètres

target_type: 'checkerboard'
targetCols: 6
targetRows: 7
rowSpacingMeters: 0.029
colSpacingMeters: 0.029

Processus d'étalonnage

  • Fixez la caméra, déplacez la carte de calibrage devant pendant une dizaine de secondes, et enregistrez le sac :
    rosbag record /cmaera/image_1 /camera/image_2 -O camera.bag

Ici, vous pouvez réduire la fréquence de sortie de la caméra, réduire la taille de l'emballage et le temps de traitement

  • calibrer
    rosrun kalibr kalibr_calibrate_cameras --target target_6x7.yaml --bag cameara.bag --models pinhole-radtan pinhole-radtan --topics /cmaera/image_1 /camera/image_2 --show-extraction --bag-from-to 5 20
    insérez la description de l'image ici

  • Le résultat de l'étalonnage génère un yamlfichier dans le répertoire courant :
    insérez la description de l'image ici

cam0:
  cam_overlaps: [1]
  camera_model: pinhole
  distortion_coeffs: [0.0067221785223551735, 0.0006309071251854829, -0.0009206033732726818,
    -0.005807607326385791]
  distortion_model: radtan
  intrinsics: [374.8798664259513, 376.62433296380203, 633.6382978832153, 368.203361863134]
  resolution: [1280, 720]
  rostopic: /zedm/zed_node/left/image_rect_color
cam1:
  T_cn_cnm1:
  - [0.9999958135540992, 0.0007219875640781401, 0.002802072131479685, -0.06140952719752661]
  - [-0.0007241075974458178, 0.9999994523273698, 0.0007556541173352181, -0.0009541268599771967]
  - [-0.0028015250239860137, -0.0007576799555491327, 0.9999957886804435, 0.0005387148522162342]
  - [0.0, 0.0, 0.0, 1.0]
  cam_overlaps: [0]
  camera_model: pinhole
  distortion_coeffs: [0.008041841705316074, 0.0003735182825901831, -0.001170616434022235,
    -0.006061625440876723]
  distortion_model: radtan
  intrinsics: [373.7879644856689, 376.1467414780452, 632.7953296858204, 368.521883006889]
  resolution: [1280, 720]
  rostopic: /zedm/zed_node/right/image_rect_color

Calibrage de la caméra terminé


Étalonnage de l'IMU

Les IMU ont toutes un bruit blanc gaussien et des erreurs de marche aléatoires. Ici, l' imu_utils de HKUST est utilisé pour l'étalonnage.

installation du solveur ceres

Étant donné que l'outil nécessite la prise en charge de ceres-solver, commencez par compiler et installer ceres-solver.

# 依赖安装
# google-glog + gflags
sudo apt-get install libgoogle-glog-dev libgflags-dev
# BLAS & LAPACK
sudo apt-get install libatlas-base-dev
# SuiteSparse and CXSparse (optional)
sudo apt-get install libsuitesparse-dev

wget http://ceres-solver.org/ceres-solver-2.0.0.tar.gz
tar zxf ceres-solver-2.0.0.tar.gz
cd ceres-solver
mkdir build && cd build
cmake ..
make
sudo make install

-------------------------------------------
# 这里如果报eigen3版本错误,就源码安装eigen3.3
git clone https://github.com/eigenteam/eigen-git-mirror

cd eigen-git-mirror
mkdir build && cd build
cmake ..
sudo make install
--------------------------------------------

installation de code_utils

# 安装依赖
sudo apt-get install libdw-dev

# 安装
cd kalibr_workspace/src
git clone https://github.com/gaowenliang/code_utils.git
cd ..
catkin_make

Solution d'erreur :

back.hpp Aucun fichier de ce type

  • Remplacez le fichier #include "backward.hpp"d' erreur par#include "code_utils/backward.hpp"

'integer_sequence' n'est pas membre de 'std'

  • Remplacez set(CMAKE_CXX_FLAGS "-std=c++11")CMakeLists.txt parset(CMAKE_CXX_STANDARD 14)

installation imu_utils

cd kalibr_workspace/src
git clone https://github.com/gaowenliang/imu_utils.git
# 将CMakeLists.txt中的 `set(CMAKE_CXX_FLAGS "-std=c++11")` 改成 `set(CMAKE_CXX_STANDARD 14)`

cd ..
catkin_make

Notez que vous devez compiler code_utils avant de compiler imu_utils

Sac d'admission

  • Laissez l'UMI s'arrêter ici, et le sac sera admis. La recommandation officielle est de deux heures, mais un temps plus court est acceptable.
    rosbag record /imu -O imu.bag

Étalonnage

  • Créez un nouveau fichier dans le imu_utilspackage au launchformat suivant :
<launch>
    <node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
        <param name="imu_topic" type="string" value= "/imu"/>    # imu topic的名字
        <param name="imu_name" type="string" value= "my_imu"/>   	# imu名字,和生成的标定结果文件名有关
        <param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>
        <param name="max_time_min" type="int" value= "120"/>   #标定的时长,bag包时长
        <param name="max_cluster" type="int" value= "100"/>
    </node>
</launch>
  • démarrer l'étalonnage
# 启动launch文件
roslaunch imu_utils imu.launch

# 以200倍数播放bag包
rosbag play -r 200 imu.bag
  • Il faut environ moins d'une minute pour obtenir les résultats, et les yamlfichiers générés sont enregistrés dans imu_utilsle datadossier comme suit :
%YAML:1.0
---
type: IMU
name: my_imu
Gyr:
   unit: " rad/s"
   avg-axis:
      gyr_n: 2.2484739538368025e-03
      gyr_w: 3.5602903646558489e-05
   x-axis:
      gyr_n: 1.9584487136985310e-03
      gyr_w: 2.2409337050820371e-05
   y-axis:
      gyr_n: 3.2136018308294412e-03
      gyr_w: 6.1995884096858201e-05
   z-axis:
      gyr_n: 1.5733713169824356e-03
      gyr_w: 2.2403489791996893e-05
Acc:
   unit: " m/s^2"
   avg-axis:
      acc_n: 1.8278764625497403e-02
      acc_w: 6.7504987254087304e-04
   x-axis:
      acc_n: 1.5158936655427320e-02
      acc_w: 6.4629814567923399e-04
   y-axis:
      acc_n: 1.8054000063118674e-02
      acc_w: 7.0841732570667293e-04
   z-axis:
      acc_n: 2.1623357157946221e-02
      acc_w: 6.7043414623671254e-04
  • Enregistrez le résultat
    Pour le calibrage caméra-IMU plus tard, nous avons besoin de quatre quantités, , , , créez-en une nouvelle et gyr_nenregistrez - lagyr_wacc_nacc_wimu.yaml
rostopic: /imu
update_rate: 200.0 #Hz

accelerometer_noise_density: 1.8278764625497403e-02 
accelerometer_random_walk: 6.7504987254087304e-04
gyroscope_noise_density: 2.2484739538368025e-03
gyroscope_random_walk: 3.5602903646558489e-05

Étalonnage IMU terminé


Étalonnage conjoint de la caméra et de l'IMU

  • Fixez l'IMU et la caméra ensemble pour enregistrer le sac.Lors de l'enregistrement, vous devez stimuler pleinement les différents axes de l'IMU, faire pivoter autour de 3 axes et traduire dans 3 directions
    rosbag record /cmaera/image_1 /camera/image_2 /imu -o camera_imu.bag

  • Étalonnage
    rosrun kalibr kalibr_calibrate_imu_camera --target target_6x7.yaml --bag camera_imu.bag --cam camchain.yaml --imu imu.yaml --show-extraction --bag-from-to 5 45

  • Le temps d'exécution sera plus long et le résultat générera un fichier yaml, comme suit

cam0:
  T_cam_imu:
  - [0.9979030100755206, -0.03697544076091466, 0.05312625775218281, 0.014445441988765368]
  - [-0.04740946675322602, -0.976335826957961, 0.21099927834115637, 0.010927983867985913]
  - [0.044067277478760034, -0.213075502531028, -0.9760414464953624, -0.07194777524510915]
  - [0.0, 0.0, 0.0, 1.0]
  cam_overlaps: [1]
  camera_model: pinhole
  distortion_coeffs: [0.0067221785223551735, 0.0006309071251854829, -0.0009206033732726818,
    -0.005807607326385791]
  distortion_model: radtan
  intrinsics: [374.8798664259513, 376.62433296380203, 633.6382978832153, 368.203361863134]
  resolution: [1280, 720]
  rostopic: /zedm/zed_node/left/image_rect_color
  timeshift_cam_imu: 0.005640967418453902
cam1:
  T_cam_imu:
  - [0.9979880830532742, -0.03827724121820314, 0.0505434356605769, -0.04715785867130577]
  - [-0.0480987303198019, -0.9764695294287694, 0.2102231439180307, 0.00990902333616146]
  - [0.0413073628457973, -0.21223126749346238, -0.9763460405372905, -0.07145750657936548]
  - [0.0, 0.0, 0.0, 1.0]
  T_cn_cnm1:
  - [0.9999958135540998, 0.0007219875640781401, 0.0028020721314796844, -0.06140952719752661]
  - [-0.0007241075974458178, 0.9999994523273704, 0.000755654117335218, -0.0009541268599771967]
  - [-0.0028015250239860133, -0.0007576799555491326, 0.9999957886804441, 0.0005387148522162342]
  - [0.0, 0.0, 0.0, 1.0]
  cam_overlaps: [0]
  camera_model: pinhole
  distortion_coeffs: [0.008041841705316074, 0.0003735182825901831, -0.001170616434022235,
    -0.006061625440876723]
  distortion_model: radtan
  intrinsics: [373.7879644856689, 376.1467414780452, 632.7953296858204, 368.521883006889]
  resolution: [1280, 720]
  rostopic: /zedm/zed_node/right/image_rect_color
  timeshift_cam_imu: 0.0038136751527354084

Je suppose que tu aimes

Origine blog.csdn.net/qq_34935373/article/details/122563824
conseillé
Classement