光流模塊在無 GPS 環境下,課實時檢測飛機水平移動距離,實現對四軸無人機長時間的穩定懸停。圖1顯示的是湖南優象LC-302光流模塊的功能框圖,光流攝像頭拍攝無人機垂直向下的畫面,輸入光流主板,主板通過光流懸停智能算法進行光流計算,從而獲取無人機位移信息,并轉化為懸停控制指令,懸停控制指令通過 UART 輸出給飛控,以便控制飛機水平移動距離,達到懸停的目的。
圖 1 UPIXELS LC-302光流模塊功能框圖
LC-302外形尺寸結構圖
LC-302的硬件部分主要為主板。如圖2所示,主板尺寸結構示意圖,尺寸分別為:長22mm、寬14mm。主板上主要的芯片為湖南優象公司研發的光流芯片U30。除了LC-302這款型號外,還有LC-306、LC-307和LC-309,其中LC-309尺寸最小,含U30、CMOS感光芯片和鏡頭一起,總共也只有10mm*10mm大小。
LC-302使用的是30萬像素的CMOS作為感光器件,所有的配置使用U30芯片的默認配置,所以,模塊一上電就可輸出光流數據,不需要額外其他配置。
圖 2 UP-FLOW-LC-302-3C產品結構圖
LC-302接入飛控的方法/光流坐標系定義
光流模塊可以用UART接口連接飛控,UART數據格式為1個起始位,8個數據位,1個停止位,無校驗位,波特率為19200。光流模塊和飛控的接口線序如圖3,其中UART_TXD,UART_RXD是以模塊為參考, VCC為3.0V—5.0V供電電源輸入。3.0V供電時最大功耗為90mW,5.0V供電時最大功耗150mW。
光流模塊接線說明:光流和飛控的 RX TX交叉連接,GND和VCC對應連接即可。
光流的坐標系如圖4所示,最終飛控獲取數據,需根據飛控坐標系及光流的坐標系,做坐標轉換。
圖 3 光流模塊坐標系/接線方式
光流模塊初始化
光流模塊上電后需由上位機通過UART接口初始化才能正常工作,光流模塊上電到上位機初始化之間需至少延時100ms。
LC-302光流模塊對外輸出數據結構定義
光流模塊對外輸出的數據結構定義如下:
typedef struct optical_flow_data
{
int16_t flow_x_integral; // X像素點累計時間內的累加位移(radians*10000)
// [除以10000乘以高度(mm)后為實際位移(mm)]
int16_t flow_y_integral; // Y像素點累計時間內的累加位移(radians*10000)
// [除以10000乘以高度(mm)后為實際位移(mm)]
uint16_t integration_timespan; // 上一次發送光流數據到本次發送的累計時間(us)
uint16_t ground_distance; // 預留。默認為999(0x03E7)
uint8_t valid; // 狀態值:0(0x00)為光流數據不可用
//245(0xF5)為光流數據可用
uint8_t version; //版本號
} Upixels_OpticalFlow;
通過串口向飛控發送數據前,光流模塊會對數據結構進行封包,實際發送的數據包格式如圖6:
序號 |
|
包數據 |
內容說明 |
1 |
包 頭 | 0xFE | 數據包的開始標識(固定值0xFE) |
2 |
0x0A | 光流數據結構體字節數(固定值0x0A) | |
3 |
光 |
flow_x_integral的低字節 |
X像素點累計時間內的累加位移,
(radians*10000) |
4 |
flow_x_integral的高字節 | ||
5 |
flow_y_integral的低字節 |
Y像素點累計時間內的累加位移,(radians*10000) [除以10000乘以高度(mm)后為實際位移(mm)] |
|
6 |
flow_y_integral的高字節 | ||
7 |
integration_timespan的低字節 | 上一次發送光流數據到本次發送光流數據的累計時間(us) | |
8 |
integration_timespan的高字節 | ||
9 |
ground_distance的低字節 | 預留。默認為999(0x03E7) | |
10 |
ground_distance的高字節 | ||
11 |
valid | 狀態值:0(0x00)為光流數據不可用,245(0xF5)為光流數據可用 | |
12 |
version | 光流模塊的版本號 | |
13 |
校驗值 |
Xor | 光流數據結構體(Byte 3~Byte 12)10個字節的異或值 |
14 |
包 尾 |
0x55 | 數據包的結束標識(固定值0x55) |
圖 6 數據包協議圖
光流調試注意事項
1.安裝前注意鏡頭清理,確保鏡頭無污垢和保護膜遮擋。
2.安裝時注意,光流板與地面水平,并與機體(飛控板)垂直,不能有偏角,固定后確保鏡頭無遮擋,比如連接線與起落架等。
3.若要考慮與加速度計融合,則需確保光流與加速度計物理方向的一致性。
3.當姿態變化較劇烈時應減少光流的比重,并用陀螺儀做好對光流的補償,并注意光流與陀螺儀同步問題。
4.光流輸出有少許毛刺,需要對數據進行低通慮波
5.PID控制上采用位置+速度的雙環控制,并要加大i的作用。
6.在自主懸停時才啟動光流,飛機起飛與打搖桿時,光流無效。
LC-302懸停問題速查小技巧
自主懸停是光流模塊支持飛控實現的一種典型功能。也是調試光流需要首先調試的功能,懸停的質量往往直接決定光流與飛控配合質量。調試懸停問題時有如下小技巧。
7.1 完全沒有懸停效果,現象與沒接光流是一樣的。首先應檢查板子上電是否正常,硬件線是否連接好,鏡頭是否被遮擋,如果都沒發現問題,再用上位機檢查是否有數據輸出。
7.2 飛機往某個方向亂飛,漂移更快,像失控的感覺,而沒有加光流時反而漂移慢一些。可能是:
7.2.1 鏡頭安裝方向與程序里寫的方向不一致;
7.2.2 環境光線明暗變化比較大,比如有閃光燈;
7.2.3 光流鏡頭下地面上有大片的運動物體,比如在有風時的水面上;
7.2.4 程序中光流控制部分有些數據沒清零,比如起飛時與打搖桿后積分量沒清零;
7.3 飛機緩慢飄,方向隨機,但又比沒光流時要好,表現為無操作時,往一個方向飄后,還會往回飄。可能是地面環境紋理太差,比如純凈的木地板、水泥地面、反光大理石地面等,或者是環境光線太暗。
7.4 飛機開始時能夠正常懸停,懸停一段時間后開始震蕩,可能是:
7.4.1 氣壓計數據漂移很大,高度嚴重失真,導致光流數據與該高度相乘后輸出值變大,控制超調;
7.4.2 光流與加速度計有融合,可能是溫度變化比較大或飛機震動大,導致加速度計漂移嚴重;
7.5 飛機開始時能夠正常懸停,懸停一段時間后開始一直往一個方向漂移,可能是:
7.5.1 程序算法處理上光流的權重是動態的,某些原因導致懸停時間長后,光流權重減弱,無法抑制漂移;
7.5.2 姿態解算的歐拉角由于震動或溫度等出現較大誤差,時間久后飛機本身姿態傾斜,光流最大輸出后也補償不了該誤差;
7.6 飛機一開始就開始震蕩,可能是:
7.6.1 PID控制參數太大了;
7.6.2 濾波比較厲害,使得輸出數據有延時,造成低頻震蕩;
7.6.3 輸入數據不平滑,PID控制中又有D項,使得飛機高頻震蕩;
7.6.4飛機的性能變差,比如電機、槳葉磨損,震動大,使得輸入數據噪聲變大;
7.6.5光流旋轉補償沒有做好,尤其是數據同步與限幅。
優象科技淘寶店鋪鏈接:
https://shop215642435.taobao.com/?spm=pc_detail.27183998.202202.2.688c7dd6HXahpX#/
-
gps
+關注
關注
22文章
2895瀏覽量
166235 -
uart
+關注
關注
22文章
1235瀏覽量
101395 -
無人機
+關注
關注
230文章
10437瀏覽量
180435
發布評論請先 登錄
相關推薦
評論