介紹一下這個項目的基本情況,這個項目是關于電力高架線巡檢的,主要任務就是負責巡檢和除冰,巡檢的主要內容就是看看線路的情況,有沒有比較基本的故障,比如接地短路,斷線故障,或者是一些個雜物等等,有了雜物之后通過機械臂進行清楚或一些其他處理,同時需要對線網的外觀進行一些檢測,看看有沒有一些特別明顯的熔斷或者破損情況,由于這個機器人是在線上行進的,所以對比傳統(tǒng)的線下人工巡檢,從細節(jié)上講,機器人的攝像頭應該能更好的更清楚的發(fā)現一些問題,除了這兩種功能以外,我還打算用Vision Board嘗試一下用它檢測線路上的結冰圖像,主要用的就是tflite,和openmv的開發(fā)方式,基于RT-Thread為底層的micropython固件,由于項目本身的原因,對于Vision Board的使用主要集中在應用開發(fā)方面,包括線路識別,線路細節(jié)識別,雜物識別,結冰情況識別以及一些通信外設的使用,還有就是關于板子上自帶的WiFi模塊的圖傳功能,這也是項目本身需要的。

線路識別的基礎就是看攝像頭能不能識別出來高架線,對于直接架在線路上的機器人來說,攝像頭所捕捉到的線路還是比較大的,所以Vision Board的板載攝像頭應該是夠的,為了簡單起見,我先使用了openMV的程序,里面有比較方便的線路識別程序。
經過幾次嘗試,我感覺這個程序還是比較符合我的預期。


線段的起始位置點坐標,在實際運行的時候,其實并不需要這些坐標,因此要把代碼中的打印刪除,只需要保留一個判斷存在不為空的語句就可以了。
這個功能最主要的目的是用來判斷線路的斷線或者短路情況,有時直接看照片會比較模糊,如果加上這樣的線標在圖片上,有助于觀察線路的情況,比如出了斷線或者短路接地等縱向或者橫向故障,標出來就更一目了然了。

經過調試,發(fā)現識別線路在0.5mm左右感覺識別的效果最好

對于整體是有很多線段那種情況,我感覺實際應用工程中,如果講攝像頭云臺調轉到比較近的地方,基本上不需要識別出那么多的線段,最多也就兩三條,如果是多分裂導線那么也就四五條的樣子,Vision Board 的openmv固件幾乎支持所有的基本識別函數,我用了另一個識別“線”的文件或者是函數,但是發(fā)現他是用來尋找直線的,而且必須最好是那種貫穿的直線,所以對于本項目那種需要識別出線段的情況其實不是很合適,一方面場景不對,另一方面用處不太合適,但是并不是是說這個板子識別的慢,我針對這個函數特意檢測了一個電腦屏幕那樣的,發(fā)現速度還是非常可觀的,足以證明只要用好這個板子,可以勝任很多工作。
還有一個主要的功能是結冰識別和雜物識別,由于Vision Board 能使用Tflite這樣的工具,我嘗試能不能把他們放在一起進行識別,感覺這樣是對芯片能力的一種考驗吧。電力巡檢常見的兩種雜物,容易掛在線路上的,主要是塑料袋和鳥巢,因為數據集比較特殊,沒有什么現成的數據集可以用,所以從百度上找了一些,看了幾千張圖片,發(fā)現符合我要求的并不多,感覺更對算法和芯片的能力提出了要求,因為之前我用k210弄的數字識別,相當不理想,這回看看瑞薩的怎么樣(他甚至沒有什么專門的神經網絡硬件加速單元)
先放上點數據集的圖,轉換的時候有水印,但是最后發(fā)現一點也不影響。

用的是這個網站,感覺比k210的要好的多,不用排隊,功能也強很多。
直接搜完注冊就能用,沒有什么門檻,也不收費,就是界面全是英文的,我當時是看的嗶站上的這個up主的視頻,我覺得非常好。
直接跟著操作就可以了,簡直可以稱得上是保姆級教程,有一點要提的是,圖片的擴展名需要是一樣的,我圖方便就用的那種在軟件商店里面下載的格式轉換器,雖然有一點水印,但是最后的結果感覺幾乎沒有什么影響。
以下是我訓練的一些配置:

這個部分在原來的視頻當中沒有出現,因為他視頻里面選的是H7內核的那個,現在更新上來了,網站里已經有了配置,我是這么填的,感覺沒出現什么錯誤,其他的都很正常。

之后是測試結果
可以看到它在檢測鳥巢的時候準確率還是很好的,整體是在80-90%左右,刷新的很快,截圖的時候就恰好是這個準確度,反正k210是達不到這個效果。
這是在識別結冰線路的時候的數據,準確度還是可以的。
由于我想收集和訓練的數據其實是那種掛在高架線上的垃圾袋,為啥電力巡檢有的時候要看這個,是因為有的時候,塑料袋加上雨天,可能會導致絕緣子閃絡甚至擊穿,或者是那種非永久性的短路,比如一重合閘就又好了,但是這些雖然聽起來離譜,但是實際上確實要處理的,否則繼保一跳閘,還是得去清理。找遍了網上發(fā)現復合要求的感覺不多,陸續(xù)在幾個網站上看了幾千張,幾乎很少有那種“標準數據集”,只好用這些“飛舞的垃圾袋”代替,準確率也是很高的。
在識別到結冰圖像的時候,我在Vision Board設置了一個引腳用來和電機控制板通信,之前想用串口來著,但是感覺一是不需要那么復雜的邏輯,還有就是要考慮到在高壓電場和電暈放電下的對通信線路的干擾肯定會不小,所以定義了一個引腳,檢測到結冰圖片的時候,低電平,未檢測到的時候就是默認高電平,這樣抗干擾會好一些。
下面是識別的完整代碼
# Edge Impulse - OpenMV Image Classification Exampleimport sensor, image, time, os, tf, uos, gcfrom pyb import Pinsensor.reset() # Reset and initialize the sensor.sensor.set_pixformat(sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE)sensor.set_framesize(sensor.QVGA) # Set frame size to QVGA (320x240)sensor.set_windowing((240, 240)) # Set 240x240 window.sensor.skip_frames(time=2000) # Let the camera adjust.#定義標志位引腳p_out = Pin(("GPIO_25",508), Pin.OUT_PP)net = Nonelabels = Nonetry: # load the model, alloc the model file on the heap if we have at least 64K free after loading net = tf.load("trained.tflite", load_to_fb=uos.stat('trained.tflite')[6] > (gc.mem_free() - (64*1024)))except Exception as e: print(e) raise Exception('Failed to load "trained.tflite", did you copy the .tflite and labels.txt file onto the mass-storage device? (' + str(e) + ')')try: labels = [line.rstrip('\n') for line in open("labels.txt")]except Exception as e: raise Exception('Failed to load "labels.txt", did you copy the .tflite and labels.txt file onto the mass-storage device? (' + str(e) + ')')clock = time.clock()while(True): clock.tick() img = sensor.snapshot() # default settings just do one detection... change them to search the image... for obj in net.classify(img, min_scale=1.0, scale_mul=0.8, x_overlap=0.5, y_overlap=0.5): print("**********\nPredictions at [x=%d,y=%d,w=%d,h=%d]" % obj.rect()) img.draw_rectangle(obj.rect()) # This combines the labels and confidence values into a list of tuples predictions_list = list(zip(labels, obj.output())) for i in range(len(predictions_list)): print("%s = %f" % (predictions_list[i][0], predictions_list[i][1])) if predictions_list[2][1] >= 0.9: p_out.value(0) else: p_out.value(1)#print(clock.fps(), "fps")————————————————版權聲明:本文為RT-Thread論壇用戶「單片機單片魂」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權協(xié)議,轉載請附上原文出處鏈接及本聲明。原文鏈接:https://club.rt-thread.org/ask/article/d32afe940776f36e.html
最后要提一點的是,這個Vision Board的micro python庫是基于RT-Thread的mpy固件,其中一些外設是做了適配的,這需要去看原來編譯固件的時候的c的代碼,其中一些細節(jié),比如GPIO的名稱,里面會有。
最后完成的整體圖:
-
Boards
+關注
關注
0文章
4瀏覽量
10280 -
Vision
+關注
關注
1文章
201瀏覽量
18679 -
除冰機器人
+關注
關注
0文章
2瀏覽量
1630
發(fā)布評論請先 登錄
【TL6748 DSP申請】變電站巡檢機器人
【testo 紅外熱像儀申請】變電站巡檢機器人
激光導航AGV底盤定制 巡檢機器人,服務機器人,智慧物流搬運AGV
【NanoPi NEO Plus2開發(fā)板試用申請】巡檢機器人項目
水下機器人制作需要實現哪些功能呢
智慧安防篇之:安防巡檢機器人
如何實現擁有強悍功能智能巡檢機器人
智能巡檢機器人的工作原理
巡檢機器人替代傳統(tǒng)人工巡檢,智能巡檢機器人5G工業(yè)路由器應用

巡檢機器人有哪些功能和作用?

巡檢機器人的分類和種類有哪些

評論