星期三, 6月 12, 2019

如何在ev3dev安裝webcam


一、準備硬體:

  1.  已安裝好的ev3dev主機
  2. 羅技c270webcam
  3. 可支援外接電源的usb hub


二、參考資料:

  1.   Adding a Webcam to EV3 (EV3DEV)
  2. mjpg-streamer GITHUB
  3. Secure Webcam streaming with MJPG-Streamer on a Raspberry Pi
  4. First-person view and remote control with LEGO Mindstorms EV3
  5. LEGO MovieMaker USB Camera with EV3 and ev3dev
  6. OpenCV Python + EV3DEV + Webcam 
三、安裝套件:
sudo apt-get update
sudo apt-get install libv4l-dev libjpeg62-turbo-dev subversion imagemagick

上述的libjpeg62-turbo-dev套件,原mjpg-streamer GITHUB作者是採用libjpeg8-dev
libjpeg62-turbo-dev及libjpeg8-dev只能擇一安裝
我是採用libjpeg62-turbo-dev

安裝cmake、gcc、g++
sudo apt-get install cmake gcc g++

mjpg-streamer簡單安裝法(參考:https://github.com/jacksonliam/mjpg-streamer
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd  ~/mjpg-streamer/mjpg-streamer-experimental
make
sudo make install


四、執行streamer
主程式為mjpg-streamer,安裝位置在/usr/local/bin/,程式資料夾位於/usr/local/lib/mjpg-streamer

程式執行的參數
mjpg_streamer -i "input_uvc.so --help"
input_uvc.so 主要定義輸入的影像解析度、畫質、每秒的frame數

mjpg_streamer -o "output_http.so --help"
output_http.so是定義mjpg-streamer 的www位置、port、是否要輸入密帳才能進入http等

sudo /usr/local/bin/mjpg_streamer -i "/usr/local/lib/mjpg-streamer/input_uvc.so -n -f 10 -r 1280x720" -o "/usr/local/lib/mjpg-streamer/output_http.so -p 8085 -w /usr/local/share/mjpg-streamer/www" 





打開瀏覽器連入http://ev3dev主機IP:8085,若順利應該可以看到webcam捉到的畫面


五、也可以使用VideoLAN以視訊串流方式播放
  1. 打開videolan->媒體->開始網路串流
  2. 將MJPG-Streamer 網頁中的VideoLAN內http://xxx.xxx.xxx.xxx:8085/?action=stream 複製,貼到網址列
  3. 若順利的話,應該就能捉到串流影像 



星期一, 6月 03, 2019

Lego EV3 Print Bot列印機器人(含EV3 Dev的安裝)

一、ev3改為Ev3dev環境(步驟參考:https://www.ev3dev.org/docs/getting-started/
  1. 參考https://www.ev3dev.org/docs/getting-started/
  2. 下載EV3dev image file
  3. 準備一張microSD卡(不要超過32GB)
  4. 下載Etcher ,並安裝以便於將下載的EV3dev image檔燒錄到microSD卡中
  5. 執行Etcher,選擇microSD卡的位置,以及image file,並開始執行image file燒錄動作
     

  6. 將燒錄好的microSD插入EV3主機,支援EV3的wi-fi dongle也一併接上EV3的USB port
  7. 將EV3主機開機,開機完成後會出現以下畫面,畫面右上角代表電池的電壓,若電壓值於8V~6.5V之間,代表電力正常,若電壓低於5V,主機將自動關機
  8. 選擇Wireless and Network,設定wi-fi連線(使用金鑰認證),若連線成功,ev3主機螢幕上方會出現正確的IP位置
  9. 打開Pietty利用SSH,遠端連線到EV3主機的IP,預設帳號robot,預設密碼maker
  10. 執行python --version,得知目前環境預設的python是2.7版,系統也支援python3.5。執行which python,得知python的執行路徑放在/usr/bin/python,ls -al /usr/bin/python 可得知是連結到python2.7 若要切換預設執行版本:
    sudo rm /usr/bin/python
    sudo ln -s /usr/bin/python3.5 /usr/bin/python
    切换到3.5版本的python了

    若要再改回來:

    sudo rm /usr/bin/python
    sudo ln -s /usr/bin/python2.7 /usr/bin/python
    切换到python版本2.7了
    進入python編輯畫面,要跳出時,按CTRL+D

    二、如何在EV3DEV執行簡單的程式直接操控EV3

    1. 發出聲音:
      $ beep # 440 Hz for 200 ms
      $ beep -f 200 -l 500 # 220 Hz for 500 ms
      $ beep -f 262 -l 180 -d 20 -r 2 \
      -n -f 392 -l 180 -d 20 -r 2 \
      -n -f 440 -l 180 -d 20 -r 2 \
      -n -f 392 -l 380 -d 20 \
      -n -f 349 -l 180 -d 20 -r 2 \
      -n -f 330 -l 180 -d 20 -r 2 \
      -n -f 294 -l 180 -d 20 -r 2 \
      -n -f 262 -l 400 # twinkle twinkle little star
    2. 讓ev3可以直接說話(將輸入的英文字句,以人聲講出來)
      $ espeak "hello, I am an EV3. I like to talk because I am a robot.“ 
      --stdout | aplay
      Playing WAVE 'stdin' : Signed 16 bit Little Endian, Rate 22050 Hz, Mono


    三、利用3D印表機,列印出可以plug在樂高積木橫桿上的筆套(Pen holder for EV3 Drawing robot

    四、組裝ev3 print bot
    1. 組裝步驟圖:下載處
    2. 組裝完後,將前端固定筆的裝置拆下
    3. 改成3DP列印的筆套
    4. 在windows下,執行pietty,以SSH連線到EV3
    5. 執行以下指令
      git clone https://github.com/cavenel/ev3-print3rbot.git
      cd ev3-print3rbot/
    6. 編輯writer.py,找到以下程式碼。wri.draw_image(image_file = 'images/test.svg')代表程式執行預設是畫出images/test.svg檔
      wri = Writer(calibrate = True)
      wri.draw_image(image_file = 'images/test.svg')

    7. 執行程式讓ev3printbot開始畫圖(列印)
      python3 writer.py

    8. 若要讓EV3畫出不同的圖,首先我們要利用inkscape畫圖,存檔成SVG檔,在windows 下利用inkscape命令列,轉換圖檔:
      "c:\Program Files\Inkscape\inkscape.exe" c:\image.svg --verb=EditSelectAll --verb=ObjectToPath --verb=SelectionUnGroup --verb=FileSave --verb=FileClose --verb=FileQuit
      參數意義:
      --verb=EditSelectAll (選擇全部)
      --verb=ObjectToPath (將物件轉成路徑)
      --verb=SelectionUnGroup (將物件解散群組)
      --verb=FileSave(覆寫存檔)
      --verb=FileClose(關閉)
       --verb=FileQuit(離開)
    9.  將轉換後的image.svg,利用winscp這種sftp軟體,將檔案上傳到EV3,並放在/home/robot/ev3-print3rbot/images
    10. 修改writer.py,將
      wri.draw_image(image_file = 'images/test.svg')
      改為
      wri.draw_image(image_file = 'images/image.svg')
    11. 執行writer.py
      python3 writer.py




    Reference:

    1. https://www.ev3dev.org/
    2. Ev3 print3rbot on Github
    3. Робот-художник EV3 Print3rbot