瘋殼AI開源無人機串列埠(視覺資料獲取)

2021-10-06 04:39:21 字數 2277 閱讀 6401

openmv是乙個開源、低成本、功能強大的機器視覺模組。以stm32f767為核心,整合了ov7725攝像頭晶元,在小巧的硬體模組上,用c語言高效地實現了核心機器視覺演算法,提供python程式設計介面。開發者、電子發燒友以及智慧型裝置開發商都可以用python語言使用openmv提供的機器視覺功能,為自己的產品和發明增加有特色的競爭力。

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

cocofly上的無人機視覺模組採用的就是openmv,其實物圖如下圖所示。

其中openmv的python**已經寫好提供給使用者,如果使用者需要修改的話,也可以修改使用,目前openmv串列埠發出的視覺資料的協議框架如下表所示。

幀頭(2 bytes)

功能字(1byte)

長度(1byte)

資料(nbytes)

和校驗(1byte)

0xaa  0xaa

0***

0***

0***...

0***

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

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

幀頭(2 bytes)

功能字(1byte)

長度(1byte)

mode(1byte)

和校驗(1byte)

0xaa  0xaf

0xf1

0***

0***...

0***

其中幀頭是固定為兩個位元組: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,**如下:

然後在把usb轉串模組插到電腦的usb口,開啟電腦端的串列埠除錯助手,找到對應的com口(前提是安裝了usb轉串列埠驅動),設定波特率為115200,開啟,可以看到串列埠在不斷列印視覺模組傳送的資料,如下圖所示。

瘋殼AI開源無人機串列埠(基礎收發)

在嵌入式開發領域講的串列埠通常指的是uart,uart即為通用非同步收發傳輸器 universal asynchronous receiver transmitter 是一種通用序列資料匯流排,用於非同步通訊。該匯流排雙向通訊,可以實現全雙工傳輸和接收。uart常常用於兩個微控制器之間進行資料傳輸,...

瘋殼AI開源無人機PID基礎

pid控制是自動控制系統中最常用的一種控制手段,它的誕生主要是為了解決自動控制系統的快 穩 準的問題。pid控制中的p指的是proportion 比例 即對輸入的偏差乘以乙個係數 i指的是integral 積分 即對輸入偏差進行積分運算 而d指的是derivative 微分 即對輸入偏差進行微分運算...

瘋殼AI開源無人機PWM(電機控制)

脈衝寬度調製 pwm 是英文 pulse width modulation 的縮寫,簡稱脈寬調變,是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術,廣泛應用在從測量 通訊到功率控制與變換的許多領域中。pwm在生活中非常的常見,小到呼吸燈的閃爍,達到航天飛船都會應用到pwm技術。pwm...