EUROC數據集提供了雙目和IMU數據,可是並沒有找到關於雙目相機基線長度的直接描述。
查看了一番關於該數據集的論文publisher,設備描述部分並沒有關於這一點的細節。
不過數據集中提供了sensor.yaml文件,該文件中,有這個sensor關於Body的T_BS(齊次座標形式的4×4矩陣,可以參考高博的書籍或者博客)。
根據座標轉換關係:
T_C1C2=T_C1B * T_BC2,寫兩行代碼應該可以算一下。
#include <iostream>
using namespace std;
#include <Eigen/Core>
#include <Eigen/Dense>
int main()
{
Eigen::Matrix4d T_BC1;
Eigen::Matrix4d T_BC2;
T_BC1<<0.0148655429818, -0.999880929698, 0.00414029679422, -0.0216401454975,
0.999557249008, 0.0149672133247, 0.025715529948, -0.064676986768,
-0.0257744366974, 0.00375618835797, 0.999660727178, 0.00981073058949,
0.0, 0.0, 0.0, 1.0;
T_BC2<<0.0125552670891, -0.999755099723, 0.0182237714554, -0.0198435579556,
0.999598781151, 0.0130119051815, 0.0251588363115, 0.0453689425024,
-0.0253898008918, 0.0179005838253, 0.999517347078, 0.00786212447038,
0.0, 0.0, 0.0, 1.0;
cout.precision(15);
cout<<"T_BC1"<<endl<<T_BC1<<endl;
cout<<"T_BC2"<<endl<<T_BC2<<endl;
Eigen::Matrix4d T_C1C2 = Eigen::Matrix4d::Zero();
T_C1C2 = T_BC2.inverse()*T_BC1;
cout<<"T_C1C2"<<endl<<T_C1C2<<endl;
return 0;
}
T_BC1和T_BC2的數據來自cam0和cam1文件夾中的sensor.yaml文件。
輸出結果如下:
T_BC1
0.0148655429818 -0.999880929698 0.00414029679422 -0.0216401454975
0.999557249008 0.0149672133247 0.025715529948 -0.064676986768
-0.0257744366974 0.00375618835797 0.999660727178 0.00981073058949
0 0 0 1
T_BC2
0.0125552670891 -0.999755099723 0.0182237714554 -0.0198435579556
0.999598781151 0.0130119051815 0.0251588363115 0.0453689425024
-0.0253898008918 0.0179005838253 0.999517347078 0.00786212447038
0 0 0 1
T_C1C2
0.999997256477881 0.00231206719242389 0.00037600810241559 -0.110073808127187
-0.00231713572328124 0.999898048506644 0.0140898358466482 0.000399121547014141
-0.000343393120524168 -0.0140906684527146 0.999900662637728 -0.000853702503358044
0 0 0 1
可以看出來,T_C1C2的t向量部分(代表平移),只有第一個值不是0(近似)。R矩陣部分近似單位陣也證明兩個cam之間沒有旋轉。
姑且認爲這個
0.110073808127187
就是基線的長度,單位:米。(無人機上裝載的傳感器,10釐米左右的基線貌似也挺合理)
如果哪位看官發現了數據集官方有對基線長度的直接描述,歡迎交流,指正!