Search

顯示具有 Robot 標籤的文章。 顯示所有文章
顯示具有 Robot 標籤的文章。 顯示所有文章

2019年11月25日 星期一

ESP32-CAM MJPEG Stream Decoder and Control Library


  半年前在做自己的Computer Vision Board採買材料時,無意間知道ESP32-CAM這東西,買來放一段時間後,上週末有空拿出來測試這東西挺讓我驚艷,相見恨晚,主要是150NTD的價格加上已經有現成的Arduino相容範例,直接搞定SCCB設定跟DCMI Data還有一個4M PSRAM作為Frame Buffer,收到的MJPEG Stream在 UXGA 1600x1200解析度可以約10FPS每個JPEG 100Kb左右。
  就整體來說這東西在Wi-Fi環境感覺上非常具有淺力,一些多Camera Computer Vision的應用可以配合Raspberry Pi運算,或者簡單的Robot需要Computer Vision然後輔以別的控制器以UART通訊控制(GPIO扣掉SCCB+DCMI和SDIO只剩UART...)都是不錯的選擇。
  我把wxRovio的軟體改一改後主要是抽出C/C++ MJPEG Stream decode,還有示範POST參數給ESP32-CAM修改解析度,基本上相依OpenCV和libcurl,在Github有用OpenCV GUI和wxWidgets GUI的範例,後者順便放YOLO V3和OpenPose的DNN應用,Library在MAC和Win10+VS2017編譯x64版本都可以通過。




2019年1月13日 星期日

2013年3月12日 星期二

wxRovio ver.0.1.0 - WowWee Rovio

  過年後跟人拿了一隻WowWee Rovio玩玩,玩了兩個禮拜發現好像沒有錄影的軟體,所以只好自己寫一個用,在GitHub看到roviolib於是參考了之後跟他一樣用Libcurl送參數給Rovio的CGI,格式為:http://<username>:<password>@<ip>/<command>(括弧要去掉),如果使用的Command會使CGI回傳數據,則必須要寫Callback去處理他,靜態影像處理很簡單判斷JPEG格式而已,不過Video Stream搞不太懂他傳回來的是MJPEG但是處理起來很怪大小也不一,所以參考roviolib作者的Callback之後感覺是在10k~50k之間,然後啟用Video Stream時就會一直接收所以要開個Thread才不會讓Main Thread掛住,另外有個Debug功能可以開啟I2C的功能可以看我下面的參考聯結,最後我改寫的wxRovio目前沒有全功能只有我常用的,然後用wxWidget刻一個Demo用的GUI,有時間再增加功能或改改GUI。(PS:如果按鈕hold住就直接Reboot或者按Stop試試)

使用功能前記得先登入否則會Exception XD,錄影(Video Start)錄完記得停止(Video Stop),頭部的控制按鈕如果一直按著會用分段的方式升降,如果只按一下就會直接升降到定點。



開啟夜間模式會根據Framerate除以的數字決定亮度,換句話說越亮的話Framerate越少,而Auto Gain Control以為跟控制有關,不過其實功能類似於夜間模式,但不同的地方在於這個功能不會減少Framerate但是Noise會增加不少,而這兩個功能都是Debug.cgi裡面的。



wxRovio錄影(錄一小時約1.2GB)



=============2013/03/14===============

一樣的Code在Linux上編過沒問題,當然得要有wxWidgets & OpenCV & Libcurl。




如果還有改版就寫Makefile XD


g++ -o2 -o wxRovio './AddUserDialog.cpp' './App.cpp' './DeleteUserDialog.cpp' './LoggingDialog.cpp' './SetCameraDialog.cpp' './SetOtherDialog.cpp' './wxRovio.cpp' `wx-config --cxxflags --libs --unicode` `pkg-config opencv --cflags --libs` -lcurl





參考:

2012年7月25日 星期三

groboduino ver.1.1

    一般在製作機器人會用到多顆Servo即伺服馬達,而用MCU去控制多顆Servo時兩者會獨立供電,比如MCU吃一個電源然後N顆Servo也吃一個電源並且各自獨立,如果用Arduino的話因為不能直接把Servo插在Arduino上,所以還要用洞洞板另外製作一個擴充板有點佔空間,因此我畫了一個將兩者結合的groboduino ver.1.1,因為Arduino使用ATMega328或者相容的MCU都是用Arduino定義的Digital Pin去發送PWM控制Servo,所以這塊groboduino上的Digital Pin旁邊就是一個獨立的電源可以接上鎳氫電池,而Analog Pin旁邊的電源就是吃跟MCU的電源一樣的來源,而Digital Pin旁邊的電源也可以透過S2短路(看下面零件佈置圖)選擇跟Analog Pin旁邊的電源連接,不過要注意這時候不要接上電池否則可能會有燒毀的危險,而Bet那兩個孔(P1)就是給Battery即鎳氫電池吃的,然後中間上面那三個孔(P2)從零件佈置圖左到右分別是:接地(GND)、電源(給MCU的)、DTR(如果USB to TTL模組有這個腳位接上的話可以Auto Reset否則要手動),groboduino還有一個特點是他的大小跟四顆三號電池盒的大小差不多,所以安裝到機器人上時能夠層疊使重心好控制,不過因為ATMega328本身的限制所以建議最多控制12顆Servo(扣掉TxD、RxD拿來裝藍牙之類的遙控模組),可能製作12軸的六足或者四足也能製作人形機器人的雙腿XD,可能等我有時間製作下個版本用ATMega2560才能在控制更多Servo,最後製作時記得焊接要先將零件佈置圖上那兩條紅色的跳線先焊上。

Part List:
  1. IC1:ATMega328、168、8
  2. IC2:7805(線性穩壓)
  3. C1、C2:10uF/25v有極性電解電容
  4. C3:0.1uF陶瓷電容(104)(可有可無,如果你的USB to TTL模組有DTR腳位接上可以Auto Reset,否則要手動)
  5. C4、C5:22p陶瓷電容(22)
  6. R1:10k Ohm
  7. R2:220  Ohm
  8. TX1:16MHz石英振盪器
  9. L1、L2:5mm LED(L2可有可無,連接Digital Pin13是為了方便實驗)
  10. B1:2Pin 按鈕
  11. S1:2Pin 搖頭開關
  12. S2:2Pin 任意開關(可有可無用來連接Digital Pin旁與Analog Pin旁的電源)
  13. P1~P22:可以選擇用排母或者排針(P3~P16對應Arduino Digital 0~13,P17~P22對應Arduino Analog 0~5)



完成正面



完成反面



影片中的測試軟體可以參考「wxWidgets Connect Arduino(Linux)」,影片中的官方版本Arduino UNO暫時拿來當USB to TTL模組,因為我原本的獨立模組給人了XD




=============2012/07/26===============

原本是1.0版本沒想到隔天改一下到1.1XD,因為我發現給MCU吃的電源到12VDC(9VDC正常)時ATMega328會當機,原來我忘記Arduino官方版本是將R1那個電阻走過線性穩壓才連接到Reset Pin,所以我將R1位置稍微更換一下,另外有人對於電源有疑慮的話請看下圖,紅色線條的部份都是MCU用的電源+極,而黃色線條部份是給Servo用的即鎳氫電池電池盒的+極,然後綠色是接地要共接,如果S2接上時黃色就被紅色取代而且不要接電池,如果還有問題可以回報:)



=============2012/07/30===============

手邊有太多陶瓷振盪器所以畫了一個陶瓷振盪器版本取代原本的石英振盪器以及兩個起振的22PF陶瓷電容。

groboduino ver.1.2 Film

2011年8月8日 星期一

第一步



剛剛聚餐回來花了點時間把六足的控制系統還有步態完成了,目前使用WII雙節棍還有RF模組做無線遙控,可以前後左右移動,雖然移動很慢(馬達不夠力太快會垮掉),但我想未來只要用好一點的馬達絕對可以達到實用的程度,當初是打算花NTD:3000完成,但是因為像RF模組還有鎳氫電池買現成的都很貴所以有小超過,但仍然比一台八千起跳的便宜一半XD,最重要的還是連控制板到機構等等都自己DIY很有趣W算是做信心的以後要玩大的比較不怕失敗,當然按照慣例這篇也是開一個Robot的tag。

材料(NTD):
  1. SG90十八顆:1440
  2. 3M雙面膠:120
  3. 9V鹼性電池:106
  4. NexCell 1.2v/1600mAh鎳氫電池四顆:250
  5. TAMIYA改造膠版3MM一片:140
  6. RF收發模組:200
  7. WII雙節棍:500
  8. ATMega328四片:700
  9. 雜項:300
Total:3756(NTD)