天天看點

瘋殼AI開源無人機序列槽(視覺資料擷取)

  • OPENMV 模組簡介

OPENMV是一個開源、低成本、功能強大的機器視覺子產品。以STM32F767為核心,內建了OV7725攝像頭晶片,在小巧的硬體子產品上,用C語言高效地實作了核心機器視覺算法,提供Python程式設計接口。開發者、電子發燒友以及智能裝置開發商都可以用Python語言使用OPENMV提供的機器視覺功能,為自己的産品和發明增加有特色的競争力。

OPENMV上的機器視覺算法包括尋找色塊、眼球跟蹤、邊緣檢測、标志跟蹤等。可以用來實作非法入侵檢測、産品的殘次品篩選、跟蹤固定的标記物等。使用者僅需要寫一些簡單的Python代碼,即可輕松的完成各種機器視覺相關的任務。小巧的設計,使得OPENMV可以用到很多創意的産品上。比如,可以給機器人提供周邊環境感覺能力;給智能車增加視覺巡線功能;甚至,可以給工廠産品線增加殘次品篩選功能等。

COCOFLY上的無人機視覺模組采用的就是OPENMV,其實物圖如下圖所示。

瘋殼AI開源無人機序列槽(視覺資料擷取)

其中OPENMV的Python代碼已經寫好提供給使用者,如果使用者需要修改的話,也可以修改使用,目前OPENMV序列槽發出的視覺資料的協定架構如下表所示。

幀頭(2 Bytes) 功能字(1Byte) 長度(1Byte) 資料(nBytes) 和校驗(1Byte)
0xAA  0xAA 0xXX 0xXX 0xXX... 0xXX

其中幀頭是固定為兩個位元組:0xAA、0xAA;功能字為一個位元組;長度為資料的長度,也為一個位元組;資料位n個位元組;和校驗為一個位元組,即幀頭開始相加到最後一個位元組,保留低8位。

視覺模組的接收資料,即模式設定的協定架構如下表所示。

幀頭(2 Bytes) 功能字(1Byte) 長度(1Byte) Mode(1Byte) 和校驗(1Byte)
0xAA  0xAF 0xF1 0xXX 0xXX... 0xXX

其中幀頭是固定為兩個位元組:0xAA、0xAF;功能字為0xF1;長度為資料的長度,也為一個位元組;Mode,即OPENMV的模式設定,為1個位元組;和校驗為一個位元組,即幀頭開始相加到最後一個位元組,保留低8位。

該資料的協定使用者均可自定義,詳情可以看配套的OPENMV的Python源碼,OPENMV的具體使用方式可以檢視OPENMV官網。

二、序列槽視覺資料擷取實驗

序列槽視覺資料擷取實驗使用STM32的序列槽1即UART1與視覺模組相連,序列槽2即UART2,通過USB轉序列槽子產品連接配接電腦,把序列槽1擷取到的視覺資料通過序列槽2傳輸到電腦端的序列槽調試助手顯示出來。做該實驗的時候需要把視覺模組接到USART1,把光流模組暫時取下,并且把USB轉序列槽的線接到光流接口處。

序列槽1和序列槽2的配置可以參考《序列槽(基礎收發)》和《序列槽(光流資料擷取)》兩節,配置代碼(通過調用官方庫)。

代碼編寫的思路如下表所示:

代碼思路

1 管腳配置

1、定義結構體;

2、使能時鐘;

3、填充結構體;

4、裝載結構體。

2 序列槽配置

1、定義結構體;

2、使能時鐘;

3、填充結構體;

4、裝載結構體;

5、開啟中斷;

6、使能序列槽。

3 中斷優先級管理

1、定義結構體;

2、填充結構體;

3、裝載結構體。

4 邏輯處理 1、等待接收以及發送資料。

序列槽2初始化代碼如下:

瘋殼AI開源無人機序列槽(視覺資料擷取)

這裡注意要把序列槽的發送也配置好,這樣才能把資料發送到電腦。

序列槽1接收到視覺模組的資料就轉發到序列槽2,序列槽1的中斷函數代碼如下。

瘋殼AI開源無人機序列槽(視覺資料擷取)

設定序列槽1的波特率為1115200,序列槽2的波特率也設定為115200,代碼如下:

瘋殼AI開源無人機序列槽(視覺資料擷取)

儲存、編譯、下載下傳代碼,確定序列槽1接上了視覺模組,然後再把序列槽2接上USB轉序列槽子產品,最後接到電腦的USB端口,如下圖所示:

瘋殼AI開源無人機序列槽(視覺資料擷取)

然後在把USB轉串子產品插到電腦的USB口,打開電腦端的序列槽調試助手,找到對應的COM口(前提是安裝了USB轉序列槽驅動),設定波特率為115200,打開,可以看到序列槽在不斷列印視覺模組發送的資料,如下圖所示。

瘋殼AI開源無人機序列槽(視覺資料擷取)