去年由奧比中光贊助的3D創(chuàng)新視覺賽落下帷幕,,留下了令人印象深刻地一些作品(慚愧,雖然我也參加了,,但是算法上面有些地方做地不好,,就沒有參與到后續(xù)地評獎中,希望今年獲獎,,哈哈哈哈哈),,另外今年也幸運的當(dāng)了社區(qū)的版主>.<,歡迎大家來投稿,!
不過我發(fā)現(xiàn)論壇在長久的運營過程中其實留下了很多資料,,但是缺乏系統(tǒng)的整理,所以我就準(zhǔn)備整理一份開源的立體視覺資料出來,,這里也希望大家給一些相關(guān)的建議,。 在正式整理之前,我發(fā)現(xiàn)兩屆比賽出現(xiàn)了不少有用的方案,,所以準(zhǔn)備做一個系列的方案解讀,。一方面是為了好的方案繼續(xù)發(fā)揮作用,二是為了他人的項目參考,。 已完結(jié)~ 那為什么會選定這樣一個方案來解讀呢,?以下給出一封感興趣的讀者發(fā)來的郵件: 關(guān)鍵信息打碼了 可以看出,這個項目是完整的,,以及有了實用性,,其次是老師想選用這個案例用于教學(xué)和指導(dǎo)學(xué)生實踐學(xué)習(xí)。 我的文章并不簡明,,內(nèi)部大量充斥著口語,,個人想法,其看起來更像是一份工作札記,,但是文風(fēng)這種東西改起來不是很容易,,希望讀者理解。 項目緣起: 大哥在展會上面看到了這個東西 運行起來的樣子 So~就自己做一個,! 功能目標(biāo):基于點云的軌跡引導(dǎo),,即無論待引導(dǎo)物體以何種位姿擺放(要求該位姿在機械臂的行程范圍內(nèi)),視覺系統(tǒng)均能定位到該物體,,并引導(dǎo)機械臂按需要的軌跡實現(xiàn)一定的工藝流程,。 應(yīng)用場景:需要軌跡引導(dǎo)的工業(yè)現(xiàn)場。 其實有人會問,,那這個東西傳統(tǒng)的二維視覺做不了嗎,?事實上是可以,但是它不太能滿足自由度多時機器人的引導(dǎo),,而加入了Depth會增加這種精度,。 demo的樣子,kuka機器手臂一直在沿著鞋底的邊緣劃線 系統(tǒng)的硬件為相機,,處理,,執(zhí)行器 安裝的位置如圖所示,右側(cè)的相機對工作平面進行解算,,求出解算邊緣,,而后給機械臂(這部分作者沒有寫,而且將處理數(shù)據(jù)輸入給機械臂的示教器) 奧比中光的Zora P1開發(fā)板:板子上跑的是armbian操作系統(tǒng),,部署的是點云采集和點云匹配程序,,點云采集采用C++編寫,基于奧比中光官方提供的OpenNI2 SDK,。
這里是P1開發(fā)板的圖床位置,,可以看到是阿里云的OBS,不知道買的啥套餐 板子一角 還是很豐富的接口 板子上面使用的armbian,就是基于Debiana適配的ARM開發(fā)板~ 什么是Armbian,?
其實就是一套完整的Linux系統(tǒng),但是工具鏈齊全~文檔豐富 有著完整的文檔 就是使用的這個相機 然后就是精度真的困難是不夠用 在P1上面使用的是Armbian的系統(tǒng),,論壇里面有詳細(xì)的這個安裝的教程,,我這里也沒有機器,我就不去做了,,不過我覺得是jetson或者是樹莓派都可以去部署,。 現(xiàn)在應(yīng)該寫標(biāo)定的東西,但是寫采集的也OK,,為了流程一致,,寫標(biāo)定。 相機標(biāo)定是視覺系統(tǒng)的基礎(chǔ),,工業(yè)級的相機標(biāo)定需要碳纖維(或者玻璃等)的工業(yè)級標(biāo)定板,,保證平整度和角點精度。同時需要遮住激光器,,并使用紅外光源,,使得紅外相機能采集到清晰的標(biāo)定板圖像。 但是,,普通開發(fā)者通常不具備上述條件,,面臨的情況常常是沒有標(biāo)定板和紅外光源。為此,,項目使用自制標(biāo)定板,,即通過代碼生成高分辨率的棋盤格圖像,并用打印機將其打印出來,,貼在平板上,。但是由于沒有紅外光源,紅外相機只能借助帶激光散斑的激光器的光源來拍攝標(biāo)定板圖像,,帶來的問題是部分角點檢測的誤差較大,。為了解決這個問題,項目采用先執(zhí)行一次相機標(biāo)定,,保留重投影誤差小的70%的點,,再執(zhí)行一次相機標(biāo)定。這么做可以明顯降低重投影誤差,、提高精度,,使用此方法標(biāo)定出的相機內(nèi)外參通過深度圖和彩色圖的對齊來驗證,確實取得了良好的效果。 為什么這個標(biāo)定過程要做這么多的工作,?其實我們要知道一點,,我們的計算理論都是完美無瑕的,光線很直,,鏡頭沒有各種光學(xué)誤差,,CCD和鏡頭的裝配也是沒有誤差,。 但事實上,,一切都“比較糟糕”,所以相機的設(shè)計處處都是對現(xiàn)實的妥協(xié),,幸好,,我們可以將這些誤差算出來,做計算方法上面的補償,。 現(xiàn)在用的比較多的是張正友博士的棋盤格標(biāo)定法(hhhh,,大佬也姓張) 也叫標(biāo)定板 好,我們自己寫程序?qū)崿F(xiàn)這個標(biāo)定板的生成,。 這里準(zhǔn)備了C++和Python的版本 原版是C++的,,但是改寫成Python的。 首先引入庫,,注意OpenCV的安裝,。后面三個參數(shù)是單個標(biāo)定快的大小以及標(biāo)定塊的數(shù)量。 板子單位格子的高和寬 參數(shù)計算,,不符合就報錯 我們的圖像應(yīng)該有一個容器來放它們:
搞個容器,,初始化一下。后面參數(shù)Scalar 是個short型vector,。指定這個能夠使用指定的定制化值來初始化矩陣,。
這是這個函數(shù)的簽名。 這是核心部分(嚇?biāo)牢?,都不敢說是算法),。 這個填充是一開始都是黑色的,一個黑色的頁面,,縱向的逐像素的掃描,。 像素點的操作。 顯示+保存,,CPP看累了嗎,?可以看看Python~ SCALE是縮放的系數(shù),可以控制大小,,都使用元組防止篡改,。 邏輯和CPP的一樣,這一段 生成一張全白的照片,我上面寫錯了 兩個步驟,,先掃描紙面,,然后按照邏輯填充黑點。 完事~
設(shè)置參數(shù),,直接運行,。
原作者鏈接
標(biāo)定算法
論壇的位置
可能出于一些別的保護原因,這個方案的源碼和相關(guān)資料沒有全部在Github上面上傳,,不過學(xué)習(xí)起來還是綽綽有余,,如果有其它疑問,可以聯(lián)系小助手獲取,。
Armbian文檔位置
OpenCV Doc hhhh,,春天來了 |
|