小覓攝像頭第二天

小覓運行VINS的整體流程

  好久沒有寫博客了。這是之前小覓運行的一些內容,寫的十分詳細,包含了從環境搭建imu標定相機標定程序運行等等內容。可以進行參考!

1 環境準備

1.1 安裝ubuntu16.04

  目前已經有了ubuntu18.04。但是我這裏使用的還是16.04,因爲比較穩定。SLAM的開發等工作目前仍然是基於ubuntu的,所以要熟悉ubuntu的基本操作和命令等。
參考內容:https://blog.csdn.net/s717597589/article/details/79117112
坑:

  1. 各個電腦進入bios 的U盤啓動的方式不同,這個可以自行百度
  2. 進入ubuntu之後,使用sudo apt-get xxx等命令時出現E: 無法獲得鎖 /var/lib/dpkg/lock-frontend
    方法1:https://blog.csdn.net/qq_36910634/article/details/90512126
  3. 此外,還會有不能聯網等等問題,這個可以自行百度解決

其他內容:
  有一些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. 儘量找一個網絡好點的地方,其中下載失敗可能是由於網絡原因

1.3 其他內容

  此外還需要安裝一些環境,爲之後做準備。安裝方法自行百度即可,期間也會有很多坑,只要耐心搜索都會解決的,儘量參考CSDN等博客的方法。
OpenCV(小覓SDK需要) https://blog.csdn.net/u013066730/article/details/79411767
ceres(VINS需要) https://blog.csdn.net/jz1570551401/article/details/78207208

坑:

  1. 在配置環境時,往往需要安裝很多包,比如安裝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 全部運行

  1. ROS下運行小覓/rosbag play播放bag數據包
  2. roslaunch vins vins_rviz.launch
  3. rosrun vins vins_node “相應的yaml配置文件”
  4. (optional) rosrun loop_fusion loop_fusion_node “相應的yaml配置文件”**

4 IMU校準

  IMU的校準主要有兩種:imu_tilskalibr,其中kalibr還需要安裝matlab,所以我是用了imu_tils。(後期安裝了matlab想要實驗一下kalibr,但是編譯一直有問題),不管是哪種,都需要採集兩個小時的IMU靜止數據。然後通過allan方差的方式進行標定
**注:**羣裏有人說imu_utils有以下問題,推薦使用kalibr!但是具體的還沒驗證過,這裏先做記錄。

  1. imu_utils輸出的是bias不穩定度,不是bias的隨機遊走噪聲

參考:

  1. 標定步驟:https://blog.csdn.net/YunLaowang/article/details/95608107
    https://blog.csdn.net/fang794735225/article/details/92804030
  2. 源代碼:https://github.com/gaowenliang/imu_utils
    https://github.com/rpng/kalibr_allan
  3. rosbag的命令:https://www.jianshu.com/p/6dd2c08d688e
  4. allan方差:搜索allan freescale,這事freescale關於allan方差的工程筆記。http://cache.freescale.com/files/sensors/doc/app_note/AN5087.pdf

4.1 數據採集

  1. roscore # 開啓ros
  2. roslaunch mynt_eye_ros_wrapper mynteye.launch # 開啓小覓
  3. rostopic list # 查看小覓相機發布的topic rostopic會有很多,我們需要的是/mynteye/imu/data_raw
  4. cd <想要保存數據的文件中>
  5. 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中的參數 標定結果中的參數
在這裏插入圖片描述 在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章