星期三, 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

    星期一, 9月 03, 2018

    error mounting ntfs filesystem Windows is hibernated,refused to mount

    學校一台windows10電腦無法開機,將這台硬碟掛接在另一台電腦,使用windows開機要將原有檔案讀出來,但會有反應很慢,最後無法讀取的現象。後來掛接到linux電腦,出現了以下的錯誤訊息 Windows is hibernated,refused to mount.......The NTFS partition is in an unsafe state.Please resume and shutdown Windows fully(no hibernation of fast restarting),or mount the volume read-only with the 'ro' mount option.

    查了一下資料,先將有問題的partition做ntfs-3g -o ro

    cd /media
    sudo mkdir /media/105
    sudo mount -t ntfs-3g -o ro /dev/sda1 /media/105

    結果無法mount
    再來將partition進行修復ntfs 的動作
    sudo ntfsfix /dev/sd1

    好像也沒用
    最後,執行ntfs-3g 的remove_hiberfile動作(註:hiberfil.sys是Windows用來存放休眠時記憶體內容的檔案,通常會將之置於C:\hiberfil.sys)

    ntfs-3g has a funtion to remove hibermation
    remove_hiberfile
              Unlike  in  case  of  read-only  mount,  the read-write mount is
              denied if the NTFS volume is hibernated.  One  needs  either  to
              resume  Windows  and  shutdown  it  properly, or use this option
              which will remove the Windows  hibernation  file.  Please  note,
              this  means  that  the  saved Windows session will be completely
              lost. Use this option under your own responsibility.
     
    執行以下指令,就可以掛載sda1的windows 分割區了
    sudo ntfs-3g -o remove_hiberfile /dev/sda1 /media/teacher/105
     
     
     
     
     
    then copy the file from old error filesystem to the new file device
    there may be error to copy file
     
     reference:
    1. Can't access Windows drive: “Windows is hibernated, refused to mount”
    2. Unable to mount Windows (NTFS) filesystem due to hibernation
    3. The NTFS partition is in an unsafe state error in Ubuntu
    4.  I can't access an NTFS partition, ubuntu thinks it's hibernating...