Quantcast
Channel: CAVEDU教育團隊技術部落格
Viewing all 678 articles
Browse latest View live

Wio Terminal 操作 Grove EMG 肌電圖感測器與GSR膚電反應感測器

$
0
0

前言

本文將介紹如何使用 Wio Terminal 開發板來操作 Grove EMG 肌電圖感測器與 GSR 膚電反應感測器,並將讀取結果顯示於 Wio Terminal  彩色LCD上。後續會說明如何使用 tinyML 架構,根據這兩款感測器的訊號變化來判斷肌肉狀態。

我們已經針對 Wio Terminal 推出了洞洞三套件包~ (原因請洽腦波弱老闆),也別忘了參考阿吉老師所錄製的 Wio Terminal tinyML 系列影片喔!

撰寫/攝影 邱柏憲
時間 1小時 材料表
難度 2 (滿分5)

 


本文

本文的靈感是來自於這篇 hackster.io文章,使用Grove – 肌電圖感測器 EMG 與 Grove – 皮膚電反應感測器 GSR 搭配 tinyML 框架來分析肌肉痠痛的狀態,很有趣。但在這之前,必須要正確由 Wio terminal 來讀取感測器的狀態,所以寫了這篇簡短教學與大家分享。

Grove – 肌電圖感測器 EMG

Grove – 皮膚電反應感測器 GSR

注意:這兩款感測器都無法用於醫療用途,有相關需求請洽專業醫療單位。

A.下載 Arduino IDE,並設定開發板

請先取得 Arduino IDE,本文章所使用的版本為Arduino 2.0.0-rc8。本文章推薦使用2.0以後的版本以方便之後有關AI部分的範例 。請根據您所用的作業系統與希望的安裝方式自行下載即可。

開啟Arduino IDE後首先要新增 Wio Terminal 開發板相關定義,步驟如下:

1. 點擊File(檔案)->Preferences(偏好設定)

2. 新增開發板定義網址

在彈出視窗中,在 額外的開發板管理員網址 處(紅框處)輸入以下內容,再按下 OK 關閉視窗。
https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json

3. 進入開發板管理員

於 Arduino 工具列點選 Tools -> Board > Board’s Manager,來開啟開發板管理員視窗

4. 尋找並安裝 wio terminal 套件

在搜尋欄(紅框處)輸入wio,就可以在下方找到 Seeed SAMD Boards 的選項,直接安裝即可。本篇文章安裝的版本為 1.8.3。請注意,先前於 2. 的偏好設定網址一定要輸入,否則會找不到對應結果。

5. 設定開發板

上述步驟完成後就能在 Tools > Board  > Seeed SAMD Boards 選項中找到 Seeeduino Wio Terminal 與其他系列產品,不要選錯囉。

6. 連接開發板與電腦,確認 COM port 編號

接著使用 USB typeC 傳輸線連接 Wio Terminal 與電腦之後,Wio Terminal 就會自動開機,稍等一段時間等電腦安裝Wio Terminal的驅動程式後,就可以在 Tools(工具)->Port(序列埠)中找到其COM編號,以下圖為例是COM62 。或以 Windows 系統來說,也可進入 Windows 的 “裝置管理員” 來檢視。

B. 圖片轉檔

本文範例會在 wio terminal 上顯示圖檔,因此本段會說明如何轉檔,如不需要此功能可直接跳到 C.

1.轉換圖片格式

由於 wio terminal LCD 有特別的輸出的方式,因此 Seeed 原廠有特別寫一篇文章說明如何將圖片轉成 wio 所需的格式,在此就照著做一遍,步驟如下:
1. 下載 Seeed 提供的 bmp_converter.py (點我下載)
2. 在放置 bmp_converter.py 的資料夾新增一個資料夾,這裡改名為 bmp

3.將想要顯示在 wio terminal LCD 上的圖片,用小畫家(Microsoft Paint)開啟,或任何能儲存24位元點陣圖的程式也可以。在此用 CAVEDU LOGO 做範例,調整尺寸後將圖片儲存在 bmp 資料夾中,注意要將存檔類型改成24位元點陣圖

4. 確認python是否有安裝,如未安裝,安裝最新版即可。完成後開啟命令提示字元(cmd),將路徑選到bmp_converter.py的位置並執行。

python bmp_converter.py

接下來程式會詢問轉檔格式,請選擇 (2) 16-bit,完成後就會在資料夾中看到 rgb565 的資料夾,裡面就是正確格式的 .bmp檔了。萬一跳出 ImportError: No module named PIL 的錯誤,請在 cmd 中輸入 pip install pillow 安裝相關套件就可以了

5.檔案轉換完成後,將其複製到 microSD 記憶卡,然後再插入wio_terminal 中就完成了。

B2.下載RAWImage.h

此標頭檔是由 Seeed 提供,可將圖片輸出於 Wio Terminal LCD 的函式庫,請由此取得:
https://files.seeedstudio.com/wiki/Wio-Terminal/res/RawImage.h

直接複製文字後將其貼入一個新開啟的空白.txt檔案,完成後再將其改名為 RawImage.h 再直接放入Arduino的library資料夾內 (或任何您覺得順手的做法都可以),例如以下路徑 C:\Program Files (x86)\Arduino\libraries

 

C.接線圖

由於 wio terminal 只有一個類比訊號輸入的Grove頭,因此在肌電圖感測器 (EMG Detector) 需要接到板子背後的腳位才行,此處可使用Grove轉杜邦線或是直接拿三條公公杜邦線連接(本文章做法)
連接方法為:

  • 黑接黑(GND)
  • 紅接紅(5V)
  • 黃接橘(訊號)
  • 白色空接

與wio terminal連接為:

  • 上排右邊數來第1格接紅色(5V)
  • 上排右邊數來第3格接黑色(GND)
  • 上排右邊數來第8格接橘色(訊號)

而皮膚電反應感測器(GSR) 就簡單許多,只需將其用Grove 線與右方的Grove腳位座連接即可(紅圈處)

D.程式

程式中關於圖片名稱需與以下相同:
drawImage<uint16_t>("cave.bmp", TFT_HEIGHT/2, TFT_WIDTH-200);
內的cave.bmp一樣否則便無法順利執行程式,如使用其他名稱圖檔,請自行修改即可。

另外如果跳過步驟B的讀者,請註解這行程式碼,否則程式會無法運行 (因為圖檔不存在呀)

// Include the required libraries.
#include <SPI.h>
#include <Seeed_FS.h>
#include "TFT_eSPI.h"
#include "SD/Seeed_SD.h"
#include "RawImage.h"

// Define the TFT screen:
TFT_eSPI tft;

// Define the sprite settings:
TFT_eSprite spr = TFT_eSprite(&tft);

// Define the sensor voltage (signal) pins:
#define GSR A0
#define EMG A2
int gsr_value , emg_value ;
// Define the data holders.
uint32_t background_color = tft.color565(0, 0, 0);
uint32_t text_color = tft.color565(174, 255, 205);



void setup() {
  Serial.begin(115200);

  // Check the connection status between Wio Terminal and the SD card.
  if (!SD.begin(SDCARD_SS_PIN, SDCARD_SPI)) while (1);

  // Initiate the TFT screen:
  tft.begin();
  tft.setRotation(3);
  tft.fillScreen(background_color);
  tft.setTextColor(text_color);
  tft.setTextSize(2);
  // Create the sprite.
  spr.createSprite(TFT_HEIGHT / 2, TFT_WIDTH);
  spr.setTextSize(3);

  drawImage<uint16_t>("cave.bmp", TFT_HEIGHT / 2, TFT_WIDTH - 200);
}

void loop() {
  // Obtain current measurements generated by the GSR sensor and the EMG sensor.
  get_GSR_data(3);
  get_EMG_data();
  // Initialize the sprite.

  spr.drawString("gsr:= ", 10, 10);
  spr.drawString("(finger) ", 10, 40);
  spr.drawString(String(gsr_value), 10, 70);
  spr.drawString("emg:= ", 10, 100);
  spr.drawString("(arm)", 10, 130);
  spr.drawString(String(emg_value), 10, 160);

  spr.pushSprite(0, 0);
  delay(50);
  spr.fillSprite(background_color);
}

void get_GSR_data(int calibration) {
  long sum = 0;
  // Calculate the average of the last ten GSR sensor measurements to remove the glitch.
  for (int i = 0; i < 10; i++) {
    sum += analogRead(GSR);
    delay(5);
  }
  gsr_value = (sum / 10) - calibration;
  Serial.print("GSR Value => "); Serial.println(gsr_value);
}

void get_EMG_data() {
  long sum = 0;
  // Evaluate the summation of the last 32 EMG sensor measurements.
  for (int i = 0; i < 32; i++) {
    sum += analogRead(EMG);
  }
  // Shift the summation by five with the right shift operator (>>) to obtain the EMG value.
  emg_value = sum >> 5;
  Serial.print("EMG Value => "); 
  Serial.println(emg_value); 
  Serial.println();

  delay(10);
}
wio terminal read emg and gsr sensors

E. 執行測試

接下來只要將感測器安裝完畢即可。GSR(皮膚電反應感測器)將布套分別套在食指和中指,EMG(肌電圖感測器) 則是按照Seeed官方示意圖的大略位置將貼片黏於手臂上,安裝完畢後大概位置會如下圖所示

最後就能Wio Terminal上看到當前的量測數值囉!大家可以試試看甚麼情況下的數值可以有變化

 


VIA Pixetto 結合 Google Teachable machine 不需寫程式也能做出AI圖像辨識

$
0
0

前言

   最近筆者拿到VIA Pixetto視覺感測器(以下通稱Pixetto),這個功能完整、1080P FULL HD 的AI鏡頭,除了本身可以辨識顏色、人臉、形狀及手寫辨識…..等等的視覺辨識,還可以搭配 Tensorflow Lite 框架來做更進一步的應用,如果透過 Grove 接頭或正確接線的話,當然也可以和Arduino 這種開發板來溝通。不管是第一次踏入機器學習的初學者,或想要做進階的視覺辨識專案的創作者,我認為Pixetto都顧及到了,可謂是面面俱到!

硬體正反面照片(規格表請按我)

圖片引用自 VIA 原廠規格表

 

    既然Pixetto可以匯入Tensorflow Lite,筆者就想到我們最熟悉的好工具 — Google Teachable Machine 網頁,讓初學者無須編寫任何程式碼就能訓練出視覺辨識、聲音辨識與人體姿勢辨識的神經網路模型,並可以了解機器學習的架構的原理為何,也可以使初學者快速完成自己的專案喔!

撰寫/攝影 許鈺莨
時間 1小時 材料表
難度 2 (滿分5)

 


本文

筆者在實際把玩 Pixetto 的過程中,發現它可以匯入由 Google Teachable Machine 網頁所匯出的 Tensorflow lite (.tflite) 神經網路模型檔案,於是就寫了這篇教學文囉!以下操作分成三大部分,「安裝Pixetto軟體套件」、「Teachable machine網頁訓練模型」與「將Teachable machine網站的tflite檔匯入Pixetto視覺感測器工具」中。

安裝Pixetto軟體套件

在使用 Pixetto 這款 AI 鏡頭之前,需要有些前置作業,請按照以下步驟操作:

步驟1. 下載Pixetto軟體套件

請由 VIA 原廠下載相關軟體,點選本連結下載。

步驟2. 安裝Pixetto軟體套件

請依照預設設定安裝軟體完成,途中可能需要重新啟動電腦。

步驟3. 開啟 Pixetto Studio 介面

安裝完畢後,在桌面上會出現 Pixetto Startup 的 icon,點兩下滑鼠左鍵就會出現 Pixetto Studio 介面,此時先進行下一步硬體操作。

 

步驟4. 將Pixetto透過USB2.0傳輸線連接至電腦

圖片引用自 VIA 原廠教學

步驟5. 初始化完成

Pixetto的綠色、藍色和紅色LED亮起,代表視覺感測器已經初始化完畢,可 以使用了。別忘了把將鏡頭上蓋打開。

圖片引用自 VIA 原廠教學

步驟6. Pixetto 視覺感測器工具介面

回到步驟3,在Pixetto Studio介面中,按下Pixetto Utility,就會出現Pixetto 視覺感測器工具的介面,若有看見鏡頭畫面,便設定完成。請注意在此要先關閉程式,因為後續在 Google Teachable Machine 也會去抓 Pixetto 鏡頭畫面。需要先情關閉否則會看不到畫面。

以上步驟可以在Pixetto 網站找到詳細說明,按此連結下載 。

 

使用 Google Teachable Machine 網頁訓練模型

雖然在Pixetto軟體套件已經可以自行辨識顏色、形狀、人臉….等等的功能,但如果要自定義某種特定類別的標籤已符合自己專案的話,還是需要透過撰寫Python程式,來匯入Pixetto軟體套件中,因此Teachable machine就可以針對初學者不需寫程式,也可以操作囉。

由於有關Teachable machine的細節操作,其他部落格已有很多的相關說明,有興趣的讀者請參考我們先前寫好的相關文章。本篇只是約略說明訓練模型的操作過程,以下分成幾個步驟講解:

步驟1.找到Pixetto的鏡頭名稱

使用 USB 傳輸線把 Pixetto 接上電腦之後,就可以在 Windows 電腦的裝置管理員中🡪相機,找到UVC Camera,這就是Pixetto的鏡頭名稱。

 

步驟2. 在Teachable machine網頁中,得到Pixetto鏡頭的畫面

在收集圖片資料的過程中,除了可以上網搜尋圖片之外,最快速的方法就是使用鏡頭拍照。Google Teachable Machine網站中新增一個影像分類專案,點選Webcam,在下拉式選單中點選UVC Camera,就可以看到 Pixetto 鏡頭畫面。

(注意:需先將Pixetto視覺感測器工具的介面關閉,不然會占用資源而無法在Teachable machine網頁中使用)

步驟3. 收集圖片資料

本文收集了四種類別,分別是KeychainLinkIt7697Raspberry Pi Other,以下展示這四個類別的步驟。

3-1 收集第一個類別Keychain圖片

將標籤改成Keychain後,按下Hold to Record即可拍照收集,以不超過50張為主,其它三個類別的張數也是一樣。

3-2 收集第二個類別LinkIt7697圖片

重複步驟3-1,或選用你想要辨識的物體。

3-3收集第三個類別Raspberry Pi圖片

重複步驟3-1,或選用你想要辨識的物體。

3-4收集第四個類別Other圖片

重複步驟3-1。第四個類別是屬於反指標,也就是辨識Keychain、LinkIt7697、Raspberry Pi類別以外的情形。

 

步驟4. 下載專案tm檔

Google Teachable Machine 的專案檔,副檔名是 tm。當讀者四種類別收集完資料後,若日後想再新增類別,可不必從頭再做一次,只需要按下Download project as file,即可將目前收集資料的進度保存至電腦;日後使用相同帳號,點選Open project from file 就能從上次進度繼續。

步驟5. 訓練模型

確定以上四個類別圖片都收集完畢後,接著要開始訓練模型,按下 Train Model,網頁就會開始訓練模型。

步驟6. 在網站上推論

模型訓練完畢,可以在網頁直接進行推論,測試視覺辨識是否準確,若測試結果覺得不錯的話,可直接下載模型檔。

步驟7. 關閉鏡頭

這是非常重要的步驟,原因和上述一樣,如果沒有在 Teachable Machine 關閉鏡頭的話,等等在 Pixetto 視覺感測器工具中正確開啟攝影機畫面。請把 Input 處切到 OFF 即可關閉Pixetto鏡頭畫面。

步驟8. 匯出 tensroflow lite 模型檔

滿意訓練結果嗎?按下右上角的 Export Model。於跳出的視窗中依序點選 Tensorflow Lite🡪Quantized🡪Download
my model,過幾分鐘後就會有模型的壓縮檔匯出提示可供下載。

 

步驟9. 解壓縮模型檔

將下載下來的模型檔解壓縮,開啟資料夾後,可以看到模型檔 model.tflite 和標籤檔 label.txt。請開啟標籤檔,來看看當初在Teachable machine網頁收集資料的順序,這個步驟後續會用到。

 

將Teachable machine網站的tflite檔匯入Pixetto視覺感測器工具中

步驟1. 匯入tflite模型檔

接續第一階段安裝Pixetto軟體套件的步驟6,開啟Pixetto視覺感測器工具的介面後,點選模型路徑框🡪找到model.tflite模型檔🡪按確認,即可匯入。

步驟2. 標籤編輯

在工具🡪標籤編輯選擇之後,右邊欄位會顯示索引和文字,依序對應索引及文字,例如索引 0 輸入文字 Keychain、索引1輸入文字LinkIt7697…以此類推。若忘記對應名稱,請回顧上述第二階段在Teachable machine網頁訓練模型的步驟9。

成果展示

一切設定完成後,接下來就來看執行成果吧,首先是第一類別Keychain的辨識結果。

綠框是感興趣區域 (ROI,Region of Interest),也就是鏡頭會辨識綠框區域內的物件。不過在辨識Keychain時需要靠近鏡頭近一點辨識才會準確,辨識率可以高達85%以上。值得一提的是,Keychain的另一面是光滑金屬面,容易反光而辨識錯誤。

其他類別的辨識結果如下說明:

  • LinkIt7697也是需要靠近鏡頭辨識才會準確,辨識率可以高達95%以上。
  • Raspberry Pi的辨識率是最高的,因為體積大,所以很容易辨識率100%。
  • Other的辨識率也是不錯,也有達85%以上。

本文實作就到此告一段落,歡迎各位讀者可以在下方的留言區,聊聊你們做了甚麼專題吧,我們下篇部落格見!

相關文章

VIA Pixetto X Arduino首次接觸就上手 人臉辨識實作

$
0
0

前言

前一篇文章說明了如何透過 Google Teachable Machine 網站來訓練一個影像分類的神經網路模型,再將 tflite 模型檔匯入VIA Pixetto Studio 視覺辨識軟體來進行影像分類,最大的優點是不需寫入任何一段程式,輕鬆學習深度學習影像分類的原理。

而且 VIA Pixetto 的應用不只有連接到電腦做視覺辨識而已,還可以發送訊號來控制 Arduino 開發板。本篇要和跟各位分享的是 VIA Pixetto 結合 Arduino首次接觸就上手套件 (以下簡稱Arduino) 的人臉辨識專題。透過VIA Pixetto偵測出訓練好的人臉模型,進而控制Arduino的 LED燈和蜂鳴器。

撰寫/攝影 許鈺莨
時間 1小時 材料表
難度 2 (滿分5)


本文

如果您已經看過 VIA Pixetto 的網站教學,不難發現上傳程式碼到Arduino的方法有兩種:

第一是透過 Pixetto Studio 的積木介面上傳程式碼,也是本篇文章重點,其優點是較好上手,但是需手動新增Arduino模組的函式庫,例如匯入OLED模組的函式庫等等。

第二是透過 [Arduino 首次接觸就上手] 的專屬 Arduino IDE (aka HanGeekduino) 來上傳程式,優點是程式的靈活度提高,也能補足第一點匯入函式庫的問題,但是文字介面對於初學者會有點吃力。

不論以上哪一種方法,VIA Pixetto 韌體都需要更新到最新版,有關第二點透過 HanGeekduino 的 Arduino IDE上傳程式碼,之後再專文分享喔。

由此可知,不論是使用 Pixetto 的積木介面或是 HanGeekduino 的 Arduino IDE ,兩種介面皆可達成本文的效果,,就看使用者對哪種介面比較習慣。若讀者是剛接觸 VIA Pixetto 就直接作這個專題的話,還是有一些地方要注意才能順利完成。接下來就來跟各位分享需要注意的事項,分成 VIA Pixetto韌體更新、訓練人臉模板、下載威盛Pixetto的積木介面和撰寫Pixetto積木程式 等四個段落。


VIA Pixetto韌體更新

步驟1. 到VIA Pixetto 開發者網站下載 Pixetto Utility v1.6.2

請由 VIA Pixetto 開發者網站 下載 Pixetto Utility 軟體或點我直接下載

步驟2. 解壓縮開啟執行檔

步驟3. 更新VIA Pixetto韌體

一切順利的話,請用 usb 傳輸線將 VIA Pixetto 連接到電腦,Pixetto Utility 就會顯示攝影機畫面,並會跳出新版本可用的提示視窗,點選確認。更新成功之前請勿拔除 usb 傳輸線。

步驟4. 韌體更新完後,重新啟動

看到重新啟動訊息之後,重新啟動軟體即可順利看到攝影機畫面。

步驟5. 查看版本

點選工具列的 說明🡪關於,可確認目前的最新版本為1.6.2。

訓練人臉模板

這套軟體中已經具備人臉辨識功能,但如果要辨識 “哪一張臉” 的話,就需要 模板匹配 選項來訓練,不過請注意,模板匹配最多只能有三個類別,也就是三張臉。

步驟1. 選擇模板匹配

請在軟體工具列的功能選項下拉式選單中,選擇模板匹配。

 

步驟2.訓練人臉模板

選一張人臉,放在鏡頭前,然後用滑鼠拉動綠框將人臉框起來。請注意,為了順利辨識不同人臉的差異,人臉當然是愈大愈好。

 

步驟3.儲存模板

在模板下方請點選儲存模板的按鈕。

 

步驟4. 訓練第二張人臉模板

再選擇另一張人臉訓練,重複上述步驟1~步驟3。

步驟5. 最大顯示物件數量選1

這麼做代表在單一畫面中只會辨識一張人臉,這樣的效果會好很多。

 

步驟6. 最後按下套用,即可訓練完成。

 

步驟7. 驗證人臉模板,以下是人臉辨識結果。

 

步驟8. 斷開VIA Pixetto USB和電腦的傳輸線,並接上Arduino


下載威盛Pixetto的積木介面—Pixetto Editor

前面提到過,由於 Pixetto 韌體必須更新到最新版,這會影響到 Arduino 可否順利上傳。經過測試,建議重新下載 Pixetto 的積木介面,也就是 Pixetto Editor。

步驟1.下載Pixetto Editor

點我下載  Pixetto Editor

步驟2. 解壓縮後開啟執行檔

點選執行檔之後,開啟介面如下。

 

若跳出 [Window已保護你的電腦] 畫面,則按其他資訊🡪仍要執行

 

撰寫程式碼

步驟1.確認COM號

Arduino 透過 USB 傳輸線接上電腦之後,請在 Pixetto Editor 中把 COM 號根據裝置管理員所看到的來設定。

 

步驟2. 選擇開發板

開發板選 Arduino/Genuino UnoAtmega328P 維持不動。

 

步驟3. 撰寫程式

請根據下圖來撰寫程式,或點我下載程式。程式會根據所辨識到的物體來控制數位腳位4號,如果您使用 Arduino 首次接觸就上手套件的話,這就是 LED 的預設編號,LED 就會亮或暗喔!

 

下載程式後,點擊兩下即可開啟。

 

步驟4.將 VIA Pixetto 接上 Arduino 首次接觸就上手

請用 Grove 傳輸線來連接 Pixetto 與 Arduino 的 UART 腳位,如下兩圖的黃色框框處所示。這是我們自行繪製並 3d 列印的攝影機支架,很方便喔

步驟5.上傳程式。

點選 Pixetto Editor 左上角三條線🡪上傳程式碼🡪OK

 

成果展示

本篇說明了如何使用 Pixetto 攝影機模組搭配自家軟體來辨識不同的人臉,並根據辨識結果來發送訊號給 Arduino,在此以 LED 亮暗來呈現,您可以自行更換為喜歡的效果。

如果您是由 VIA網站 來下載 Pixetto軟體套件,並在其中訓練人臉模板的話,由於版本皆為 1.5.X,所以還是可順利執行。但若要用Arduino IDE去上傳程式就會碰到函式庫版本不符的問題,後續再寫新的文章來分享囉!

VIA Pixetto X Arduino首次接觸就上手 顏色辨識實作

$
0
0

前言

延續上一篇『VIA Pixetto X Arduino首次接觸就上手人臉辨識實作』技術文,其原理就是VIA Pixetto偵測到人臉時,可以控制 Arduino首次接觸就上手套件 (以下簡稱Arduino) 的LED燈及蜂鳴器。上一篇文章中提到 Arduino的程式可透過Pixetto Editor燒錄,也可用 HanGeekduino 的Arduno IDE燒錄。

本篇要接續分享利用 VIA Pixetto 偵測到特定顏色時,可把辨識的顏色結果顯示在 Arduino 的 OLED 模組上,但為了能夠使用OLED模組,就有了另一個作法—使用HanGeekduino的Arduno IDE燒錄程式到Arduino。

撰寫/攝影 許鈺莨
時間 1小時 材料表
難度 2 (滿分5)

 

本文

若想透過HanGeekduino的Arduno IDE來燒錄程式到Arduino的話,就會有匯入Pixetto函式庫版本的問題,必須搭配VIA Pixetto的韌體版本1.6.2版,因此在進行本篇實作之前,建議先看過『VIA Pixetto X Arduino首次接觸就上手人臉辨識實作』技術文章,其中已經說明如何更新 VIA Pixetto 的韌體版本,本文就不再重複,以下就從匯入Pixetto 函式庫和 VIA Pixetto 顏色辨識來說明。

HanGeekduino的Arduno IDE匯入Pixetto函式庫

步驟1.下載HanGeekduino

HanGeekduino 是我們根據 BlocklyDuino 並針對 Arduino 首次接觸就上手套件所修改的圖形化介面 (按此下載)

步驟2.解壓縮開啟Arduno IDE執行檔

在arduino-1.8.5的資料夾中開啟Arduno IDE執行檔

 

步驟3.匯入Pixetto函式庫

Arduino IDE 中,請點選 Sketch 🡪 Include Library 🡪 Manage Libraries…  開啟函式庫管理員

在 Library Manager 的搜尋欄位中輸入 pixetto,可以找到相關函式庫,並下載 Pixetto 相關函式庫到最新版。

步驟4.Pixetto相關函式庫下載完後,重新啟動Arduino IDE

步驟5.上傳程式碼到Arduino

程式傳送門(按此下載),修改自 PixettoLite 範例程式 ColorDetection 修改而來,以下是完整程式碼

#include <SoftwareSerial.h>
#include <PixettoLite.h>
#include <Arduino.h>
#include <U8x8lib.h>
U8X8_SSD1306_128X64_ALT0_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);

SoftwareSerial pxtSerial(A0, A1); // RX黃色, TX白色


char pxtbuf[PXT_BUF_SIZE];
struct pxt_data* pxtdata = (struct pxt_data*)pxtbuf;

void setup()
{
  Serial.begin(38400);
  pxtSerial.begin(38400);
  Serial.println(pxtGetVersion(pxtSerial), HEX);
  pxtSetFunc(pxtSerial, FUNC_COLOR_DETECTION);
  u8x8.begin();
  u8x8.setFlipMode(1);
  u8x8.setFont(u8x8_font_chroma48medium8_r);
  u8x8.clear();

}

void loop()
{
  char s[32];
  int n = pxtAvailable(pxtSerial);
  while (n--) {
    if (pxtGetData(pxtSerial, pxtbuf, PXT_BUF_SIZE) > 0) {
      sprintf(s, "%02d %d %d %d %d", pxtdata->class_id,
              pxtdata->x, pxtdata->y, pxtdata->w, pxtdata->h);
      Serial.println(s);
    }
    if (pxtdata->class_id ==1) {u8x8.setCursor(0, 0); u8x8.print("RED");}
    else if  (pxtdata->class_id ==2) {u8x8.setCursor(0, 0); u8x8.print("YELLOW");}
    else if  (pxtdata->class_id ==3) {u8x8.setCursor(0, 0); u8x8.print("GREEN");}
    else if  (pxtdata->class_id ==4) {u8x8.setCursor(0, 0); u8x8.print("BLUE");}
    else if  (pxtdata->class_id ==5) {u8x8.setCursor(0, 0); u8x8.print("RPURPLE");}
    else if  (pxtdata->class_id ==6) {u8x8.setCursor(0, 0); u8x8.print("BLACK");}
  }
  delay(200);
  u8x8.clear();
}
ColorDetection_OLED.ino

VIA Pixetto顏色辨識

在Pixetto的視覺感測器介面就有訓練好的顏色識別模型了,只需要勾選要識別的顏色,然後套用即可,以下說明步驟。

步驟1.用USB傳輸線將VIA Pixetto和電腦連接

步驟2.開啟1.6.2版的Pixetto Utility

在功能處的選項選顏色辨識,最大顯示物件數量選1,顏色則是看使用者決定要辨識的顏色,筆者是全部勾選,最後按下套用,記住一定最後要點選套用,顏色識別的模型才會確定載入VIA Pixetto中。

 

步驟3.顏色識別測試

筆者是拿三種不同顏色的三角錐來測試,分別是黃色、藍色及紅色,可以由以下的圖看見,黃色是2號。

 

而每個顏色的標籤如下表所示:

 

步驟4.Grove連接線接到Arduino

將 VIA Pixetto 和電腦的USB連接線斷開,並用一條 Grove 連接線接到Arduino 的A0腳位。

 

成果展示

 

 

本篇為您說明了如何使用 Arduino IDE 上傳程式碼進行顏色辨識,並將 VIA Pixetto 辨識結果顯示在 OLED 中,期待大家可能發想出更多有趣的應用。若各位讀者成功,或有其他的應用,歡迎以在留言區和我們分享囉,那麼下一篇文章見囉!

相關文章與資源連結

NVIDIA® Jetson AGX Orin™ 在 SSD 上安裝作業系統

$
0
0

前言

上一篇文章介紹了Jetson AGX Orin預設的系統開機及安裝,這一篇文章主要來介紹Jetson AGX Orin如何在SSD安裝系統。

撰寫/攝影 郭俊廷
時間 1小時 材料表
難度 2 (滿分5)

內文

上一篇文章 由變胖的阿吉老師介紹了 Jetson AGX Orin 預設的系統開機及安裝,這一篇文章主要來介紹Jetson AGX Orin如何在SSD安裝系統。

首先,AGX Orin 如需安裝或更新系統時需要透過 NVIDIA SDK Manager 來操作,NVIDIA SDK Manager安裝方法請參考之前的文章,筆者目前測試NVIDIA SDK Manager 1.8 版本在安裝JetPack 5.0以下版本皆須使用Ubuntu 18.04 LTS的版本,Ubuntu 20只能安裝JetPack 5.0以上的版本。
本次的AGX Orin只能安裝 JetPack 5.0 以上的版本,所以使用Ubuntu 18或20皆可安裝。

NVIDIA SDK Manager網站及安裝方法可以參考以下兩篇文章:

STEP 1 安裝SSD

首先說明如何在 AGX Orin 上安裝 SSD,AGX Orin 不同於之前的 Jetson AGX Xavier 需要拆除板子進入中間夾層才可以裝上 SSD (有點辛苦),AGX Orin 直接將SSD插槽放置於背面的位置。

固定SSD 的螺絲位置如下圖紅框處,移除後將SSD正確的方向插入後再將螺絲鎖上。

STEP 2 使用NVIDIA SDK Manager安裝系統

首先先將 AGX Orin 的 USB Type-C 連接線接上已安裝好 NVIDIA SDK Manager 的 Ubuntu電腦上 (位置如下圖紅框所示),並且將DP接頭接上對應的螢幕,最後接上鍵盤及滑鼠。

接著開啟 NVIDIA SDK Manager,如果是第一次連接機器的話,可能會跳出以下選項,請選擇 Jetson AGX Orin,可以看到其他選項有另一系列的 DRIVE AGX Orin (應該是車載機系列)。

 

接著取消勾選 Host Machine,將 Target Hardware 選擇 refresh 後會自動選擇Jetson AGX Orin (如果沒自動選擇,請如上圖選擇第一個Jetson AGX Orin)。

TARGET OPERATING SYSTEM 只能選擇JetPack 5.0以上 (目前 2022/07 已經有 JetPack 5.0.1DP 版本),DeepStream 可根據你的需求選擇是否勾選(建議勾選)。選擇完畢後,點選右下角 CONTINUE 進入下一步。

選擇要下載的項目,本文為全部下載並安裝。請記得勾選下方的 accept license 選項(有點小…)如果要馬上安裝,則不要勾選 Download now. Install later。如果只想先下載之後再安裝,則可勾選該選項。

 

接著會要求輸入你的 Ubuntu 系統密碼,輸入繼續即可。

如果選擇自動模式安裝,則需輸入 AGX Orin 的帳號及密碼,並且可以在 6.Storage Device: 這裡選擇要安裝的裝置,預設是 EMMC,但在此請選擇 NVMe,也就是我們SSD所在的位置。

 

如果還沒建立帳號的使用者,請改用手動模式安裝,手動安裝需要在開機時先按住 Force Recovery button (下圖2號位置),再按下 Power button (下圖1號位置) 即可進入 Recovery Mode

手動模式安裝選擇的位置如下圖紅框所示,這裡的 8.Storage Device 請一樣改為位置一樣需要更改成NVMe

設定完會自動開始安裝 Jetson OS,也就是Jetson的Ubuntu作業系統,安裝完之後要先建立一組帳號密碼才能繼續安裝其他套件。開機後會出現如下圖的安裝步驟,選擇鍵盤類型、地區時間、帳號密碼等資訊,請依照您的需求完成即可,詳細設定教學請點我

全部都安裝完成後如下圖,請按下 FINSH AND EXIT 選項離開  NVIDIA SDK MANAGER 軟體。

本文到此結束,後續會繼續測試在 AGX Orin 上安裝相關軟體套件與執行效能,歡迎繼續關注喔!

 

 

 

 

 

 

 

Jetson Xariver NX (2022)系統模組安裝在 Jetson Mate 叢集電腦平台與隨身碟擴充記憶體空間

$
0
0

前言

上一篇文章介紹了Jetson AGX Orin預設的系統開機及安裝,本文要介紹如何把 Jetson Xariver NX (2022)系統模組安裝在 Jetson Mate 叢集電腦平台,並使用隨身碟擴充記憶體空間。

別忘了,如果是和機器人王國商城購買 Jetson 相關商品的話,出貨時就會把所有系統做好,開機馬上使用!本文感謝國立高雄大學胡忠信老師賜稿。

撰寫/攝影 胡忠信
國立高雄大學通識教育中心 兼任助理教授
時間 1~2小時 (不含 JetPack 燒錄)   材料表
  • Jetson Mate   1個
  • Jetson Xavier NX(2022版)系統模組(SOM) 1 組 (6GB eMMC R/W記憶體 / 8GB動態記憶體
  • 64GB usb 3.0 隨身碟 1個
  • Jetson Xavier Nx 專用散熱片 1個
  • 鍵盤與滑鼠組 1組
  • 100W功率USB type-c 交換式電源供應器 1個
難度 1 (滿分5)

本文

實驗步驟:

  1. 先將Jetson Xavier NX (2022版)系統模組,安裝NVIDIA原廠 jetpack 4.6 系統程式。本步驟委託CAVEDU教育團隊的工程師代為安裝 (教學請點我)。
  2. 使用 ‘‘ 型螺絲起子,將散熱片裝上 Xavier NX 系統模組(SOM),如下圖。

 

  1. 用 ‘‘ 型螺絲起子,打開 Jetson Mate 的上蓋,在Master #1 插槽位置 (下圖最右側),插入Xavier NX SOM,如下圖。
圖2,在Master #1 插槽位置,插入Xavier NX SOM
  1. 將 Jetson Mate 的上蓋裝回去。於前面板上(由右至左)依序接上網路線、HDMI線連接LCD螢幕、與無線鍵盤滑鼠組的無線發射器(給Master主控板用),如下圖。
圖3-1,Jetson Mate的前面板接上網路線、HDMI線、鍵鼠發射器與隨身碟
  1. 插入電源供應器至Type-C 電源座,打開電源,此時外殼的風扇跟LED飾燈都會開啟。再按下後面板的WAKE按鈕,系統模組才會開機,如下圖。
圖3-2 按下後面板的WAKE按鈕即可開機          
  1. 開機完成之後,在 terminal 視窗中輸入 df –h 指令,可看到 16G eMMC 在安裝 OS 後只剩下6G的空間,如下圖。所以請將一個 64G USB3.0的隨身碟,插入步驟4前面板的USB3.0#1號插座位置來擴充 Xavier NX SOM的空間,如前圖所示。
圖4 執行 df –h 指令,可觀察到16G eMMC安裝系統後只剩下1.6G的空間
  1. 格式化 USB 隨身碟及分割其磁區:
    • 使用滑鼠點擊 Ubuntu 桌面左上角的 ubuntu 圖示,在搜尋欄中輸入disk並選擇Disks工具啟動之。
    • 在左側的設備欄中,選擇USB隨身碟,再點選右上方「≡」的功能選項展開並點選Format Disk,操作畫面如下圖
圖5 選擇USB隨身碟,再點選右上方「≡」的功能選項
    • 在 Format Disk 小視窗中,選擇compatible with modern system and hard disks >2TB(GPT),如下圖。

    • 點選磁碟標籤下方的 ”+” 圖示,進行磁碟分割,在Create Partition小視窗中,確認磁碟分割區域的空間大小,預設為全部62GB,點選右上方的Next按鍵。
    • Volume Name 請輸入分割區域名稱,例如 usb_nx,Type格式為 internal disk for use with Linux systems only(Ext4),最後點擊右上方 Create按鍵就完成了。
  1. 將eMMC轉移至USB隨身碟開機:

 

         在github上找到開源專案 bootFromUSB

 

    • 開啟terminal視窗輸入指令下載該專案

git clone https://github.com/jetsonhacks/bootFromUSB.git
    • 在terminal視窗輸入指令確認 USB隨身碟代號,在此為 /dev/sda1
ls /dev/sd*
    • 執行 copyRootToUSB.sh 腳本,將eMMC的內容,備份至USB隨身碟。
./bootFromUSB/copyRootToUSB.sh –p /dev/sda1
    • 編輯 /boot/extlinux/extlinux.conf 檔案

                  先將原始檔案備份再編輯

sudo cp /boot/extlinux/extlinux.conf  /boot/extlinux/extlinux_backup.conf

sudo gedit /boot/extinux/extinux.conf

                  於LABEL 的內容中,找到APPEND,將 root 參數修改為 root= /dev/sda1,代表先前的隨身碟路徑。修改完成後,存檔並重新啟動系統。

                  開機之後在桌面左側工作列,如果看到一個標示有”SD”字樣的小紅碟圖示,如圖六所示,即完成增加磁碟空間。

圖6 於工作列確認已新增隨身碟

               於 Settings 中開啟 Details,確認記憶體容量已增加為 60.3G,如下圖。

圖7 確認容量已擴充

結語

    本文說明如何將Jetson Xavier NX新2022年版系統模組,安裝在Jetson Mate叢集電腦平台,並透過外接的 64G USB隨身碟來擴充其記憶體空間。與舊版最大的不同點,新版本的Jetson Xavier NX安裝Jetpack 4.6系統程式,只能用原廠的nvidia sdk manager 程式來對其內建的16G eMMC 記憶體進行。另外也因為在安裝作業系統之後,僅剩1.6G的記憶體空間,無法下載其他應用程式及套件,故需要外接一USB隨身碟,以擴充其記憶空間。

    本案因筆者不熟悉nvidia sdk manager 程式及燒錄系統程式的方法,故委請CAVEDU教育團隊的老師們代為安裝,在此致上萬分之感謝!謹以此文與各位同好,做相關技術的交流!

 

在 Jetson AGX Orin™ 上安裝 ROS 機器人作業系統

$
0
0

前言

本文為 ZED 景深攝影機原廠範例,說明如何在 Jetson AGX ORIN™ (本文後簡稱 ORIN) 平台上安裝 ROS 機器人作業系統,ROS2 安裝將另外寫文章和大家分享。

當然,您需要先取得一台 Jetson OrinZED 攝影機才能順利執行所有範例。

由於相關設定相當繁瑣,由機器人王國商城購買這兩項商品的朋友們,我們將為您測試好所有範例再行出貨,以便您更快上手喔!

Jetson AGX Orin™ 的強大效能解放了處理來自多台 ZED 2i Depth Cameras 之 3D 資料的能力,使其成為自動化機器人與邊緣分析應用的絕佳方案。

本文將說明如何在 ORIN 上安裝 ROS Noetic Ninjemys ,讓 Jetson AGX Orin 得以控制機器並以 3D 方式來感知這個世界。您會知道如何使用最新的 NVIDIA Jetpack SDK 5.0.1 Developer Preview,也帶入了 Jetson Linux 34.1.1 (第一個基於 Ubuntu 20.04 的 Linux for Tegra operating system)。

但首先讓我們來看看,為什麼要選用 Jetson AGX Orin?

AGX Orin vs AGX Xavier:各項效能最高為上一代的 2.5 倍!

根據 ZED 團隊,Jetson AGX Orin 的各項效能比前一代 AGX Xavier 都來的更好,最高為 2.5 倍!

下圖比較了 Orin / Xavier 在深度擷取 (Depth Extraction)、物件偵測 (Object Detection) 與骨架追蹤 (Skeleton Tracking) 等不同方面的效能,提升至少都有 1.5x,平均則是 ~ 1.8x。

 

AGX Orin 可將 ZED 新的 Neural depth mode 充分運用於機器與自動導航等即時性要求極高的應用中。

在 Jetson AGX Orin 上安裝 ZED SDK

    您需要先安裝用於 NVIDIA Jetpack 5.0最新版本的 ZED SDK,才能接續安裝 ROS 或 ROS2。請由此下載 ZED SDK。也請參考 ZED 所寫的 Orin  開機教學 CAVEDU 所寫的 Orin 開機教學

    開啟終端機並輸入以下指令:

cd Downloads 

chmod +x ZED_SDK_Tegra_L4T<os_ver>_v<sdk_ver>.run

./ZED_SDK_Tegra_L4T<os_ver>_v<sdk_ver>.run

請將上述指令的 <os_ver><sdk_ver> 換成與您所下載檔案檔名對應。本步驟完成之後就可以來安裝 ROS / ROS2了。


在 Jetson AGX Orin 上安裝 ROS Noetic

ROS Noetic Ninjemys 是 ROS 最新一版的 LTS release,但請注意,ROS.org 在 2025 年 5 月之後就不會再推出新版的 ROS release。

ROS Noetic

安裝 ROS Noetic

設定電腦來接受來自 packages.ros.org 的軟體套件。

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

設定金鑰

sudo apt install curl # if you haven't already installed curl

curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

更新軟體並安裝 ROS noetic

sudo apt update

sudo apt install ros-noetic-desktop

我們希望每次啟動新的 shell 時,都可以自動 source 到環境設定腳本,請透過以下指令來設定:

Bash shell

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc

zsh shell

echo "source /opt/ros/noetic/setup.zsh" >> ~/.zshrc source ~/.zshrc

安裝建置套件所需的相依套件

sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator 

python3-wstool build-essential python3-rosdep

初始化 rosdep

sudo rosdep init 

rosdep update

安裝 ZED ROS Wrapper

ZED ROS Wrapper 可將 ZED SDK 的各種功能帶入您的 ROS 專案中。ZED ROS Wrapper 為開放原始碼,請由其 Github 取得。

mkdir -p ~/catkin_ws/src

cd ~/catkin_ws/src

git clone --recursive https://github.com/stereolabs/zed-ros-wrapper.git

cd ../ 

rosdep install --from-paths src --ignore-src -r -y

catkin_make -DCMAKE_BUILD_TYPE=Release

source ./devel/setup.bash

注意:git clone 指令搭配 --recursive 旗標,可順利將 zed-ros-interfaces 作為子模組來安裝,並加入所有 ZED ROS Wrapper 所需的自定義訊息。

每次啟動新的 shell 時,都可以自動 source 到環境設定腳本,請透過以下指令來設定。

Bash shell

cd ~/catkin_ws

echo "source $(pwd)/devel/setup.bash" >> ~/.bashrc

source ~/.bashrc

zsh shell

cd ~/catkin_ws

echo "source $(pwd)/devel/setup.bash" >> ~/.zshrc

source ~/.zshrc

安裝範例與教學

ZED 已提供了相當豐富的範例與教學,方便您測試 ROS 在 Jetson AGX Orin 上的運作效果:

cd ~/catkin_ws/src 

git clone https://github.com/stereolabs/zed-ros-examples.git 

cd ../ 

rosdep install --from-paths src --ignore-src -r -y 

catkin_make -DCMAKE_BUILD_TYPE=Release 

source ./devel/setup.bash

ZED ROS Wrapper 相關文件與教學請點我。Jetson Orin 安裝 ROS1 到此結束,接著要看到如何安裝 ROS2。


結論

您的 Jetson AGX Orin 已經可以透過 ROS 與 ROS2 來控制機器人平台了!再搭配 Stereolabs ZED 景深攝影機的話,Orin 就能像我們人類一樣以 3D 方式來感知周遭的環境。

如果在 Jetson AGX Orin 上安裝 ROS / ROS2 有更多問題的話,請於本文留言或到 ZED 論壇留言

註:本文經授權之後翻譯自 [Getting Started with ROS on Jetson AGX Orin™

[技術教學文]RK-reComputer J1010 (安裝 Jetson Nano 4GB運算模組) 如何移動到記憶卡開機教學

$
0
0

前言

本文要介紹的reComputer J1010 (安裝 Jetson Nano 4GB運算模組)並且如何移動到記憶卡開機的教學。相關硬體介紹請點我,也歡迎由 [機器人王國商城] 來取得這台厲害的單板電腦喔!

撰寫/攝影 郭俊廷
時間 約 1小時 材料表
難度 3 (滿分5)

內文

這次要介紹 reComputer J1010 (安裝 Jetson Nano 4GB運算模組) 以及將作業系統移動到記憶卡開機教學。

之前介紹的 reComputer J1020 有包含NVMe M.2 SSD 固態硬碟擴充槽位置,但本文主角 reComputer J1010是沒有包含 SSD 固態硬碟擴充槽的,所以內建的16 GB 的eMMC在系統預裝了 Ubuntu 18.04 LTS 和NVIDIA JetPack 4.6之後空間是剩下2 GB多,如需安裝其它套件必須將系統移動到USB或記憶卡等其他儲存空間之中。

reComputer J1010(安裝Jetson Nano運算模組)在系統方面一樣預裝了 Ubuntu 18.04 LTS 和NVIDIA JetPack 4.6,如購買安裝好CAVEDU系統及套件的,不用建立相關帳號與設定即可使用,如是購買沒有安裝好系統的需要建立帳號等相關資訊可以參考以下影片 (可從6分01秒的時間開始觀看)

reComputer J1010的各個接頭圖所對應的表格如下:

編號 名稱 說明
1 DC輸入(Type-C接頭) 僅做為供電用
2 HDMI接頭輸出 接螢幕用
3 1個USB 3.0 Type-A接頭 接相關周邊設備用
4 2個USB 2.0 Type-A 接相關周邊設備用
5 RJ45接頭 接網路線用
6 USB Type-C 接頭 僅做為電腦傳輸數據用

另外此次的J1010多了記憶卡插槽的位置(如下圖紅色框所示)。

這次的reComputer J1010已經安裝好ubuntu 18.04 LTS 和 NVIDIA JetPack 4.6 ,初次開機時需要建立相關帳號及密碼設定。要建立帳號教學影片的話可從6分38秒的時間開始觀看

https://youtu.be/ZnDKDczcWVc?t=398

成功建立帳號後就要開始記憶卡開機相關設定,分為安裝記憶卡驅動教學以及將系統從eMMC轉移至記憶卡開機教學

PART A:安裝記憶卡驅動教學

2.1 下載驅動專案並移動到專案目錄

git clone https://github.com/Seeed-Studio/seeed-linux-dtoverlays.git

cd seeed-linux-dtoverlays

2.2編輯jetson-sdmmc-overlay.dts檔案修改成以下內容

執行以下命令修改jetson-sdmmc-overlay.dts檔

sed -i '17s#JETSON_COMPATIBLE#\"nvidia,p3449-0000-b00+p3448-0002-b00\"\, \"nvidia\,jetson-nano\"\, \"nvidia\,tegra210\"#' overlays/jetsonnano/jetson-sdmmc-overlay.dts

2.3 編譯文件已確認它們被正確修改

make overlays/jetsonnano/jetson-sdmmc-overlay.dtbo

2.4確保可以識別 sd 卡

sudo cp overlays/jetsonnano/jetson-sdmmc-overlay.dtbo /boot/

cd /boot/

sudo /opt/nvidia/jetson-io/config-by-hardware.py -l

執行上述指令之後,應該得到類似以下的輸出:

2.5 命名設備並完成驅動程序安裝

sudo /opt/nvidia/jetson-io/config-by-hardware.py -n "reComputer sdmmc"

重新開機後就可以看到記憶卡已掛載。

sudo reboot

PART B:使用腳本將reComputer J1010「系統」從eMMC轉移至記憶卡開機教學

3.格式化記憶卡

請根據以下步驟來格式化記憶卡並設定成GPT格式。

在 Ubuntu 作業系統中搜尋Disks並點擊,會看到以下畫面,點選你的記憶卡,本文中為128G的SD Card Reader:

點選右上角的三條橫槓,選擇格式化(Format Disk),選擇預設的GPT,再次確認要格式化(Format),接著輸入使用者密碼,授權進行格式化:

格式化後可看到所有空間都已被配置為 Free Space,點選下圖的加號來新增磁區:

本文所要建立的新分割容量為整張記憶卡的空間,大家可以根據自身需求做調整。接下來幫該分區取名稱命名為 NANO_SD (或是你自己想取的名稱),類型要選擇 Ext4(Fourth EXTended filesystem)

點選下圖紅框處箭頭來掛載記憶卡,掛載成功也會出現對應訊息:

 

4.將系統搬移到記憶卡

4.1 下載搬移的執行檔

請下載以下檔案 (change_rootfs_storage_direct-emmc_to_sdmmc.sh),並放到系統的家目錄 (/~)

 

4.2. 給執行檔權限並執行該腳本

執行以下指令,賦予該腳本權限

chmod +x change_rootfs_storage_direct-emmc_to_sdmmc.sh

先查詢記憶卡的路徑,請用 df -h 指令或使用Disk程式去查詢,如下圖紅框所示,我們120G的記憶卡位置為 /dev/mmcblk1p1

執行該腳本來搬移系統,預估本指令的執行時間約為10分鐘。請注意最後的 /dev/mmcblk1p1  為要搬移的記憶卡路徑,請用 df -h 指令或使用Disk程式去查詢。

sudo ./change_rootfs_storage_direct-emmc_to_sdmmc.sh /dev/mmcblk1p1

執行完成後重新開機才可在記憶卡開機

sudo reboot

重新開機後,再次執行 df -h 指令查詢是否成功將系統移動到記憶卡,成功後會看到記憶卡的空間已被使用,如下圖紅框。

相關文章(超豐富)

CAVEDU 實測文章


[ZED深度攝影機系列] 如何在 Jetson Xavier NX 安裝 ZED SDK 與 Python開發環境範例 –以 RK-reComputer J2012 為例

$
0
0

前言

我們已經花了相當的篇幅介紹 ZED 2i 深度攝影機的硬體與相關範例,本篇要為大家介紹如何在NVIDIA® Jetson Xavier™ NX上安裝ZED及執行ZED的相關範例。本文使用的 NVIDIA® Jetson Xavier™ NX 是 RK-reComputer J2012系列,詳細規格與購買連結請點我

首先要注意的是,NX 在安裝ZED相關套件之前需要先安裝好作業系統與相關套件,本文採用 JetPack 4.6 的系統,相關安裝教學請點我

撰寫/攝影 郭俊廷
時間 1~2小時 (不含 JetPack 燒錄)   材料表
  • Jetson Xavier NX(2022版)系統模組(SOM) 1 組 (6GB eMMC R/W記憶體 / 8GB動態記憶體
  • Jetson Xavier Nx 專用散熱片 1個
  • 鍵盤與滑鼠組 1組
  • 100W功率USB type-c 交換式電源供應器 1個
難度 2.5 (滿分5)

本文

準備好東西就開始吧~

Step A. 安裝ZED SDK

首先要去官網下載正確版本的 ZED SDK,下載地點為如下網址的DEVELOPERS裡面的SDK Downloads(如下圖紅框處):
https://www.stereolabs.com/developers/release/

由於本文的 RK-reComputer J2012 ( NVIDIA® Jetson Xavier™ NX ) 已安裝了 JetPack 4.6,所以需要下載如ZED SDK for L4T 32.6 (Jetpack 4.6) 2022/09/29最新版為3.7.7,如下圖紅框處。如果是使用其他版本JetPack的使用者記得請下載對應版本的安裝檔。

下載完之後把安裝檔放到家目錄(如下圖)

開啟終端機,修改安裝檔權限之後執行

chmod +x ZED_SDK_Tegra_L4T32.6_v3.7.7.run
./ZED_SDK_Tegra_L4T32.6_v3.7.7.run

執行後會跳出相關LICENSE.txt,拉到最底下後可以按 q 離開該畫面

接著會問是否同意終端使用者授權合約,輸入Y同意。

接著輸入相關使用者密碼

再來會檢查CUDA相關套件有無安裝正確,正確後詢問是否安裝ZED SDK,輸入Y。

接著詢問是否安裝相關AI module,一樣輸入Y。

詢問是否要啟用最大效能模式 (maximum performance mode),但會加大耗電量把功率調到最大讓安裝更快速,一樣輸入Y。

詢問是否要安裝相關範例,輸入Y,選擇範例存放路徑 (這裡採用預設路徑)。

接著詢問使否要安裝Python API 這裡要輸入Y才可以執行相關Python範例。並且設定為python3

看到以下訊息代表 ZED SDK 正確安裝。

 

Step B. ZED範例使用教學

接著說明如何在 Jetson NX 平台上執行ZED範例,請注意:此範例都需要連上實體螢幕才可開啟畫面,使用SSH遠端連線時會無法顯示畫面。

首先先來檢查ZED SDK安裝是否正確,進入 /usr/local/zed/tools/ 目錄,點選 ZED_Depth_Viewer 檔即可開啟本範例,如果看到攝影機畫面就代表 ZED SDK 安裝正常。

範例實際執行的動圖如下

接著要執行 body tracking 骨架追蹤 Python 範例。請開啟終端機執行以下兩個指令:

cd ~/zed/samples/body tracking/python/
python3 body_tracking.py

如果看到以下錯誤代表還沒安裝 OpenGL套件,請用以下指令安裝OpenGL即可:

pip3 install PyOpenGL

一切順利就可以看到人體骨架偵測追蹤的效果,準確度與 FPS 都很不錯!

本文到此結束,ZED SDK 還提供了相當豐富的範例,我們都有取得授權後翻譯成中文,歡迎玩玩看囉 --> http://blog.cavedu.com/?s=zed

參考資料

 

 

 

 

 

 

組裝!!AI嗅覺實驗套件(2022年)

$
0
0

感謝Benjamin Cabé發表這麼有趣的的專題

我承認,當初是被這個鼻子造型所吸引,所以就決定引進Wio Terminal的。

作者/攝影 腦波弱老闆
時間 裝起來很快,找材料跟測試就比較花工夫,但你都找到這篇文了,接下來應該就會順利了
成本 材料可以在機器人王國商城買到,但印那個鼻子要大概八小時。
難度 我腦波弱都做得出來,是能有多難
材料表 機器人王國購買【AI嗅覺實驗套件】連結
  • 光固化成形鼻子模型與壓克力背板 X1
  • Wio Terminal 開發板 X1
  • Grove–多通道氣體感測器 V2 X1
  • Grove–MOSFET模組 X1
  • 2510七彩變色散熱風扇 X1
  • 螺絲包
    • 螺絲M2x15 X4個(固定風扇)
    • 螺帽M2 X4個(固定風扇)
    • 螺絲M2x8 X2個(固定Wio Terminal)
    • 螺絲M3x8X4個(固定壓克力背板)
  • 線材
  • 杜邦公接頭轉歐式端子線X2
  • Grove訊號線 X2(隨感測器包裝)

免責文先放前面:

以下為個人心得分享,受限於作者(就是我)的表達能力與相關能力素養,不保證讀者(就是正在看這篇文章的你)跟著做就一定會得到跟我一樣的成果。但如果你也願意動手試試看,相信一定會有所收穫。

 

先來張開箱圖

您可能會需要的工具

  • 一字與十字起子
  • 4mm六角套筒或是尖嘴鉗(非必要)
  • 膠帶或是白膠(非必要)

 

建議您測試過程式與各元件都功能正常後,並先看完本說明後,再開始組裝。

如果不希望壓克力上沾染到指紋,建議可以戴著手套組裝。

壓克力邊緣可能有點銳利,請注意安全。

 

開始組裝

1. 取出Wio Terminal 開發板,先接上兩條Grove訊號線。

2. 撕掉壓克力背板上的保護膜(如果有的話)

3.先穿線,再鎖螺絲:

將Grove訊號線穿過壓克力背板上的線孔,再取出螺絲M2x8兩隻,將Wio Terminal 開發板固定在壓克力背板上。

4.固定風扇:

風扇裝在壓克力板的內側(未來會在鼻子內),風扇有貼紙的那朝向外側,取出螺絲M2x15 X4個以及螺帽M2 X4個,我覺得用4.0的套筒比較容易鎖緊。

5.裝上Grove –多通道氣體感測器 V2 與Grove – MOSFET。

注意位置,Wio Terminal的兩個Grove連接埠功能不同,Grove –多通道氣體感測器 V2要接有I2C功能的那一側。

圖片來源:Get Started with Wio Terminal

這張照片是從背面拍的,注意感測器位置。

 

6.將風扇電源線接上Grove–MOSFET模組

先用一字起子把端子頭鬆開後,將風扇的紅色線接入OUT端,黑色線接GND端,再將端子頭鎖緊。

7.以杜邦公接頭轉歐式端子線,連接Wio Terminal 開發板Grove–MOSFET模組

杜邦公接頭接Wio Terminal 開發板的5V②,歐式端子這邊接Grove–MOSFET模組的端子台”+”端,另一條從Wio Terminal的GND⑥,接到端子台的”-”端。

圖片來源:Get Started with Wio Terminal

 

8.放置Grove–多通道氣體感測器於鼻腔

中間有個專屬空間給Grove–多通道氣體感測器。

9.鎖上壓克力背板

將線路與Grove–MOSFET模組放入其中適當的位置後,以螺絲M3x8固定壓克力背板。由於壓克力背板與光固化鼻子上的孔可能會有一些誤差存在,建議四顆螺絲先鎖一半,等位置差不多確定後再將四顆螺絲轉緊。

10.完工

這邊下載原作者Benjamin Cabé的範例程式:https://github.com/kartben/artificial-nose/releases

由於原廠附贈的Type-C USB線,並不是那麼適合這個模型,建議您可以準備90∘彎頭的Type-C USB線來使用。

 

 

參考資料:

相關文章:

 

 

 

Edge Impulse 的 WebUSB 連線功能,簡單又方便!

$
0
0

前言

先前 Wio Terminal 相關文章 已經介紹過如何在命令列介面(Command-Line Interface,縮寫:CLI)中操作 Edge Impulse (本文後簡稱EI) 的 data forwarder 指令,搭配 Seeed 所提供的  wio-terminal-ei-1.4.0.uf2 韌體,讓 Wio Terminal 開發板 (或其他 EI 支援的板子) 可以藉由電腦直接將開發板數值傳上 EI 的指定專案中。 。   

但這樣的做法除了需要額外安裝 Node.js 之外 也有遇到會因為相容性問題或是沒有安裝某些程式因此無法正常的連上edge impulse的狀況,且每次要上傳資料都須打開命令提示字元(CMD)輸入指令才能操作。為此,EI 提出了更簡易方便的連線方式:WebUSB。

註:使用此方式仍需完成 Arduino IDE 設定並將 wio-terminal-ei-1.4.0.uf2 燒錄至 wio terminal,請參考相關文章 

撰寫/攝影 邱柏憲
時間 0.5 小時 (包含 Arduino IDE 下載與設定)   材料表
  • Wio Terminal 開發板
  • PC – 可用  type-C USB線連接 Wio Terminal,並具備網路功能連上 Edge Impulse 網站
難度 1(滿分5)

使用 Edge Impulse 的WebUSB功能來連接 Wio Terminal

註冊與登入 EI 的方式在先前的文章已經說明,在此不再贅述,也歡迎看看阿吉老師的 Wio Terminal X TinyML 系列影片,帶您輕鬆完成一個光感測器手勢辨識專案!

   

OK,開始吧,請進入你的 EI 專案,進入 Data acquisition 畫面中,並在畫面右側黑框有個 Connect using WebUSB 的按鈕。

 

點下去後會跳出 [網站要求與序列埠連線] 的請求,並列出可用的 COM 裝置。如果沒跳出有可能是瀏覽器將跳出視窗封鎖了,須將其解除。順利的話會看到以下畫面,點選您的 Wio Terminal,最後按下 [連線]如果電腦上連接了多個COM裝置,畫面中就會出現多個裝置可選擇。萬一沒有找到你的 wio,代表未成功安裝 Wio Terminal的驅動程式,請參考本文完成 Wio Terminal 的 Ardiuno IDE 設定。

 

 

如果點選連線後跳出以下錯誤視窗,有以下幾個可能性。

  1. Wio Terminal未燒錄wio-terminal-ei-1.4.0.uf2 韌體檔,請參考之前的文章
  2. 檢查其他的應用程式有沒有佔據USB連線的通道。Arduino IDE 在正式發布 Arduino 2.0.0時,j我們從發現只要開啟Arduino IDE 它就會自動與 Wio Terminal 進行 USB通訊,因而發生錯誤。請把 Arduino IDE  更新成2.0.0後或後退到 1.x.x 版本應該就能解決這個問題。但不排除其他的應用程式也有可能造成此問題。可以藉由關閉可疑應用程式後重新插拔USB再試一次
  3. 點選其他 project 並且已連線,直接關閉其他project的頁面即可斷開連結

完成!可以看到 Device 欄位已成功帶出您的 Wio Terminal 裝置ID,並可由 Sensor 下拉選單中看到多款 Grove 感測器 (這是 wio-terminal-ei-1.4.0.uf2 韌體的功能,方便我們快速取得所要的感測器資料) ,請根據您所使用的感測器來正確選擇,接著就可以點選 Start sampling 來順利開始抽樣。

【AI人工智慧-神經網路運算】環境建置:安裝Anaconda、JupyterNotebook(Windows篇)

$
0
0

在先前Lobe AI的文章當中(連結),我們使用Lobe AI軟體進行監督式學習來建立影像分類專案,並將訓練後的模型檔案以知名的機器學習框架TensorFlow Lite的格式匯出,接下來我們要把匯出的神經網路檔案來進一步的應用。

本次使用Python程式來執行,為了讓我們的電腦可以在離線(不需要網路連線)的狀態下(邊緣運算經常面臨的情境)進行神經網路推論。

本篇文章會先教導如何安裝虛擬環境。

 

作者/攝影 CAVEDU教育團隊 徐豐智/Jack
文章分類 教學技術文
時間 30分鐘
成本 電腦
難度 **
材料表 Windows10作業系統

 

安裝虛擬環境

 

為何要安裝虛擬環境?

在開發應用程式時都需要在電腦上進行測試,包含手機App使用機器學習模型時,也會用到某些特殊的開發環境來測試。

為了讓機器學習模型可以被順利使用,我們必須安裝相關的套件,套件數量可能是數個到數十個。但在安裝程式套件時,在不同專案上常常發生套件版本的相容性問題。即使是相同的套件A、B、C,在專案X上會有一套套件的版本配對,專案Y則是另一套版本配對。

當專案Y執行失敗時,往往是使用不同的套件版本,或者是新安裝的套件D、F,與前一個專案的套件產生衝突而失敗。

在電腦或筆電中兩個專案產生衝突的常見情形

 

如果在電腦中安裝不同的虛擬環境X、虛擬環境Y後,就可以防止專案X與專案Y之間的套件因版本等相關問題產生衝突,並讓各個專案都能順利執行。

 

 

架設虛擬環境特點

  • 不同的虛擬環境所安裝的套件程式,彼此不會產生相依性衝突
  • 不同的虛擬環境即便安裝相同的套件程式,但彼此不會共用,因此會占用較多的儲存空間。
  • 在不同的虛擬環境開發下的程式,專案可能無法互通運作。
  • 「虛擬環境」有別於「虛擬機器」:
    虛擬環境是在一個作業系統中切分出不同的專案執行環境。
    虛擬機器是在一個電腦硬體設備中,同時執行兩種以上的作業系統。

 

接下來的安裝操作,我們將以Windows作業系統為例,檢查電腦作業系統類型 – 64位元 / X64處理器

  • [開始]點選右鍵-->[系統]-->查看[系統類型]

 

安裝虛擬環境,首先請到以下網頁下載Anaconda軟體:

 

在<Download>的選項中,有Windows、MacOS、Linux三種作業系統可供選擇,請根據你所使用的電腦作業系統來下載並安裝:

 

安裝選項1,選擇<Just Me(recommond)>

 

選擇安裝路徑,以Windows作業系統為例,預設安裝路徑為C:\Users\user\anaconda3,接著選擇<Register Anaconda3 as my default Python3.8>之後點選<Install>

 

繼續點選<Next>,最後點選<Finish>完成軟體安裝。

 

軟體安裝完畢後,點選電腦畫面下角的<Windows>符號,會多出一個<Anaconda3(64-bit)>的資料夾,其中包含了Anaconda建立的各項功能。以下圖為例,可以看到各個軟體名稱後方都有標記如(Anaconda3)、(testAI)、(try_AI)等名稱,這代表這台電腦的使用者已經建立三個不同的虛擬環境。後續要執行專案時,只要點選其中一個環境(try_AI),就不會與(Anaconda3)、(testAI)環境的套件發生衝突。

接下來我們將建立一個新的虛擬環境(try_AI),請點選<Anaconda Navigator (Anaconda3)>。

 

建立jupyterNotebook虛擬環境(try_AI)

請點選<Anaconda Navigator (Anaconda3)>後,會進入到Anaconda軟體操作畫面,請點選<Environments>-->在<Name:>欄位中輸入你喜歡的虛擬環境名稱,在此使用try_AI。

接著選擇Python套件版本3.7.X(只要是符合3.7版即可),最後點選<Create>後,等待環境建立完畢後即可。

 

接著安裝JupyterNotebook套件。點選<HOME>,選擇上一步所虛擬環境<try_AI> -->點選JupyterNotebook<install>,安裝完畢即可。

 

接著要建立一個名為<example_AI>的資料夾,裡面會放專屬於try_AI虛擬環境的範例程式。

點選<本機磁碟>-->點選<使用者>-->在使用者資料夾中,點選使用者帳號資料夾(使用者資料夾點選後,會以該電腦登入的帳號名稱來顯示,以下圖為例,使用該電腦中的storm使用者的資料夾,每一台電腦的帳號名稱不一定相同),新增<example_AI>資料夾。

 

進入 try_AI 虛擬環境的Jupyter Notebook。

點選<Home>-->選擇虛擬環境<try_AI>-->選擇JupyterNoteBook<Launch>後。在網頁瀏覽器中開啟JupyterNoteBook使用介面。

 

將各個課程中,提供的相關套件版本檔案Install_Dependency.ipynb,放入<example_AI>資料夾,在瀏覽器的JupyterNoteBook中,開啟安裝套件程式程式Install_Dependency.ipynb。

(依照各課程不同需求,套件版本與套件使用不一定相同,以當次上課提供的Install_Dependency.ipynb為主)

 

開啟Install_Dependency.ipynb的畫面如下,下方的程式區塊中已包含安裝相關軟體套件的指令。

點選<Run>,等待下列套件安裝完畢後,即可執行後續的範例程式。

 

 

 

 

 

 

Edge Impulse 小技巧 – Crop sample(裁剪)與 Split sample(分割)

$
0
0

前言

在使用 Edge Impulse 來建立感測器資料集時,以往的做法是建議您一次上傳一筆長度為1秒鐘的資料,但這樣反覆操作下來實在有點煩,有沒有更方便的操作方式呢?有!本文將為您介紹如何一次上傳較長秒數的資料,再從 Edge Impulse (本文後簡稱 EI) 中來裁剪 (crop ) 或分割 (split)。

撰寫/攝影 邱柏憲
時間 0.5 小時 (包含 Arduino IDE 下載與設定)   材料表
  • Wio Terminal 開發板
  • PC – 可用  type-C USB線連接 Wio Terminal,並具備網路功能連上 Edge Impulse 網站
難度 1(滿分5)

使用 Edge Impulse 來裁剪與分割資料

註冊與登入 EI 的方式在先前的文章已經說明,在此不再贅述,也歡迎看看阿吉老師的 Wio Terminal X TinyML 系列影片,帶您輕鬆完成一個光感測器手勢辨識專案!

   

以加速度感測器為例,下圖是一筆長度為10秒 (100 Hz,總共 1000 筆特徵點) 的加速度感測器資料,定義 label 為 Shake。

由於一開始開發板是靜置於桌面,因此加速度沒有明顯變化,三秒左右才開始搖晃,如果直接把這資料拿去訓練 , 或許前面靜止的部分會被神經網路視為特徵點而影響模型辨識。

這時候就可以用到 EI 中的內建功能:Crop sample(切除範例)和 Split sample(分割範例) 

 

 

在 EI 左側的 Data Acquisition 標籤中,這裡會看到您已經上傳的所有資料。每一筆資料的最右端會有三個點,點擊後會出現一串選項,其中有本文要介紹的 Crop sample (裁剪樣本)Split sample (分割樣本) 等兩個功能,接下來將分段說明 。

裁剪樣本

Crop Sample 是捨棄選取範圍之外的資料,選擇 windows 大小時會在右上角看到其時間長度(單位為毫秒)。請注意這個數字請與後續的推論時間相符,因此建議都選定為 1000 ms,這也是 TinyML 專題常見的設定。點選右下 Crop 之後就裁剪完成。別擔心,後續還是可以回溯到最初的未修改狀態。

 

分割樣本

Split sample 是將一筆時間長度較長的資料分為多筆相同長度的資料,但原始資料在分割之後就無法再回復成原始資料。

請在 Split 畫面中點選左上角的 Add Segment 來新增多個 window,彼此可以重疊也可以調整 window 寬度。首次進入時,EI 會自動判斷哪些段的資料是值得被留下來的,如下圖有四個 window。

按下 Split 之後就會把這筆資料分割成多筆小片段,可由分割後的時間長度來判斷。

透過這兩個功能,您可以將比較明顯的加速度值改變的位置以週期為單位框取並分割。這樣就能收集一筆時間較長的資料再分割,也可以手動檢查資料來裁剪,避免多餘或錯誤的資料來影響神經網路訓練結果。

對於AI而言,資料集品質的重要性應該不需要再強調了吧?高品質的訓練資料最終才能產生好的模型。希望以上的教學可以讓各位在收集資料方面更方便快速,最後祝大家都能成功訓練出自己所要的模型!

 

NVIDIA® Jetson AGX Orin™ 在安裝ROS2使用ZED景深攝影機

$
0
0

前言

前一篇文章已經介紹了在 Jetson AGX Orin™ 上安裝 ROS 機器人作業系統,本文要介紹如何在Jetson AGX Orin™ 上安裝 ROS2 以及如何執行 ZED 景深攝影機的 ROS2 範例 – 使用其景深影像來進行物件偵測。

注意:執行ZED範例時建議要連上實體螢幕才可開啟畫面,使用SSH遠端連線時可能會有無法顯示畫面的情況發生。

撰寫/攝影 郭俊廷
時間 1 ~ 1.5 小時  材料表
難度 3(滿分5)

 

本文

開始吧,請根據以下步驟來操作

1.安裝ZED SDK

首先一樣先需要在 Jetson AGX Orin 上安裝 ZED SDK,您的 Orin 必須先安裝搭配 NVIDIA Jetpack 5.0最新版本的 ZED SDK,才能接續安裝 ROS 或 ROS2。請點我下載 ZED SDK

開啟終端機並輸入以下指令 ($  代表本指令輸入於終端機,並非指令本身):

$ chmod +x ZED_SDK_Tegra_L4T<os_ver>_v<sdk_ver>.run

$ ./ZED_SDK_Tegra_L4T<os_ver>_v<sdk_ver>.run

請將上述指令的 <os_ver><sdk_ver> 換成與您所下載的檔案檔名對應。

本步驟完成之後就可以來安裝 ROS2了。本文所要安裝的ROS2版本是Foxy Fitzroy細節請參考  ROS 官方網站

2. 安裝ROS2 Foxy Fitzroy

2.1 設定語系

請輸入以下指令來確認語系,如果之前安裝系統時選擇中文語系,需更改為英文

$ locale

安裝英文語系

$ sudo apt update && sudo apt install locales
$ sudo locale-gen en_US en_US.UTF-8
$ sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
$ export LANG=en_US.UTF-8

確認更改後的設定如果順利設定英文語系會如下圖

$ locale

2.2 將 ROS2 加入 APT 來源

$ sudo apt update && sudo apt install curl gnupg2 lsb-release

$ sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

# 更新 APT 來源
$ sudo apt update

如果更新後出現CUDA版本錯誤,請執行以下指令來修復

$ sudo apt --fix-broken install -o Dpkg::Options::="--force-overwrite"

接著安裝 ROS2,根據網路連線狀況需要一點時間來下載並建置

$ sudo apt install ros-foxy-ros-base

# 將設定加入環境變數
$ echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc

#套用環境變數設定
$ source ~/.bashrc

# 安裝相依套件
$ sudo apt update && sudo apt install -y build-essential cmake git libbullet-dev python3-colcon-common-extensions python3-flake8 python3-pip python3-pytest-cov python3-rosdep python3-setuptools python3-vcstool wget

完成,請用以下指令來初始化 ROSDEP

$ sudo rosdep init
$ rosdep update

如果出現以下訊息代表初始化成功

3 安裝 ZED ROS2 WRAPPER

3.1 安裝ZED ROS2的相關套件

建立 ROS2 工作區及複製原始碼

$ mkdir -p ~/ros2_ws/src
$ cd ~/ros2_ws/src/
$ git clone --recursive https://github.com/stereolabs/zed-ros2-wrapper.git
4 cd ../

3.2 確認相依套件及安裝

$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args=-DCMAKE_BUILD_TYPE=Release
$ echo source $(pwd)/install/local_setup.bash >> ~/.bashrc
$ source ~/.bashrc

4.安裝 ZED 範例

複製原始碼

$ cd ~/ros2_ws/src/
$ git clone https://github.com/stereolabs/zed-ros2-examples.git
$ cd ../

確認相依套件及安裝

$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args=-DCMAKE_BUILD_TYPE=Release
$ source ~/.bashrc

5.執行範例

ROS2 會用一個節點來執行一個功能,如果要開啟範例可能必須開啟多個節點(也就是多個終端機)。本文的範例是開啟ROS2常用的 rviz2 來顯示 ZED 的景深畫面。

首先開啟 zed_wrapper,負責傳送及處理影像

ros2 launch zed_wrapper zed2i.launch.py

接著開啟另外一個終端機,開啟 zed_display_rviz2 ,負責顯示接收到的影像

$ ros2 launch zed_display_rviz2 display_zed2i.launch.py

執行完上述指令之後就會開啟 rviz2 介面,並可看到 ZED 景深攝影機的即時畫面

如果要執行物件偵測範例,請開啟以下路徑的檔案並修改內容 ~/ros2_ws/src/zed-ros2-wrapper/zed_wrapper/config/common.yaml。將其中的 object_detection - od_enabled 設為 true, 如下圖 (預設為 false )

開啟 zed_wrapper,負責傳送及處理影像

$ ros2 launch zed_wrapper zed2i.launch.py

開啟另外一個終端機並輸入以下指令

$ ros2 launch zed_display_rviz2 display_zed2i.launch.py

就會出現如下 rviz2 畫面,並把偵測到的物體以 3D box 框起來:

以上 ZED 景深攝影機的 ROS2 範例,希望大家都能順利執行,希望您喜歡我們的文章喔!

 

Google Teachable Machine 聲音分類結合 Linkit 7697,拍手彈指都聽得懂

$
0
0

前言

已過我們寫了非常多關於 Google Teachable Machine 的影像分類應用,本文將說明如何使用 Google Teachable Machine 的聲音分類 (audio classification) 訓練工具,讓你的電腦能夠辨識不同的聲音,並藉此觸發 LinkIt 7697 開發板執行對應的動作。

相同的架構搬到 Raspberry Pi, Jetson Nano 上也可直接執行,歡迎玩玩看喔!也可以改用 Wio Terminal 搭配 Edge Impulse 來進行聲音分類,但後者與本篇所說的做法不一樣。

本文

操作 Google Teachable Machine 聲音分類

作為 coding-free tool,Google Teachable Machine (本文後簡稱 TM) 這幾年的能見度相當高,讓您輕鬆完成神經網路視覺辨識中最麻煩的幾件事:環境建置、訓練與匯出模型檔。您只要對自己所要分類的資料有一定的掌握度,都可以做出不錯的專案。當然,免費工具一定有其限制,因此 TM 或Microsoft LOBE.ai(相關文章請點我) 目前都只提供了影像分類,如果要進一步到物件偵測或影像分割的話,就需要另外找合適的工具了。

TM 目前提供了三種不同的AI應用,分別是影像分類專案(Image Project)、聲音辨識專案(Audio Project) 與身體姿態辨識專案(Pose Project),因此屬於「監督式學習Supervised learning」,針對不同的情境提供了Tensorflow、Tensorflow.js與Tensorflow Lite三種模型格式,可供後續製作各種離線推論,或放到 Raspberry Pi / Jetson nano / Arduino Sense 33 等裝置來實現邊緣運算。

每個專案都被設計成三個步驟,分別是 收集(Gather)、訓練(Train) 與匯出(Export)

收集資料

進入 TM 網站之後,點選 Get started 開始專案,並選擇 Audio Project。根據其說明,會使用長度為1秒鐘的聲音檔來訓練。

 

主要操作頁面分成三大區塊,分別就是上面所說 收集(Gather)、訓練(Train)、即時預覽(Preview)功能和匯出模型(Export Model)。可想而知,您會在收集資料這一段花費相當的時間,但模型成效與資料集品質有直接相關,所以在此多花一點時間整理出很好的資料集是絕對值得的!

以收集背景雜音(Background Noise)來示範,TM 要求至少要有 20 筆資料 (也就是 20 秒),請點選 Record 之後開始錄音 (下圖左),完成之後再點選 Extract Sample 會自動分割成 20 筆長度為1秒鐘的資料。其餘各聲音類別則是至少 8 筆資料,否則無法訓練。為避免錄音上的操作失誤,TM 讓你一次錄 2 秒但之後還是會切成長度 1 秒的聲音檔,這與神經網路的設定有關。

既然都是 Google 的服務,您可以把進行中的專案存檔到 Google Drive,或載入先前未完成的專案來繼續操作,非常方便

訓練

按下畫面中央的 Train 即可訓練,這也是 TM 最貼心的地方吧,馬上就可以看到成果了。完成之後,就會立刻透過麥克風來連續辨識聲音,讓您看看訓練的成果,可以調整 overlap factor (概念類似 sliding window)。如果有某個類別的表現不如預期,請回頭加入更多資料來重新訓練,也請注意各類別中樣本數須保持平衡,也就是數量不可相差太多。

辨識為 “sorry”
辨識為 “snap”,但信心不高

匯出 tensoflow lite 模型檔

如果您滿意本次的訓練結果的話,就可以匯出模型檔了。點選右上角的 Export 就會看到以下畫面,點選 Tensorflow Lite 再點選 Download my model 就會下載模型 .zip 檔,解壓縮之後會有一個 model.tflte  與 labels.txt,後續執行 python 檔時就會用到

如果不滿意,請加入更多聲音樣本,或由朋友來幫你錄製來增加資料的多元性。

使用 Netron 來檢視神經網路架構

在此可用 Netron 來檢視神經網路架構,請開啟 Netron 網站之後上傳 model.tflite 即可看到下圖,

由此可知,即便是免費的神經網路工具,Google 還是用很優秀的架構來處理。有興趣的進階使用者可以試試看修改神經網路架構讓效能更好。

點選某一層可在畫面右側看到該層的細節參數

 


執行

請根據本文設定好環境之後,請開啟 anaconda prompt 執行以下指令,並確定所有檔案都位於同一個資料夾下,否則會找不到檔案。

python TM2_tflite_audio.py --model model.tflite --labels labels.txt

執行畫面如下,可以看到每次辨識的結果與信心指數,例如 1 Clapping 0.99667513

本程式使用 tensorflow 2.7.0版,如果您執行上出現問題,請使用以下指令來安裝 tensorflow:

pip install tensorflow==2.7.0

python程式碼

python 程式碼會根據  TM 所匯出的聲音分類模型(model.tflite)與標籤 (labels.txt) 來對麥克風所收到的聲音進行推論,並把推論結果顯示在 console。

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

# Imports
# from tflite_support.task import audio
# from tflite_support.task import core
# from tflite_support.task import processor

import argparse
import serial
import io
import time
import numpy as np
import cv2
import tensorflow as tf
import pyaudio
import wave

# from tflite_support.task import audio
# from tflite_support.task import core
# from tflite_support.task import processor
#import tensorflow as tf

from PIL import Image
# from tf.lite.interpreter import Interpreter

def load_labels(path):
  with open(path, 'r') as f:
    return {i: line.strip() for i, line in enumerate(f.readlines())}

def set_input_tensor(interpreter, image):
  tensor_index = interpreter.get_input_details()[0]['index']
  input_tensor = interpreter.tensor(tensor_index)()[0]
  input_tensor[:] = image

def main():
  BAUD_RATES = 9600
  # 修改實際的 com port
  ser = serial.Serial('com7', BAUD_RATES)
  while (True):
    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument(
        '--model', help='File path of .tflite file.', required=True)
    parser.add_argument(
        '--labels', help='File path of labels file.', required=True)
    args = parser.parse_args()
  
    labels = load_labels(args.labels)
  

    interpreter = tf.lite.Interpreter(args.model)
    # interpreter = Interpreter(args.model)
    
    interpreter.allocate_tensors()
    a = interpreter.get_input_details()[0]['shape']
    print(a)
    getaudio()
    x = np.fromfile(open('output.wav'),np.int32)[11:]

    # x[0, 0] = np.fromfile(open('output.wav'),np.int16)[22:]

    # for i in range(44032):
    #   x[0, i] = np.fromfile(open('output.wav'),np.int16)[22:][i]

    print(x.shape)
    results = classify_audio(interpreter, x)

    label_id, prob = results[0]
    print(labels[label_id],prob)

    if (labels[label_id]=='0 Background Noise') :
      ser.write(b'command_1\n')  # 訊息必須是位元組類型
      # time.sleep(0.5)           # 暫停0.5秒,再執行底下接收回應訊息的迴圈

    elif (labels[label_id]=='1 Clapping') :
      ser.write(b'command_2\n')  # 訊息必須是位元組類型
      # time.sleep(0.5)           # 暫停0.5秒,再執行底下接收回應訊息的迴圈

    elif (labels[label_id]=='2 Snapping') :
      ser.write(b'command_3\n')  # 訊息必須是位元組類型
      # time.sleep(0.5)           # 暫停0.5秒,再執行底下接收回應訊息的迴圈
    elif (labels[label_id]=='3 Sorry') :
      ser.write(b'command_4\n')  # 訊息必須是位元組類型
      # time.sleep(0.5)           # 暫停0.5秒,再執行底下接收回應訊息的迴圈
    time.sleep(2)
   
def classify_audio(interpreter, image, top_k=1):
  """Returns a sorted array of classification results."""
  set_input_tensor(interpreter, image)
  interpreter.invoke()
  output_details = interpreter.get_output_details()[0]
  output = np.squeeze(interpreter.get_tensor(output_details['index']))

  # If the model is quantized (uint8 data), then dequantize the results
  if output_details['dtype'] == np.uint8:
    scale, zero_point = output_details['quantization']
    output = scale * (output - zero_point)

  ordered = np.argpartition(-output, top_k)
  return [(i, output[i]) for i in ordered[:top_k]]

def getaudio():
  p = pyaudio.PyAudio()

  CHANNELS = 1
  FORMAT = pyaudio.paInt16
  CHUNK = 1024
  RATE = 44100
  p = pyaudio.PyAudio()

  stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                frames_per_buffer=CHUNK)

  #print("Start recording!")

  frames = []
  seconds = 2
  for i in range (0, int(RATE/CHUNK*seconds)):
    data = stream.read(CHUNK)
    frames.append(data)

  #print("Stop recording.")
  stream.stop_stream()
  stream.close()

  p.terminate()

  wf = wave.open("output.wav", 'wb')
  wf.setnchannels(CHANNELS)
  wf.setsampwidth(p.get_sample_size(FORMAT))
  wf.setframerate(RATE)
  wf.writeframes(b''.join(frames))
  wf.close()

main()

Arduino 程式碼

在此使用 LinkIt 7697 來執行,透過序列埠接收到訊息之後執行對應的動作。您可以自由修改要做哪些事情,完成您專屬的聲音辨識系統!

#define LED_1_pin 2
#define LED_2_pin 3
#define LED_3_pin 4

String str;

void setup(void)  
{
  Serial.begin(9600);

  // init pin states
  pinMode(LED_1_pin, OUTPUT);
  digitalWrite(LED_1_pin,LOW);
  pinMode(LED_2_pin, OUTPUT);
  digitalWrite(LED_2_pin,LOW);
  pinMode(LED_3_pin, OUTPUT);
  digitalWrite(LED_3_pin,LOW);

}

void loop(void)  
{
  int i;
  
  if (Serial.available()) {
    // 讀取傳入的字串直到"\n"結尾
    str = Serial.readStringUntil('\n');

    if (str == "command_1") {     // 若字串值是 "command_1" 燈號OX
      digitalWrite(LED_1_pin,HIGH);
      digitalWrite(LED_2_pin,LOW);
      digitalWrite(LED_3_pin,LOW);

      Serial.println("command_1"); 
    } 
    else if (str == "command_2") {  // 若字串值是 "command_2" 燈號XO
      digitalWrite(LED_1_pin,LOW);
      digitalWrite(LED_2_pin,HIGH);
      digitalWrite(LED_3_pin,LOW);

      Serial.println("command_2");
    } 
    else if (str == "command_3" ) { // 若字串值是 "command_3" 燈號XX
      digitalWrite(LED_1_pin,LOW);  
      digitalWrite(LED_2_pin,LOW);
      digitalWrite(LED_3_pin,HIGH);

      Serial.println("command_3");
    }
    else if (str == "command_4" ) { // 若字串值是 "command_3" 燈號XX
      digitalWrite(LED_1_pin,HIGH);  
      digitalWrite(LED_2_pin,HIGH);
      digitalWrite(LED_3_pin,HIGH);

      Serial.println("command_4");
    }
  }
}
Linkit 7697 code

 

執行


EDIMAX AC1200 雙頻無線網路卡在 NVIDIA Jetson 系列相關載板安裝教學

$
0
0

前言

之前我們是在 NVIDIA Jetson 系列單板電腦搭配 TP-Link Archer T2U Plus AC600 無線網路卡來連上網路 (安裝教學請點我),換成了EDIMAX AC1200 雙頻長距離 USB 3.0 無線網路卡。由於這款網路卡在各版本的 JetPack 都無內建驅動,需要另外安裝。本文將介紹如何安裝驅動。經過測試,目前成功安裝驅動的 JetPack 版本為 JetPack4.3 以上皆可使用。

撰寫/攝影 郭俊廷
時間 1小時   材料表
難度 1(滿分5)

 

本文

EDIMAX AC1200 雙頻長距離USB 3.0無線網路卡的外型如下圖

由於 EDIMAX AC1200 以及 ASUS AC53 Nano 皆是使用 RTL8812BU或RTL8822BU通訊晶片,經過測試都可使用這款驅動,其他支援的網卡清單請參考其github:https://github.com/morrownr/88x2bu-20210702

安裝EDIMAX AC1200驅動

可以先使用電腦下載以下驅動檔案,解壓縮後使用。或使用有線網路透過git指令下載此驅動安裝檔,並且重新開機才可使用,安裝指令如下:

驅動檔案下載連結:
https://www.dropbox.com/s/pec0gx4xvo3iy23/88x2bu-20210702.zip?dl=0

以下指令需要有網路才可執行,請先將您的 Jetson 系列載板使用有線網路或其他網卡連上網路再執行(如果您是和我們購買的話,出貨時都會安裝並測試好喔!)

sudo apt install -y dkms git build-essential
git clone https://github.com/morrownr/88x2bu-20210702.git
cd ~/88x2bu-20210702
./ARM64_RPI.sh
sudo ./install-driver.sh

安裝指令說明,對應上述步驟:

  • 首先下載 dkms git 等相關套件

sudo apt install -y dkms git build-essential

  • 使用 git 指令下載此驅動檔案

git clone https://github.com/morrownr/88x2bu-20210702.git

  • 移動到驅動資料夾,並將驅動安裝檔設定為ARM架構安裝模式,這一步很重要,沒有設定就會安裝失敗。

cd ~/88x2bu-20210702

./ARM64_RPI.sh

  • 最後一個指令就是安裝驅動的指令,需要輸入使用者密碼才能執行,會根據您的載板來決定安裝速度,Jetson Nano 會安裝得比較久,需要稍等一下,安裝的過程如下圖。

sudo ./install-driver.sh

看到以下畫面就裝好了,接著會詢問是否要編輯驅動相關設定,我們使用預設設定所以輸入N,會再詢問你是否要重新開機,輸入y,即可重新開機。重新開機後,網卡就可以正常運作了。

參考資料與相關文章

  • https://github.com/morrownr/88x2bu-20210702
  • https://blog.cavedu.com/2021/05/13/tp-link-archer-t2u-plus-ac600/
  • https://blog.cavedu.com/2021/05/04/jetson-nano-wi-fi-dongle/

 

 

RK 水質監測系統使用說明 – Raspberry Pi 為核心的物聯網系統

$
0
0

前言

本篇要來介紹的是由本公司所研發的RK水質監測系統,具有以下功能:

  • ● 測量液體水濁度
    ● 測量液體酸鹼值
    ● 測量液體溶氧量
    ● 測量液體導電度
    ● 測量液體溫度
    ● 可將數值上傳至雲端的Google 試算表中,也可儲存於本機端檔案
撰寫/攝影 許鈺莨
時間 2小時   材料表
  • Raspberry Pi 4
  • 詳洽 servicerobotkingdom.com.tw 或致電(02) 2306-2900
難度 2.5(滿分5)

本文

本文將介紹RK水質監測系統的組成、使用方法、好用的圖形化介面,以及我們錄製好的教學影片。

RK水質監測系統有哪些感測器

本系統由下列感測器組成:

  • Gravity: 類比式水濁度感測器
  • Gravity: 類比式酸鹼值感測器
  • Gravity: 類比式溶氧量感測器
  • Gravity: 類比式導電度感測器
  • Gravity: 土壤溫溼度感測器
  • 防水溫度感測器

以下是所有感測模組的成品介紹

壓克力盒中就類似RK水質感測系統的大腦,盒中紅色開發板為Arduino,綠色開發板為樹莓派,系統架構圖如下圖所示。

本系統是由Arduino來收集各個感測器的數值,再將數值傳送到樹莓派,而數值的呈現方式則是由數莓派的圖形化介面來呈現。

RK水質監測系統使用方法

操作本水質監測系統時,須將樹莓派主機接上螢幕、鍵盤、滑鼠來使用,開機後樹莓派桌面會看見RK水質監測系統的icon圖示(如上圖紅框處)。

點選兩下後,按在終端機執行可開啟程式。

點選兩下後,選擇 在終端機執行 可開啟程式。

實體展示畫面如下:

上圖使用了土壤感測器插入盆栽中、防水溫度計測汙水溫度、水濁度感測器測汙水濁度、導電度感測器測清水導電度的情境,可以知道當時的土壤乾濕為 極潮濕、攝氏溫度為 22.5 度、液體濁度為 526.05 NTU、液電導率為 27.22 ms/cm。

RK水質監測系統圖形化介面功能介紹

本段說明本系統之介面功能

即時顯示感測器資料

在介面中可以得知目前的日期與時間,以及感測器的數值,以下為感測器名稱,與感測器之測量數值範圍。


感測器數值上傳至雲端

本系統可將感測器數值上傳到雲端Google試算表,但需要申請 FTTT帳號去得到 IFTTT Event name和Webhook Key。相關文章請點我

 

感測器資料儲存在本機端

感測器數值資料除可上傳雲端外,也會一併將資料以 txt檔存在樹莓派本機端,如下圖:

最後實際展示導電度感測器校準和酸鹼值感測器校準影片,供各位讀者參考。

導電度感測器校準影片

酸鹼值感測器校準影片

 

本次開箱文就介紹到這邊,有興趣進一步了解或添購的讀者或學校單位,歡迎來信service@robotkingdom.com.tw,或致電 (02) 2306-2900。

 

[精彩直播片段] Tinker Board 2S 單板電腦 AIoT 應用 –藍牙通訊

$
0
0

前言

因著人工智慧物聯網(The Artificial Intelligence of Things ,AIOT)與工業物聯網(Industrial Internet of Things,IIOT)的應用快速發展,為了考量到物聯網的各個應用場景,和整體系統成本和效能,一直都是需考慮的重點,所以才有了各種嵌入式系統與微控器(MicroController Unit)之整合應用。本文將說明 ASUS Tinker 單板電腦與物聯網開發板的多種藍牙互動方式 (使用我們最熟悉的 LinkIt 7697)

撰寫/攝影 許鈺莨
時間 1小時 (不包含 Tinker Board 燒錄開機 SD 卡時間)   材料表
難度 2(滿分5)

本文

嵌入式系統有很多平台,如:Raspberry Pi、Jetson nano或本篇文章主角—Tinker Board 2S,而MCU種類如 Arduino、LinkIt 7697、Raspberry Pi Pico…..等。而嵌入式系統和MCU之間的連結,主要是透過有線/無線通訊的方式進行(見下圖所示),而本篇就是為了解決有限距離的限制,將分享Tinker Board 2S支援藍牙通訊方式,以控制LinkIt 7697來示範。

目前在嵌入式系統或MCU常見的區域型無線通訊方式,如下表大致可以區分成五大類:

目前MCU常見的藍牙通訊模組電路或設計大致上是以「HC05/ HC06系列的UART傳輸」或是「BLE系列的GATT傳輸」兩大類,本篇專案分享將會以「BLE系列的GATT傳輸」來控制LinkIt 7697 I/O:

直播專案分享

以下內容整理自 CAVEDU Jack 老師多年來使用 Tinker 的開發成果,本文將介紹如何操作  Tinker Board 的藍牙通訊功能來與 LinkIt 7697 開發板互動,繼續看下去吧。更多資訊請參考相關文章:http://blog.cavedu.com/?s=tinker

● Tinker Board 2S控制LinkIt 7697 RGB-LED燈

下表為LinkIt 7697 接收指令並藉此控制 RGB LED燈:

 

下圖左側為Tinker Board 2S控制紅燈亮/滅,中間為控制綠燈亮/滅,右側為控制藍燈亮/滅。

實際展示影片:

 

● Tinker Board 2S控制LinkIt 7697藍牙小車

另一個常見的應用則是透過藍牙來控制機器人,包括常見的輪型機器人或桌上型機器手臂。在此以輪型機器人(小車)來示範,控制方向可為前進、後退、左轉、右轉,並可以調整轉速,轉速數值範圍為0~255,下表為LinkIt 7697藍牙小車指令:

實際展示影片:

 

本篇內文是簡述 CAVEDU Jack老師的精彩直播片段,未來還會有更多的文章發表!誠摯歡迎您加入 CAVEDU LINE 社群,有第一手活動課程資訊、技術新知與好康特惠分享~

 

eCapture G53深度相機模組在 Jetson Xavier NX 安裝 ROS1 使用教學

$
0
0

前言

這次我們要介紹如何在Jetson系列安裝ROS1並且使用 eCapture G53 雙目3D深度相機模組 來顯示景深影像畫面。

撰寫/攝影 郭俊廷
時間 1小時 (不包含 Tinker Board 燒錄開機 SD 卡時間)   材料表
難度 2(滿分5)

本文

如果想在 NVIDIA Jetson 系列載板執行本文範例,需要在 Ubuntu 18.04上安裝 ROS Melodic。本文使用 RK-reComputer J2012 安裝 JetPack4.6 系統,當然也可以在RK-NVIDIA® Jetson Nano™ 開發者套件 B01安裝 JetPack4.6 系統使用。

先來看一下 G53雙目3D深度相機模組的外觀:

以下為鈺立微電子提供之資訊:
G53為全球體積最小的3D雙目視覺相機模組,模組尺寸僅5.0 (長) x1.5(寬) x2.0(高) 公分,特別適用於近距離、高精度的深度量測,提供公分等級的深度解析能力。深度感測鏡頭模組針對複雜光源進行了抗性設計,能有效濾除雜訊,應付室內光源的多樣性,搭載主動式IR點陣投影機,可產生高品質的深度資訊與點雲圖,利於實現高精度的電腦視覺應用。

G53 規格表如下:

本次教學文分為兩大部分,安裝 ROS Melodic 與安裝G53相關套件,完成之後就可以檢視景深影像了。

1.安裝ROS Melodic

我們要先安裝ROS Melodic,如果有安裝過的人可以跳過這一步。

首先,將 ROS加入 APT 來源 再加入KEY 並更新APT來源

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt-get update

接著安裝 ros-melodic 以及所需相關套件

sudo apt-get install ros-melodic-desktop-full
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-dev libusb-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev libjpeg9

初始化 ROSDEP (如果出現下圖 代表初始化成功)

sudo rosdep init
rosdep update

將設定加入環境變數並套用環境變數設定

echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc

測試是否成功安裝ros,使用以下指令,如果出現如下圖畫面代表安裝成功

roscore

2. 安裝G53相關套件

首先需要去以下網址下載最新版的安裝套件,並放在 Linux 系統的 /home 目錄:https://github.com/eYs3D/eys3d_ros/releases/

注意:v1.0.0.33版本以上才有支援Jetson系列載板(此文使用V1.0.0.34下載點如下圖紅框所示)

或用以下載點下載V1.0.0.34:
https://github.com/eYs3D/eys3d_ros/releases/download/v1.0.0.34/v1.0.0.34.tar.gz

如果是一般安裝好的ROS Melodic,在安裝G53相關套件時會出現opencv的錯誤,需要更改 ros 的 opencv 設定(如下圖所示的錯誤)

首先修改以下路徑的檔案
/opt/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.cmake

可以使用 nano 命令修改:

sudo nano /opt/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.cmake

將96行附近的opencv改成opencv4(如下圖紅框所示)

set(_include_dirs "include;/usr/include;/usr/include/opencv") 改成
set(_include_dirs "include;/usr/include;/usr/include/opencv4")

使用以下指令解壓縮後會看到出現一個eys3d_ros的資料夾:

tar zxvf v1.0.0.34.tar.gz

接著移動到以下資料夾進行編譯安裝的動作,如果都正常安裝會如下圖所示。

cd ~/eys3d_ros/eys3d_ros/eys3d_ros_ws/
catkin_make

回到上一層目錄執行啟動檔

cd ~/eys3d_ros/eys3d_ros/
source eys3d_ros_ws/devel/setup.bash
roslaunch dm_preview G53.launch

這時候就會開啟Rviz並顯示如下圖的景深影像畫面。

 

參考資料

  • https://github.com/eYs3D/eys3d_ros
  • https://www.tairos.tw/visitorExNewsDetail.asp?id=9620
  • https://www.ecapturecamera.com/g53

 

將學校花圃客製化改造成 IoT 智慧農業環境

$
0
0
撰寫/攝影 撰寫 許鈺莨 徐豐智 / 軟硬體整合 Jack / 實地安裝 皇甫
時間 軟硬體整合三周,實地測試花兩周 材料表 請洽詢機器人王國,

電話: (02)2306-2900

E-mail: service@robotkingdom.com.tw

成本
難度 ★★★★★

 

本次改造學校花圃的 IoT智慧農業專案使用國產的IoT裝置LinkIt7697,結合工業用傳輸的RS485感測器,將空氣/土壤的溫溼度以及電解數值資料透過雲端Google表單以及手機藍牙APP進行監測,手機藍牙可以即時遙控灑水,也可以在雲端中設定土讓濕度低於一定的範圍並進行自動灑水,落葉堆肥桶的落葉濕度,讓落葉推肥化更加效率,幫助學生對農業灌溉堆肥進行專題假設、觀察、實驗並調整

IoT智慧農業專案功能展示影片

 

以下介紹IoT智慧農業專案

一、系統組成及配置圖

IoT智慧農業由下列系統組成:

  • IoT雲端控制箱
  • 水管電磁閥控制箱
  • 自動保濕落葉堆肥桶
  • 自動澆灌灑水裝置

 

IoT雲端控制箱:

為整個系統的核心,箱內微控器LinkIt7697,負責處理

1、收集感測器模組的數值,透過藍牙連線至手機,並控制水管電磁閥門的運作。

2、收集感測器模組的數值,並透過網路上傳至雲端。

3、箱內可以透過LCD觀看目前感測器的數值以及網路連線等狀況。

 

 

在IoT雲端控制箱左側配置一支工業用空氣溫濕度感測器,負責收集空氣中的溫度與濕度資料:

 

水管電磁閥控制箱:

控制水管中的1號堆肥桶水閥門;2號堆肥桶水閥門以及花圃撒水的閥門。

 

自動保濕堆肥桶:

在堆肥桶1/堆肥桶2中,也都有RS485土壤感測器,偵測堆肥桶溫度、容水率及電導率,如下圖所示:

 

自動澆灌灑水裝置:

有RS485土壤感測器,偵測土壤溫度、容水率及電導率,電控灑水裝置則依照感測器數值/藍牙遙控/雲端設定進行灑水:

 

二、無線遙控

1.        藍牙無線操作

以下為手機藍牙的圖形化介面,可以即時監控花圃、推肥桶各個感測器的資料,進行遙控灑水。

專案名稱為”Smart Farm“,見下圖所示:

 

以下來介紹落葉堆肥桶灑水及花圃灑水的閥門控制

 

堆肥桶灑水電磁閥開關控制

落葉堆肥桶有許多的研究,落葉應當控制在何種濕度下才能快速轉換成天然肥料,

按下<堆肥桶1>/<堆肥桶2>下的<控閥1>/<控閥2>鍵,即可開啟堆肥桶灑水系統的電磁閥,再按一次即可關閉,如下圖所示:

 

堆肥桶灑水系統開啟的情形

 

花圃灑水電磁閥開關控制

按下花圃的控閥圃鍵,即可開啟花圃灑水系統的電磁閥,再按一次即可關閉,如下圖所示:

 

花圃灑水系統開啟的情形

 

1.        雲端資料顯示

IoT智慧農業雲端顯示資料,有以下三種訊息:

  • 學校花圃環境雲端資訊畫面
  • 智慧澆灌歷史資料
  • 監控參數設定

以下一一說明。

 

學校花圃環境雲端資訊畫面

即時記錄目前所有的數值訊息,及電磁閥狀態,資料一分鐘更新一次,如下圖所示:

 

 

 

智慧澆灌歷史資料

可查閱所有的數值訊息的歷史紀錄,可得知如花圃含水量及溫溼度的變化,更新資料時間可在監控參數設定雲端上設定,如下圖所示:

 

 

監控參數設定

可設定花圃、落葉堆肥桶之容水率數值及智慧澆灌歷史資料的上傳時間,以下圖為例,若花圃土壤容水率數值小於0.15及堆肥桶容水率數值小於0.07時,會開啟灑水的電磁閥。

 

智慧澆灌歷史資料為每15分鐘更新一次。

 

以上是關於本次應用於學校環境的客製化IoT裝置,謝謝大家觀看。

 

Viewing all 678 articles
Browse latest View live