SLAM 用測試資料集來測試VINS

2021-08-19 23:51:21 字數 3140 閱讀 3252

目前編寫雙目vins**,發現雙目vins初始化後的尺度存在問題(理想化雙目尺度應該為1),所以想著利用無誤差的測試集來測試一下自己寫的**。我先在單目vins下做了測試,下面是我利用github上賀所長的單目測試集在單目vins上測試的過程:

1.單目vins測試資料集:

(1)gener_alldata.cpp :

a.  createpointslines():   通過這個函式取出設計好的房子圖形中的map點,之後所有的影象都能觀測到這些map點,且順  序不變;

b.  imudata  和 imudata_noise:   只用了imudata;

c. camdata:  完全由imudata 和map點決定,所以沒有誤差;

(2)imudata的生成:imu.cpp

a. motionmodel:  直接給出imu的線加速度和角加速度 以及imu的r、t;(需要推導)

2.在vins中新建兩個節點分別讀取feature資料 和 imu資料:

(1)其中map點在各幀觀測的歸一化座標儲存在 vio_data_simulation/bin/keyframe/all_points_x.txt中

(6維,map3維+1+歸一化座標點2維),

(2)feature的時間 儲存在vio_data_simulation/bin/cam_pose.txt中

(14維,時間1維+q4維+t3維+陀螺儀加速度3維+線加速度3 維), 

(3)imu資料儲存在vio_data_simulation/bin/imu_pose.txt(無雜訊)

( 與cam_pose儲存相同,只需要時間和gyro、acc 7維)。

3.節點發布:

(1)feature發布:注意頻率為30

ros::init(argc, argv, "test_pub_feature");

ros::nodehandle n("~");

ros::console::set_logger_level(rosconsole_default_name, ros::console::levels::info);

pub_img = n.advertise("feature", 1000);

test_s();// 讀取feature 和 time 資料

int count = 0;

ros::rate loop_rate(30);

while(ros::ok())

(2)imu發布:注意頻率為200(與上面類似)

4.引數修改:projection_parameters + cam to imu 的 r、t

5.執行結果:refine之前g=9.80418

6.完整**:

test_pub_feature.cpp

#include #include #include #include #include #include #include #include #include #include bool publish = 1;

ros::publisher pub_img,pub_match,pub_imu;

ros::publisher pub_restart;

int image_num = 600;

int init_pub = 0;

/*struct imu_data

;*/void load_feature(std::string filename, std::vector&point)

}}void load_camtime(std::string filename, std::vector&time)

}}void pub_feature(const std::vector&point, const double per_time)

feature_points->channels.push_back(id_of_point);

feature_points->channels.push_back(u_of_point);

feature_points->channels.push_back(v_of_point);

feature_points->channels.push_back(velocity_x_of_point);

feature_points->channels.push_back(velocity_y_of_point);

//ros_info("publish point %f, at %f", feature_points->header.stamp.tosec(), ros::time::now().tosec());

pub_img.publish(feature_points);

}std::vectorcam_time;

std::vector> all_points;

void test_s() }

int main(int argc, char **argv)

}

test_pub_imu.cpp

#include #include #include #include #include #include #include #include #include #include #include bool publish = 1;

ros::publisher pub_imu;

struct imu_data

;void load_imu(std::string filename, std::vector&imu_data)

}}void pubimu(const imu_data & imu_data)

std::vectorcam_time;

std::vectorimu_data;

std::vector> all_points;

void test_s()

int main(int argc, char **argv)

}

構造測試資料 對比測試資料

正確 include using namespace std typedef long long ll const int max n 1e6 10 intmain return0 author max n date 2019 10 04 15.03.21 description 正確 錯誤 inc...

web測試 資料分層測試

51testing 測試效率低下?很多時間都在等程式開發功能,直到介面層展現出來資料後,我們才能介入測試,然後忙的焦頭爛額,上線前心裡還沒底。亦或者發現乙個bug,發給程式猿a查,程式猿a說,可能是程式猿b的問題,你讓程式猿b查查。程式猿b說,我這正忙著呢,你讓a先查查,然後這個bug就丟在那裡好久...

常用測試資料

程式或應用編寫好了之後,通常要輸入一些測試資料,我們懶人一般的做法就是,輸入 asdf,愛上對方,阿道夫。之類的隨手打的字元。這裡,我收集了一點點資料供測試時候使用,應該可以作為常用的測試資料。1.常用的姓名 平時,很多系統比如員工名字需要,但是又怕洩露隱私,所以這裡從網上收集了中國50個最常用的姓...