【一文帶你瞭解工業相機SDK中的一些知識】

市面上的工業相機,basler、海康、大華、映美精、灰點、dalsa等工業相機品牌,每一家的相機SDK都不一樣,但也有共同點,都使用標準協議開發,今天以海康的工業相機SDK為例,說明裡面到底是什麼。

目前機器視覺工業相機都是符合 自動化影像協會AIA(Automated Imaging Association) 圖像傳輸的標準,比如常用的GigE Vision 、USB3.0 Vision、CameraLink等常見的圖像傳輸標準都是AIA制定的,工業相機廠商如果不準守這些協議,那都不好意思拿出來了,肯定會被淘汰的。這些協議標準,規定了相機的圖像數據是怎麼樣傳輸到到應用程序端的,在這裡每個廠商就會開發相應的SDK進行圖像取流。

【一文帶你瞭解工業相機SDK中的一些知識】
【一文帶你瞭解工業相機SDK中的一些知識】

工業相機

我們先來認識相機,相機就是一塊集成了CCD/CMOS芯片的電路板子FPGA,我們把相機看成是一個設備Device,FPGA裡面運行了程序,FPGA工程師會寫一份xml描述文件,在xml文件中描述了比如相機的硬件信息、設備控制、採集控制、數字信號控制、傳輸數據控制等。

xml文件是FPGA工程師和SDK工程師的連接橋樑。

SDK端做了什麼?SDK端主要工作就是解析設備端xml描述文件,然後再通過AIA制定的標準協議發送數據了,比如在網口中,GigE Vision 是通過UDP發送圖像包的,UDP比TCP傳輸快幾倍,但UDP是面向無連接的,是不安全的,所以在協議中規定了重發包機制,當然實際的SDK會考慮更多的問題。

可以看到,每家廠商都是設備+SDK,真正厲害的是一個設備廠商的硬件能力,也就是FPGA的設計能力,同樣好的SDK也很重要,穩定、高效是一塊工業相機最基本的條件。

【一文帶你瞭解工業相機SDK中的一些知識】

相機設備端

【一文帶你瞭解工業相機SDK中的一些知識】

SDK端做的事

接下來我們看看相機的SDK方面的具體知識。

GenICam

GenICam為工業相機提供統一編程接口,GenICam具有多個模塊

【一文帶你瞭解工業相機SDK中的一些知識】

GenICam

在開發中,我們不需要理解這一層,這層是SDK做掉了,主要是解析設備端的XML,讀寫寄存器操作FPGA。

比如,我使用海康機器人的MVS看圖軟件,下圖右側中的各種節點是一個相機XML描述文件,這個XML描述文件是通過GenICam解析過來的,比如在界面操作設置曝光,可以通過萬能接口SetFloatValue(“Exposure”,100)來實現,SDK接收到這個值後通過XML中的寄存器操作FPGA,FPGA操作Sensor的這個過程。這界面的所有參數,是通過xml生成的界面

【一文帶你瞭解工業相機SDK中的一些知識】

MVS

我們的設置參數,比如曝光、增益、心跳時間都是走的控制通道,然後把數據傳輸給設備端。

數據傳輸

在這裡主要是指圖像數據的傳輸,比如GigE Vsion中走的是GVSP協議,SDK實現GVSP協議

比如我們軟觸發取流的這個流程是,SDK給FPGA命令,一旦有流了SDK接收到流數據,如果是回調方式,直接通過回調,如果是主動獲取,需要在線程中一直GetOneFrame來進行取流。

我們去看GenICam和GigE Vision、USB3.0 Vision等協議標準,這些協議光文檔就有幾千頁,不就是發個數據嗎,為嘛要搞那一堆交互,還要去理解幾千頁文檔,我可以告訴你,只要符合標準的,只要相機SDK廠商比較開放,那麼他的SDK都是可以進行取流的,就比如,海康工業相機SDK是可以進行市面上任何一家符合標準協議的相機的取流。

【一文帶你瞭解工業相機SDK中的一些知識】

basler相機通過海康SDK取流

可以看到,設備端符合標準,SDK端協議開發,那我就可以用你了,是不是方便了很多,但basler的SDK就沒有那麼開發了,只要自家的相機設備才能取流。

工業相機SDK取流流程

【一文帶你瞭解工業相機SDK中的一些知識】

取流流程圖

所有的工業相機取流的流程都可以歸納為上面的流程,枚舉相機、連接相機、設置取流方式、設置參數、開始取流、停止取流、關閉設備。理解了這個流程,任何一家的SDK都不是問題。

SDK接口

正常情況下,工業相機都會提供C++、C、C#等接口,在這裡,我傾向於使用C接口SDK,C接口的封裝C#可以使用,所有,不需要去理解C++裡面的一些其他的內容,比如你如果使用C++,有些相機為了做到兼容各種接口的,還有相機工廠類概念,所以,我個人更喜歡C接口方式。


分享到:


相關文章: