kalibr標定カメラ内パラメータとcam-imu外パラメータ

4077 ワード

環境:ubuntu 16.04 kinetic
公式ダウンロードとインストールチュートリアル:https://github.com/ethz-asl/kalibr/wiki/installationテストされたデータセット、定規ボードのダウンロードページ:https://github.com/ethz-asl/kalibr/wiki/downloads作者用ubuntu 14に注意すれば.04対応のrosバージョンindigo、ここでkineticに変更
コンパイル前にインストール中にwget関連のエラーが発生する可能性があるという人がいました.例えばsuitesparseライブラリにインストールすると、対応するcmakelistsではwgetで圧縮パッケージがダウンロードされ、ダウンロードできないとkalibr全体がインストールできないため、suitesparse下のCMakeListsを変更しました.txtは次のように変更されました:DOWNLOADを見つけました_COMMAND行、ホストエージェント情報を追加
DOWNLOAD_COMMAND rm -f SuiteSparse-${VERSION}.tar.gz && wget "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-${VERSION}.tar.gz" --user-agent="Mozilla/5.0 (Ubuntu;U; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0"

はい、terminalプロンプトがhost agent部分を解析できない場合は、ファイルがダウンロードされているため、この行をコメントすることができます.
DOWNLOAD_COMMAND wget "https://www.baidu.com"

そして公式チュートリアルに従ってコンパイルを開始します
しかし、libnumpy-eigenが見つからないので、私もネット上で誰かが言ったように、ライブラリの接尾辞を探しています.soが変わりました.dylib、それから'module' object has no attribute 'OmniCameraGeometry'が現れて、グーグルは検索して、誰もこの間違いを持っていないので、私は前のコンパイルしたものを全部削除して、最も原始的なコードでもう一度コンパイルして、直接コンパイルに成功しました(元のコードを変更していません)
エラー1:fatal error:numpy/arrayobject.h:No such file or directoryこのソリューションを参照:sudo apt-get install --reinstall python-numpyエラー2:libnumpy_eigenは事実を見つけられずkalibrでworkspaceでpythonを入力し、import numpy_eigenでは確かに見つからないが、python 2を入力し、import numpy_eigenでインポートに成功した.説明kalibrをコンパイルする時、それはシステムのデフォルトのpythonを探して、私のシステムのデフォルトのpythonは3なので、問題の解決策を出しました:システムのデフォルトのpythonバージョンを切り替えて、このネット上には多くのチュートリアルがあって、私はupdate-alternativesを使っています.しかし、人のチュートリアルを見て、最後に切り替えた後、システムのデフォルトpythonバージョンは確かに交換されましたが、私は持っていません.その後,端末がanacondaをデフォルトで開いているbase環境であるため,端末入力pythonはanacondaの下のpythonをずっと表示していることが分かった.端末のbase環境を終了し、pythonを入力するとバージョン2になります.このときkalibrソースコードを再コンパイルすれば大丈夫です.
カメラの内部パラメータを標定したいのですが、実は1つのカメラの内部パラメータを標定したいだけですが、これは複数のカメラの間を標定しているようで、1つ標定すると問題があります3:
314521.998518 	42
314525.101367999 	42
314528.804769999 	42
314531.740800999 	42
314531.874255999 	42
314532.041076 	42
314532.074439999 	42
314532.107804 	42
314532.307987999 	42
314532.374715999 	42
Cameras are not connected through mutual observations, please check the dataset. Maybe adjust the approx. sync. tolerance.
Traceback (most recent call last):
  File "/home/mk/soft/kalibr_workspace/devel/bin/kalibr_calibrate_cameras", line 15, in 
    exec(compile(fh.read(), python_script, 'exec'), context)
  File "/home/mk/soft/kalibr_workspace/src/kalibr/aslam_offline_calibration/kalibr/python/kalibr_calibrate_cameras", line 447, in 
    main()
  File "/home/mk/soft/kalibr_workspace/src/kalibr/aslam_offline_calibration/kalibr/python/kalibr_calibrate_cameras", line 204, in main
    graph.plotGraph()
  File "/home/mk/soft/kalibr_workspace/src/kalibr/aslam_offline_calibration/kalibr/python/kalibr_camera_calibration/MulticamGraph.py", line 311, in plotGraph
    edge_label=self.G.es["weight"],
KeyError: 'Attribute does not exist'

ここを参考に、命令を変更すれば、以下の公式解釈になります.
kalibr_calibrate_cameras --bag '/home/mk/Desktop/euroc-rotation/cam/test_2.bag' --topics /camera/image_raw --models pinhole-radtan --target '/home/mk/Desktop/euroc-rotation/cam/target.yaml' --show-extraction --approx-sync 0.04

カメラとimuの標定入力は4つのファイルを用意します:4つのファイルのフォーマットの要求、公式も出しました
bag : imu   kalibr , bag 
camchain.yaml :  、 
IMU.yanl: IMU 、 、 
target.yaml: 

公式に与えられたcamchain.yamlにはカメラの外参というパラメータがありますが、その時はよく考えられませんでした.私はカメラの外参を持っていました.それではcam-imuも標定されています.その後、このパラメータを大胆に削除し、実行しても問題ありません.
kalibr_calibrate_imu_camera --target '/home/mk/Desktop/euroc-rotation/cam2imu/target.yaml' --cam '/home/mk/Desktop/euroc-rotation/cam2imu/camchain.yaml' --imu '/home/mk/Desktop/euroc-rotation/cam2imu/IMU.yaml' --bag '/home/mk/Desktop/euroc-rotation/cam2imu/test_2.bag'