- OPENMV 模組簡介
OPENMV是一個開源、低成本、功能強大的機器視覺子產品。以STM32F767為核心,內建了OV7725攝像頭晶片,在小巧的硬體子產品上,用C語言高效地實作了核心機器視覺算法,提供Python程式設計接口。開發者、電子發燒友以及智能裝置開發商都可以用Python語言使用OPENMV提供的機器視覺功能,為自己的産品和發明增加有特色的競争力。
OPENMV上的機器視覺算法包括尋找色塊、眼球跟蹤、邊緣檢測、标志跟蹤等。可以用來實作非法入侵檢測、産品的殘次品篩選、跟蹤固定的标記物等。使用者僅需要寫一些簡單的Python代碼,即可輕松的完成各種機器視覺相關的任務。小巧的設計,使得OPENMV可以用到很多創意的産品上。比如,可以給機器人提供周邊環境感覺能力;給智能車增加視覺巡線功能;甚至,可以給工廠産品線增加殘次品篩選功能等。
COCOFLY上的無人機視覺模組采用的就是OPENMV,其實物圖如下圖所示。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2csYjTYplck1mYsplMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmLxQzM1IzMxcTM1ETNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
其中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初始化代碼如下:
這裡注意要把序列槽的發送也配置好,這樣才能把資料發送到電腦。
序列槽1接收到視覺模組的資料就轉發到序列槽2,序列槽1的中斷函數代碼如下。
設定序列槽1的波特率為1115200,序列槽2的波特率也設定為115200,代碼如下:
儲存、編譯、下載下傳代碼,確定序列槽1接上了視覺模組,然後再把序列槽2接上USB轉序列槽子產品,最後接到電腦的USB端口,如下圖所示:
然後在把USB轉串子產品插到電腦的USB口,打開電腦端的序列槽調試助手,找到對應的COM口(前提是安裝了USB轉序列槽驅動),設定波特率為115200,打開,可以看到序列槽在不斷列印視覺模組發送的資料,如下圖所示。