ROS--雙目相機標定中遇到的問題
ROS–雙目相機標定中遇到的問題
現象
使用兩個usb_cam分別釋出image_raw話題後(如官網上所要求的),再執行rosrun camera_calibration cameracalibrator.py … 進行標定時,視窗變黑,無響應。
反省
這個問題從剛開始弄雙目標定就遇到,起始原因是使用兩個獨立的攝像機代替雙目攝像機。之後為了解決這個問題,去使用ROS書上的程式碼,但是由於版本比較老,導致機器上編譯原始碼一直有錯誤,不斷嘗試各種方法也沒有解決;而且程式碼工程量大,導致一直沒有真正理解原始碼。直到約兩三個月後的2018.01.26實在走投無路,從頭開始一步一步排查的時候發現了官網上一直沒有細看的文件。
解決
文件裡面這段話太重要了!如下:
3.1.1 Unsynchronized Stereo
By default, the image_pipeline assumes that stereo cameras are triggered to capture images simultaneously, and that matching image pairs have identical timestamps. This is the ideal situation, but requires hardware support.
Starting in Diamondback, you will be able to calibrate stereo pairs that are not (or inexactly) synchronized.
To enable approximate timestamp matching, give the –approximate=0.01 option. This permits a “slop” of 0.01s between image pairs. If you still don’t see a display window, or it is sporadically updated, try increasing the slop.
分析
雙目相機在硬體上將兩個攝像機整合到一起,會將兩個相機影象打包後一起進行傳送,所以左右影象是同步的。但是如果使用兩個單目攝像機代替雙目相機時就不能保證收到的左右影象是同一時刻的,這就不滿足標定程式cameracalibrator.py中對左右影象時間戳相同的要求,所以會出現上述視窗黑掉無反應的情況。所幸官網對這種情況作了支援,如上文所示,在只要加入–approximate=0.01即可,如果還沒有反應可以嘗試增大0.01這個值。
例子
- 單獨執行
$ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 --approximate=0.01 right:=/my_stereo/right/image_raw left:=/my_stereo/left/image_raw right_camera:=/my_stereo/right left_camera:=/my_stereo/left
- 在launch檔案的node中
<node ns="$(arg camera)" name="cameracalibrator"
pkg="camera_calibration" type="cameracalibrator.py"
args="--approximate=0.01 --size 8x6 --square 0.028" output="screen">
<remap from="left" to="left/image_raw"/>
<remap from="right" to="right/image_raw"/>
<remap from="left_camera" to="left"/>
<remap from="right_camera" to="right"/>
</node>
工程原始碼
移步到我的github,這個工程實現了使用兩個usb攝像頭組成的雙目相機完成雙目標定以及雙目測距功能,基本功能已經實現,文件還在完善中。本篇文章相關的部分可檢視/launch/stereo_calibration.launch檔案。
總結
所以,使用ROS要看官網文件!不要對英文有排斥!不要過度依賴課本,因為ROS版本不斷更新,書本上很多東西都不適用了。
2018.01.26晚,小記,自省。
相關文章
- 雙目測距與三維重建的OpenCV實現問題集錦(二)雙目定標與雙目校正OpenCV
- ROS下采用camera_calibration進行雙目相機標定ROS
- oracle 雙網路卡遇到的問題Oracle
- 面試遇到的redis相關問題面試Redis
- 設定修改linux主機名遇到的問題Linux
- 雙目測距與三維重建的OpenCV實現問題集錦(一)影象獲取與單目定標OpenCV
- 面試中遇到的問題面試
- 資料標準化遇到的問題
- javaweb中自己遇到的問題JavaWeb
- laravel使用中遇到的問題Laravel
- Hodoop配置中遇到的問題OdooOOP
- 工作中遇到的問題
- hp-ux 雙機互備安裝oracle遇到的幾點問題UXOracle
- html中的table標籤設定寬(width)高(height)屬性時遇到的小問題HTML
- 求職遇到的面試題目求職面試題
- hp-ux 雙機互備安裝oracle遇到的幾點問題(二)UXOracle
- 高速攝影機輔助的相機方位線上標定
- kafka 運維中遇到的問題Kafka運維
- weex學習中遇到的問題
- hive學習中遇到的問題Hive
- 【面試】工作中遇到的難點及解決方案——人臉解鎖相機衝突問題面試
- 面試中網路相關題目面試
- 【專案中遇到的zookeeper的問題】
- 學習中遇到的javabean中的scope問題JavaBean
- 相機的那些事兒-概念、模型及標定模型
- 如何有效設定OKR中目標? - RedditOKR
- 關於工作中遇到的問題
- loadrunner學習中遇到的問題
- 實際專案中遇到的問題
- 橫趟!面試中遇到的 ZooKeeper 問題面試
- @UpdateProvider註解中遇到的問題IDE
- 安裝 Laravel Mix 中遇到的問題Laravel
- Vue使用中遇到的程式碼問題Vue
- Linux ~ CentOS使用中遇到的問題LinuxCentOS
- MERGE開發中遇到的問題
- 面試中遇到的一些問題面試
- CKEditor使用中遇到的問題解決
- Fragstas軟體使用中遇到的問題