FBTUG 子專案-Camera Commander
緣起
- FarmBot camera 這邊預期會有不少衍伸的應用與功能需求,看到 3dp Arduino 的部分經由標準的 command 介面,來切割各個子功能,於是想做一個標準的控制介面,讓 Camera 相關的應用能跟其他各式各樣的應用接合
介面
- 需訂立 介面規格,應該是 command based, 處理命令的輸入與 status report
- 至於 image, video 的介面,可以有基本的 file, streaming 功能,其他看應用需要在逐步增加。
- Command 介面預計可以接受 命令列,也可以接受 socket
命令定義
命令格式說明: 為跟 FarmBot 統一,用空白分隔。
為了能更加整合 FarmBot 原有 Arduino commands, 目前相容原有 Commands
意思是用原有的 FarmBot commands 會直接送到 Arduino 並取得結果回傳,當個 repeater 的概念。也因為如此,目前 G, F, R, E 開頭的命令都保留給 Arduino
*
命令細部說明與參考資料
N01-植栽覆蓋率
- https://github.com/ch-tseng/farmbot --> countPlantsArea.py
系統架構

使用 python, python-camera, opencv
Prototype
Features:
# 1. Support CLI
# 2. start/stop socket command interface
# 3. support socket input command and response
# 4. CLI and socket command can be support at the same time.
python camera_commander_prototype.py
----- FarmBot Camera Commander V0.0.4 -----
FCC>help
Documented commands (type help <topic>):
========================================
help net_open quit r83 stop
FCC>r83
V0.0.4
FCC>net_open
FCC>starting up on localhost port 10000
waiting for a connection...
connection from 127.0.0.1,58884
received:R83
demo code: echo data back to client
V0.0.4
stop
quitFCC>quit
--- 執行 client
python echo_client.py
connecting to localhost port 10000
sending "R83
"
received "V0.0.4
"
closing socket
-- 使用 netcat 來測試也可以
echo "R83" | nc localhost 10000
V0.0.4
周期執行系統設計
- 直接用 crontab 中指定週期與要執行的命令。
- camera commander 將支援 script process 的功能成某一個命令
- 所以在 crontab 中只需類似 echo "runscript watering.scr" | nc localhost 10000
test_serial.py
既然 FarmBot 的 Arduino 是 G-Code processor, 只需從 UART 餵給 Commands 就可以驅動
所以如果我們有一個程式能夠把編好的Commands檔案 讀進來,一個一個命令去執行,那好像就是簡單的自動化了
就是這個:test_serial.py
目前所有讀進來的命令,都直接往 Arduino 送,所以只支援 Arduino code 內支援的 command set, 也就是 FarmBot Arduino Commands
本程式有幾個簡單的驗證功能
- 驗證 serial 通訊是否正常( run_mode = RUNMODE_CHECKIF )
- 驗證 FarmBot 支援的每個命令是否工作正常 run_mode = RUNMODE_VERIFY_CMDS )
- 當 script 執行器使用 run_mode = RUNMODE_CMDSCRIPT )
test_serial_cmdgen.py
那如果再有一個程式,能夠產生走到每個植物上,然後澆水的命令檔,那好像就能自動澆水了
希望支援矩陣模式的種植安排,以及直接預設好位置的種植安排。
可產生到每個植物位置,然後執行幾個命令的 script 產生
video_count_sprout.py
要是有隻程式,分析記錄發芽縮圖軟體的影像,每個小時計算已發芽的總數,然後輸出分析結果。來畫出一個發芽總數的圖表。
'exe_cmd [ -h ] [ -v ] [ -d ] [ -t ] [-g]'
-v: video pathname
-d: output directory
-t: start time, ex: 20170507010203'
-g: frames gap time in seconds. default: 3600'
-r: reference frame. default: first frame'
1. Video 轉出 images - OK
2. 配上對的時間檔名 - OK
3. 每個檔案去跑一下 CH 的種子計算 - OK
程式需使用 CH 的 library 目前需要執行在這個目錄上,請手動配置
https://github.com/ch-tseng/farmbot
輸出範例:
- f1/image_20170504101133.jpg,0
- f1/image_20170504111133.jpg,0
- f1/image_20170504121133.jpg,3
- f1/image_20170504131133.jpg,2
- f1/image_20170504141133.jpg,4
- f1/image_20170504151133.jpg,0
- f1/image_20170504161133.jpg,0
- f1/image_20170504171133.jpg,0
- f1/image_20170504181133.jpg,0
- f1/image_20170504191133.jpg,0
- f1/image_20170504201133.jpg,0
- f1/image_20170504211133.jpg,0
- f1/image_20170504221133.jpg,0
- f1/image_20170504231133.jpg,0
- f1/image_20170505001133.jpg,0
- f1/image_20170505011133.jpg,0
- f1/image_20170505021133.jpg,0
- f1/image_20170505031133.jpg,0
- f1/image_20170505041133.jpg,0
- f1/image_20170505051133.jpg,0
- f1/image_20170505061133.jpg,13
- f1/image_20170505071133.jpg,96
- f1/image_20170505081133.jpg,111
- f1/image_20170505091133.jpg,80
- f1/image_20170505101133.jpg,79
- f1/image_20170505111133.jpg,86
- f1/image_20170505121133.jpg,92
- f1/image_20170505131133.jpg,105
- f1/image_20170505141133.jpg,112
遠端 SSH 連入,會有沒有 X 的問題,暫時用以下技巧躲過
在本地端使用 X Window 環境,在 Mac 上可以使用 XQuartx
在本地終端機
> xhost +
> ssh pi@[ip]
> export DISPLAY=:0.0
> python video_count_sprout.py
參考