文章目錄
小覓運行VINS的整體流程
好久沒有寫博客了。這是之前小覓運行的一些內容,寫的十分詳細,包含了從環境搭建到imu標定,相機標定和程序運行等等內容。可以進行參考!
1 環境準備
1.1 安裝ubuntu16.04
目前已經有了ubuntu18.04。但是我這裏使用的還是16.04,因爲比較穩定。SLAM的開發等工作目前仍然是基於ubuntu的,所以要熟悉ubuntu的基本操作和命令等。
參考內容:https://blog.csdn.net/s717597589/article/details/79117112
坑:
- 各個電腦進入bios 的U盤啓動的方式不同,這個可以自行百度
- 進入ubuntu之後,使用sudo apt-get xxx等命令時出現E: 無法獲得鎖 /var/lib/dpkg/lock-frontend
方法1:https://blog.csdn.net/qq_36910634/article/details/90512126 - 此外,還會有不能聯網等等問題,這個可以自行百度解決
其他內容:
有一些ubuntu下比較使用的軟件,比如terminator(命令行窗口工具)、Unity Tweak Tool(桌面管理軟件)、VSCODE(看代碼)、KAZAM(錄屏)、WPS等等,視情況安裝。同時最好有一個筆記軟件,我使用的是網頁版網易雲筆記。
1.2 安裝ROS系統
SLAM的操作都是基於ROS系統的,所以也要熟悉ROS的操作,如roslaunch、rosrun、rosbag等等。另外,ROS已經推出了2.0版本,我一直沒時間使用,感興趣的話可以用一下新版本。
參考:https://blog.csdn.net/softimite_zifeng/article/details/78632211
坑:
- 儘量找一個網絡好點的地方,其中下載失敗可能是由於網絡原因
1.3 其他內容
此外還需要安裝一些環境,爲之後做準備。安裝方法自行百度即可,期間也會有很多坑,只要耐心搜索都會解決的,儘量參考CSDN等博客的方法。
OpenCV(小覓SDK需要) https://blog.csdn.net/u013066730/article/details/79411767
ceres(VINS需要) https://blog.csdn.net/jz1570551401/article/details/78207208
等
坑:
- 在配置環境時,往往需要安裝很多包,比如安裝OpenCV之前就需要安裝一些基礎包,而有些參考博客中,因爲時間比較久,安裝的版本可能是已經過時,導致安裝時包的依賴環境發生混亂,這是一個需要注意的點。一般情況下改爲最新版本的包就可以了。
2 小覓SDK的安裝、運行和使用
小覓的SDK安裝之前需要先安裝OpenCV。
參考:https://mynt-eye-s-sdk.readthedocs.io/zh_CN/latest/src/sdk/contents.html
2.1 小覓SDK的安裝
mkdir mynt
cd mynt
git clone https://github.com/slightech/MYNT-EYE-S-SDK.git
cd <sdk> # <sdk> 是指sdk路徑
make init
make install
make samples
make ros
2.2 小覓的sample
小覓SDK文件中的sample/_output/bin/
下有很多示例程序可以查看小覓相機採集到的圖像、參數等等。
但是其參數並不一定準確,所以也需要後期標定。
2.3 ROS下運行小覓
先得source一下setup.bash文件!!
source wrappers/ros/devel/setup.bash
roslaunch mynt_eye_ros_wrapper display.launch // 測試!
但是我運行mynteye.launch,因爲不卡。
也可以直接給.bashrc文件添加代碼,然後就不用每次都souce了。
echo "source ~/MYNT-EYE-S-SDK-2.3.8/wrappers/ros/devel/setup.bash"
>> ~/.bashrc
source ~/.bashrc # 這個代碼不一定對,但是做法是這樣的
2.4 一些可能用到的
rostopic list 查看小覓發佈的topic
rosbag record/play 錄製/播放bag數據包
rostopic hz 查看相應topic的發佈頻率
3 VINS的運行
3.1 下載vins源代碼並編譯
mkdir catkin_ws/src
cd ~/catkin_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git
cd ../
catkin_make
source ~/catkin_ws/devel/setup.bash # 也可以在.bashrc文件中直接添加這一句
2.2 運行VINS
之前找到的config文件中,沒有equ的相機模型,之後自己在MYNT-EYE-VINS-FUSION-Samples/docker/mynteye-s2100
找到了相應的配置文件,放在了4VINS_test/0config
中。可以運行,漂移也小了很多,但是還是會漂移,所以需要IMU和相機的標定。
(注意需不需要source!將本程序的setup.bash,source到.bashrc文件當中,如果已經寫入,則不需要)
// 運行啓動文件
roslaunch vins vins_rviz.launch
// catkin_ws目錄下 config文件還是可以改的
rosrun vins vins_node 4VINS_test/0config/mynt_stereo_config.yaml
// 閉環,必須在開環執#(optional)
rosrun loop_fusion loop_fusion_node src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml
2.3 全部運行
- ROS下運行小覓/rosbag play播放bag數據包
- roslaunch vins vins_rviz.launch
- rosrun vins vins_node “相應的yaml配置文件”
- (optional) rosrun loop_fusion loop_fusion_node “相應的yaml配置文件”**
4 IMU校準
IMU的校準主要有兩種:imu_tils和kalibr,其中kalibr還需要安裝matlab,所以我是用了imu_tils。(後期安裝了matlab想要實驗一下kalibr,但是編譯一直有問題),不管是哪種,都需要採集兩個小時的IMU靜止數據。然後通過allan方差的方式進行標定
**注:**羣裏有人說imu_utils有以下問題,推薦使用kalibr!但是具體的還沒驗證過,這裏先做記錄。
- imu_utils輸出的是bias不穩定度,不是bias的隨機遊走噪聲
參考:
- 標定步驟:https://blog.csdn.net/YunLaowang/article/details/95608107
https://blog.csdn.net/fang794735225/article/details/92804030 - 源代碼:https://github.com/gaowenliang/imu_utils
https://github.com/rpng/kalibr_allan
- rosbag的命令:https://www.jianshu.com/p/6dd2c08d688e
- allan方差:搜索allan freescale,這事freescale關於allan方差的工程筆記。http://cache.freescale.com/files/sensors/doc/app_note/AN5087.pdf
4.1 數據採集
- roscore # 開啓ros
- roslaunch mynt_eye_ros_wrapper mynteye.launch # 開啓小覓
- rostopic list # 查看小覓相機發布的topic rostopic會有很多,我們需要的是/mynteye/imu/data_raw
- cd <想要保存數據的文件中>
- rosbag record -O imu_cal_test1,bag /mynteye/imu/data_raw
結束時直接ctrl+C。
4.2 標定包的安裝
這一部分都是參考了參考1,兩個博客進行對比參考。
imu_utils的使用需要依賴code_utils,因此需要提前安裝。
cd ~/catkin_ws/src
git clone https://github.com/gaowenliang/code_utils
cd ~/catkin_ws
catkin_make
在編譯之前需要對源碼進行修改:
方法一:
在~/catkin_ws/src/code_utils/CMakeLists.txt中,添加:include_directories(“include/code_utils”)
方法二:
修改~/catkin_ws/src/code_utils/src/sumpixel_test.cpp
文件中的#include "backward.hpp"爲#include “code_utils/backward.hpp”
避免出現如下錯誤:
catkin_ws/src/code_utils/src/sumpixel_test.cpp:2:24:
fatal error: backward.hpp: No such file or directory
下載、編譯imu_utils
cd ~/catkin_ws/srcgit clone https:
//github.com/gaowenliang/imu_utils
cd ~/catkin_ws
catkin_make
錯誤及解決方案:
錯誤:
catkin_ws/src/imu_utils/src/imu_an.cpp:68:19: error:
aggregate ‘std::ofstream out_t’ has incomplete type and
cannot be defined std::ofstream out_t;
解決方案:
在imu_an.cpp文件中添加頭文件:#include
4.3 標定
rosbag play -r 200 imu_utils/imu.bag (這裏要寫你錄製的包的路徑)
cd imu_ws
source ./devel/setup.bash
roslaunch imu_utils mynt_imu.launch
注意這裏的launch文件,我用的是小覓相機,所以imu.launch的內容爲:
<launch>
<node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
<param name="imu_topic" type="string" value= "/mynteye/imu/data_raw"/> #imu topic的名字
<param name="imu_name" type="string" value= "mynteye"/>
<param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>
<param name="max_time_min" type="int" value= "120"/> #標定的時長
<param name="max_cluster" type="int" value= "100"/>
</node>
</launch>
標定完成後,會生成mynteye_imu_param.yaml以及多個txt文檔。
5 相機標定
參考:https://blog.csdn.net/heyijia0327/article/details/83583360
https://blog.csdn.net/u011178262/article/details/83316968
5.1 安裝kalibr
自行搜索。
我在臺式機上安裝的時候出現問題,編譯的時候好像需要下載一些東西,但是下載的特別慢。
5.2 採集數據
rosrun topic_tools throttle messages /mynteye/left/image_raw 4.0 /left
rosrun topic_tools throttle messages /mynteye/right/image_raw 4.0 /right
對左右目的ros topic降低頻率後就可以製作bag了
坑1:
這裏的頻率4,也不一定是這個,s2100的默認頻率爲200Hz,所以可以設爲4,對於s1030,它的默認頻率爲250Hz,當改爲4Hz後,就會導致兩個相機的幀率不同步。設爲5Hz的時候就可以了。
rosbag record -O stereo_calibra.bag /left /right
5.3 標定
採集好數據集以後, 就可以用已經安裝好的 Kalibr 標定雙目相機了, 指令如下:
source ros_ws/kalibr/devel/setup.bash
rosrun kalibr kalibr_calibrate_cameras
--bag /home/heyijia/stereo_calibra.bag
--topics /left /right
--models pinhole-radtan pinhole-radtan
--target /home/heyijia/april_6x6_80x80cm_A0.yaml
或者採用 pinhole-equi 模型,對畸變大的相機效果不錯
rosrun kalibr kalibr_calibrate_cameras
--bag /home/heyijia/stereo_calibra.bag
--topics /left /right
--models pinhole-equi pinhole-equi
--target /home/heyijia/april_6x6_80x80cm_A0.yaml
重投影誤差在 0.1~0.2 以內,標定結果較好,如下所示。
坑2:
由於我的標定板是自己打印A4紙,然後進行張貼的,所以誤差比較大。可以考慮使用電腦屏幕直接放置標定板
6 相機+IMU的聯合標定
參考:https://blog.csdn.net/heyijia0327/article/details/83583360
https://blog.csdn.net/u011178262/article/details/83316968
6.1 kalibr的安裝準備
自行搜索
6.2 imu配置文件的準備
根據之前IMU的校準結果編寫imu.yaml
#Accelerometers
accelerometer_noise_density: 2.52e-02 #Noise density (continuous-time)
accelerometer_random_walk: 4.41e-04 #Bias random walk
#Gyroscopes
gyroscope_noise_density: 2.78e-03 #Noise density (continuous-time)
gyroscope_random_walk: 1.65e-05 #Bias random walk
rostopic: /camera/imu/data_raw #the IMU ROS topic
update_rate: 200.0 #Hz (for discretization of the values above)
6.3 相機配置文件準備
直接採用之前kalibr生成的就可以
坑1:
之前校準相機時,使用的topic是改變頻率之後的/left和/right,所以生成的配置文件中也是這兩個topic,但是這裏需要改成小覓發佈的左右目的相機圖片。
6.4 錄製bag
注意不要活動過大
rosbag record /mynteye/imu/data_raw
/mynteye/left/image_raw
/smynteye/right/image_raw
-O images_imu.bag
6.5 校準
kalibr kalibr_calibrate_imu_camera
--target 3worksapce/2kalibr_workspace/yaml/april_6x6_34x34mm.yaml
--cam 3worksapce/2kalibr_workspace/result/s1030_test1/camchain-2datamynt_datas1030_cam_test1.yaml
--imu 3worksapce/1imu_workspace/imu_result_s1030/imu.yaml
--bag 2data/mynt_data/s1030/cam_imu_s1030.bag
--bag-from-to 5 45
運行時間非常非常長
7 參數填寫
這個我之前犯過錯,導致耽誤了比較長時間,所以做一下記錄,IMU和相機的參數沒有什麼可說的,按照yaml文件中的參數命名填寫進去。
坑1: 相機模型。
小覓的相機模型爲KB,並不是普通的針孔,魚眼等,這個涉及到相機模型問題,此處不贅述,只說明一點,其參數爲k2、k3、k4,k5以及中心點和焦距,按照相應參數填寫進去
坑2: 相機和IMU之間的參數
注意,這個參數填寫的是標定結果中的第二個矩陣,具體見下圖。
yaml中的參數 | 標定結果中的參數 |
---|---|