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

【Makerpor】ESP32專欄 善用ESP32雙核心,平行處理提昇效能

$
0
0

ESP32是一款具有WiFi及低功率藍牙BLE的晶片,相容於Arduino架構,可使用Arduino IDE來開發,不僅程式與Arduino UNO幾乎相同,感測器也完全相容,因此非常適合用來取代現有國、高中UNO的教材。

作者 尤濬哲(夜市小霸王),本文經Makerpor同意轉載,原文連結
ESP32腳位定義圖

ESP32雖然擁有兩個核心,不過以平常Arduino的程式寫法都只會用到一個核心,這樣是不是很浪費?我們如何善用增加效能呢?或者如何使用平行處理呢?本篇文章將介紹ESP32的雙核心架構,並分為三個部份解說。

1. 多核心概念

我們常聽到說我的手機有4核心,電腦有8核心,所謂的多核心(Multi-core)簡單的說就是CPU能同時處理較多的任務且不會互相干擾;另外一種虛擬的多核心稱為多執行緒(Thread)則是CPU的分時多工,非本篇的討論範圍。由於ESP32有著240/160MHz的雙核心CPU,因此本篇將要說明是能將任務指定給核心執行的「xTaskCreatePinnedToCore」函數。

ESP32功能方塊圖中可看出它為雙核心架構(Source)

 

雙核心執行有什麼好處?例如可以增加效能,或者平行處理。舉例而言,我們有一個工作是要偵測現場溫濕度並上傳資料庫存檔,每20秒感測上傳一次,假定這項規定很嚴格,必須準時上傳不能有延遲,在以往程式的撰寫流程下,感測與網路上傳是寫在同一個程序內,也就是讀取溫濕度→上傳資料庫→等候20秒,但是上傳資料庫須看網路是否擁塞,假設上傳時間花了3秒,再加上等候20秒後,等於是23秒過了,長久下來就會延遲越來越多。

也許你會想說我們可以將等候時間改成17秒,這樣上傳時間3秒加起來剛好20秒,不過你也知道網路不是那麼好預估,有時候鄰居下載迷片,速度就慢了,而半夜時沒人速度又變得飛快,這樣我們總是沒辦法找到一個時間來補回。

而多核心在這裡就非常適用,也就是一個核心負責讀取溫濕度資料,另外一個核心則將資料送到資料庫,平行處理兩者互不相干,就可以固定總時間不變,而這就是雙核心CPU時的好處。

2. 顯示執行核心

一般我們的程式都僅在ESP32的核心1執行(核心編號1),所以根本沒用到第二個核心(核心編號0),為了證明,我們可以透過xPortGetCoreID()函數來顯示現在使用到哪一個核心,例如我們寫一個簡單的HelloWorld,來測試看看。

void setup() {
Serial.begin(115200);
}
 
void loop() {
Serial.println("HelloWorld!");
Serial.print("使用核心編號:");
Serial.println(xPortGetCoreID());//xPortGetCoreID()顯示執行核心編號
delay(1000);
}

上圖可以知道,在未特別指定執行核心前,程序都在核心1中執行,我們稱為單線程,而未使用到另外一個核心,我們拿ThingSpeak的一個範例來演練看看,順便了解執行的時間變化。

#include
#include
#include
//請修改以下參數--------------------------------------------
char ssid[] = "SSID";
char password[] = "SSIDpassword";
//請修改為你自己的API Key,並將https改為http
String url = "http://api.thingspeak.com/update?api_key=換成你的APIKey";
int pinDHT11 = 14;//假設DHT11接在腳位GPIO14,麵包板左側序號8
//---------------------------------------------------------
SimpleDHT11 dht11(pinDHT11);//宣告SimpleDHT11物件
 
void setup()
{
Serial.begin(115200);
Serial.print("開始連線到無線網路SSID:");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
Serial.println("連線完成");
}
 
void loop()
{
Serial.print("使用核心編號:");
Serial.println(xPortGetCoreID());
//嘗試讀取溫濕度內容
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
Serial.print("溫度計讀取失敗,錯誤碼="); Serial.println(err); delay(1000);
return;
}
//讀取成功,將溫濕度顯示在序列視窗
Serial.print("溫度計讀取成功: ");
Serial.print((int)temperature); Serial.print(" *C, ");
Serial.print((int)humidity); Serial.println(" H");
//開始傳送到thingspeak
Serial.println("啟動網頁連線");
HTTPClient http;
//將溫度及濕度以http get參數方式補入網址後方
String url1 = url + "&field1=" + (int)temperature + "&field2=" + (int)humidity;
//http client取得網頁內容
http.begin(url1);
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) {
//讀取網頁內容到payload
String payload = http.getString();
//將內容顯示出來
Serial.print("網頁內容=");
Serial.println(payload);
} else {
//讀取失敗
Serial.println("網路傳送失敗");
}
http.end();
delay(20000);//休息20秒
}

為了計算網路傳送的延遲時間,我們可以開啟顯示時間戳記Show timestamp來觀察每次的傳輸時間,我們比較上圖2與3之間的時間差異發現,經過五次的傳送,時間已經慢了約4秒鐘,同時我們觀察執行核心也都是在編號1上執行。

3. 雙核心執行

了解概念後,我們先來實做ESP32多核心的寫法,步驟是這樣的。

1. 宣告任務變數:TaskHandle_t Task1;//宣告Task1任務
2. 設定並執行任務://設定任務
xTaskCreatePinnedToCore(
Task1code, //本任務實際對應的Function
“Task1”, //任務名稱(自行設定)
10000, //所需堆疊空間(常用10000)
NULL, //輸入值
0, //優先序:0代表最優先執行,1次之,以此類推
&Task1, //對應的任務handle變數
0) //指定執行核心編號(0、1或tskNO_AFFINITY:系統指定)

為了測試,我們將原本ThinkSpeak的流程改為多核心架構,核心1執行主流程loop()監控DHT11的溫溼度,將數值存放在公用變數區,並設定上傳旗標=True,核心0執行Task1,主要工作是將資料上傳,當發現上傳旗標=True後就執行上傳,並在完成上傳後修改上傳旗標=False,等待下次任務啟動。

此時我們以上圖方式加入多核心架構後,程式如下:

#include
#include
#include
//請修改以下參數--------------------------------------------
char ssid[] = "SSID";
char password[] = "SSIDpassword";
//請修改為你自己的API Key,並將https改為http
String url = "http://api.thingspeak.com/update?api_key=換成你的APIKey";
int pinDHT11 = 14;//假設DHT11接在腳位GPIO14,麵包板左側序號8
//---------------------------------------------------------
SimpleDHT11 dht11(pinDHT11);//宣告SimpleDHT11物件
 
//公用變數區
byte temperature = 0;
byte humidity = 0;
bool SendFlag = false;
//宣告任務Task1
TaskHandle_t Task1;
 
//任務1副程式Task1_senddata
void Task1_senddata(void * pvParameters ) {
//無窮迴圈
for (;;) {
//偵測上傳旗標是否為true
if (SendFlag) {
Serial.print("Task1:啟動網頁連線,at core:");
Serial.println(xPortGetCoreID());
HTTPClient http;
//將溫度及濕度以http get參數方式補入網址後方
String url1 = url + "&field1=" + (int)temperature + "&field2=" + (int)humidity;
//http client取得網頁內容
http.begin(url1);
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) {
//讀取網頁內容到payload
String payload = http.getString();
//將內容顯示出來
Serial.print("網頁內容=");
Serial.println(payload);
} else {
//傳送失敗
Serial.println("網路傳送失敗");
}
//修改完畢,修改傳送旗標=false
SendFlag = false;
http.end();
} else {
//Task1休息,delay(1)不可省略
delay(1);
}
}
}
 
void setup()
{
Serial.begin(115200);
Serial.print("開始連線到無線網路SSID:");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
Serial.println("連線完成");
//在核心0啟動任務1
xTaskCreatePinnedToCore(
Task1_senddata, /*任務實際對應的Function*/
"Task1", /*任務名稱*/
10000, /*堆疊空間*/
NULL, /*無輸入值*/
0, /*優先序0*/
&Task1, /*對應的任務變數位址*/
0); /*指定在核心0執行 */
}
 
void loop()
{
Serial.print("loop主流程:溫濕度讀取,at core:");
Serial.println(xPortGetCoreID());
//嘗試讀取溫濕度內容
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
Serial.print("溫度計讀取失敗,錯誤碼="); Serial.println(err); delay(1000);
return;
}
//讀取成功,將溫濕度顯示在序列視窗
Serial.print("溫度計讀取成功: ");
Serial.print((int)temperature); Serial.print(" *C, ");
Serial.print((int)humidity); Serial.println(" H");
//修改上傳旗標=true
SendFlag = true;
delay(20000);//休息20秒
}

經由將程式修改為多核心執行後,可以發現,儘管網路會有延遲,但是每次開始傳送的時間都不會相差太多,多次執行後,仍能保持在0.1秒內的誤差。

讀者了解多核心的優點後,可以思考要如何應用在不同的議題上喔。

作者為本刊共筆作者,其專欄文章同步發表於作者部落格

*本文經Makerpor同意轉載,原文連結,特此感謝


【教學】在Jetson Xavier NX上以SSD運行作業系統

$
0
0

SSD讀寫速度比SD卡快速,本篇會實作在Jetson Xavier NX上改成以SSD運行作業系統。

作者/攝影 蔡雨錡/CAVEDU教育團隊
時間 1hr
難度 ★☆☆☆☆
材料表

  【推薦套件】 RK-2020 NVIDIA® Jetson Xavier™ NX開發套件(全配)+INTEL RealSense D435i

【推薦套件】RK-2020 NVIDIA® Jetson Xavier™ NX開發套件(全配)+羅技C270

 

經實際測試(如下圖),SSD的平均存取時間遠低於SD卡。所以本篇要實作在Jetson Xavier NX上改成以SSD運行作業系統。

測試中使用的硬體規格如下:

  • SSD –  SanDisk Extreme PRO M.2 NVMe 3D SSD 500GB
  • SD卡 – SAMSUNG microSDXC UHS-I Card 64G

Step 1. 在Jetson Xavier NX上安裝SSD

使用M2螺絲起子將下圖中綠色圓圈中的螺絲轉開拿起來。再把NVMe規格的PCIe SSD插入Jetson Xavier NX的底部M.2 Key M插槽(為圖中紅色框框的左側)。插進去後要注意金屬接點部分會如下圖看不到,這個時候就可以把綠色圓圈中的螺絲鎖回。

接下來的步驟為按照JetsonHacks教學操作,文字中以符號$為首的指令需要在terminal中輸入。

 

Step 2. 格式化SSD

搜尋Disks並點擊,會看到以下畫面,點選你的SSD,本文中為SanDisk的500GB Disk:

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

Step 3. 建立分區

點選下圖的加號創建分區

本文中建立的新分區容量遵循網頁建議為484GB,大家可以根據自身需求做調整。接下來幫該分區取名稱,類型要選擇Ext4(Fourth EXTended filesystem)。

 

Step 4. 設定SSD

複製JetsonHacks Github上的檔案

$ git clone https://github.com/jetsonhacks/rootOnNVMe

進入rootOnNVMe資料夾

$ cd rootOnNVMe

接著將eMMC / SD卡的rootfs複製到SSD

$ ./copy-rootfs-ssd.sh

最後,新增一個服務在系統啟動時運行腳本。該腳本會將root移至SSD,讓系統在SSD運行。

$ ./setup-service.sh

 

Step 5. 重新啟動系統測試

$ sudo reboot

重新開機後顯示出以下畫面就成功了,代表系統是在SSD卡上。

注意:Jetson Xavier NX目前仍需要安裝SD卡以進行重新導向讓NVMe SSD開機,SD卡拔掉就無法成功開機了,Jetson Xavier NX的預設不允許從NVMe SSD直接啟動系統。

 

改成以SSD運行系統可以加快讀取速度,讓使用上更順暢,推薦有Jetson Xavier NX的使用者試試看!

 

參考資料:

【活動】MIT App Inventor 國際線上黑客松 2020

$
0
0

MIT App Inventor 團隊今年舉辦線上黑客松,且不限於青少年朋友,大人隊伍也可以挑戰!阿吉老師也是評審之一,很期待台灣隊伍的表現喔 !

作者 曾吉弘

 

A Global App Hackathon for Good

全世界的生活在 2020 年都被弄得亂糟糟。在 MIT App Inventor 小組 (後稱主辦單位) 期待在這個充滿挑戰的時刻中看到您的創意。今年我們將原本的 App Inventor Summit 2020 改為全球性的黑客松。請詳讀以下的註冊細節、重要時程、評分標準以及評審委員會等資訊。

註:MIT 原始頁面請點我

註冊

為了確保評審人數足夠,我們希望有意願參加的隊伍能在 6/19 之前註冊完成。請 點我 來註冊。如果您是以團隊報名,一隊只要一位隊員來註冊就好 (但請在表單中註明所有隊員姓名)。

注意:主辦單位可能會根據實際情況來限制報名隊伍數量,這是為了確保評審們有足夠的時間來進行評分。

 

重要時程

時程 日期
報名截止 June 19
Hackathon 開始 July 12
Hackathon 交件 July 18
公布決賽名單 July 25
公布獲獎名單 Aug 3

分組

本次黑客松共有五種報名分級:

  • 青年個人(Individual youth) – 單人且小於18歲。
  • 青年團隊(Team youth) – 兩人以上,皆小於18歲。
  • 混齡團隊(Mixed team) – 由各年齡層組成之隊伍,但至少有一位小於18歲,另外至少一位大於18歲
  • 成年個人(Individual adult) – 單人且大於18歲
  • 成年團隊(Team adult) – 兩人以上且都大於18歲

交件需求

隊伍必須提交該組 app 的 .aia 專題檔,以及一支影片(不可超過 2 分鐘) 來說明 app 的運作方式。

影片相關資訊

您提交的影片可以使用英語之外的語言,但希望能提供英文字幕以便評審評分。影片可以上傳到其它名它(例如 YouTube),但記得開啟相關權限才能評分。請注意評審需要評審多份專題,錄一份很棒的影片來凸顯你的專題功能吧!

App 相關資訊

App 須以 App Inventor 匯出之 .aia 格式來交件,且必須是該隊隊員所親自完成的作品。評審會把您提交的檔案匯入 App Inventor 來評分。如果需要登入帳號才能使用您的 app,請用最終交件表單中的對應欄位來提供登入相關的細節。

請勿在您提交的檔案中使用任何有版權素材,除非您可以提供書面文件來證明您確實取得授權來使用這些素材。像是 Creative Commons 這類的許可性授權是沒問題的,但請在 app 中註明素材來源。

如果您的 app 要與外部硬體搭配來執行,請在最終交件表單中說明要用到的硬體規格,以及 app 與硬體的互動方式。如果可以的話,主辦單位會試著取得您所用的硬體來測試,但如果無法取得的話,會根據您所提供關於 app 與硬體的互動方式來評分。

 

評審標準

以下為評審標準:

  • 創意 Creativity – 您的 app 夠創新嗎?是否在混搭各種科技上有獨到之處?
  • 設計 Design – 使用者如何與 app 互動?這個 app 在美學觀點上是否使其更具親和力?
  • 可能用途 Potential Usefulness – 這個 app 可能的影響為何?是否能有效幫助其目標使用者?
  • 技術能力 Technical Skill – app 是否具備良好設計的資料結構?程式是否妥善管理且詳細註解?是否用到進階功能,例如 “any component (任意元件)” 指令?
  • 呈現 Presentation (影片與相關素材) – 創作團隊如何呈現這個作品?觀看影片的人是否能感受到這個 app 的重要性與意義?

 

評審總共進行 2 輪。第一輪中,所有交件的 app 都會被至少兩位評審來審查,並在各隊伍分級中選選出前五名。最後從這五個作品中,選出第一、第二、第三與榮譽獎(honorable)等獎項。

 

人氣獎

主辦單位會在比賽網站上列出交件的 app,讓大家投票選出 “People’s Choice(人氣獎” 。如果您不希望您的 app 被列入本獎項中,請在最終交件表單中註明。

 

委員會

  • Adia Wallace (Black Girls CODE, USA)
  • Anshul Bhagi (Camp K12, India)
  • Brianne Caplan (Code Your Dreams, USA)
  • Daniel Lai (Hong Kong Jockey Club Charities Trust, Hong Kong)
  • Daniel Paz de Araújo
  • David Tseng (阿吉老師) (CAVEDU Education, Taiwan)
  • Evan Patton (MIT, USA)
  • Hal Abelson (MIT, USA)
  • Jeff Freilich (MIT, USA)
  • Jennifer Rosato (College of St. Scholastica, USA)
  • Jere Boudell (Clayton State University, USA)
  • Karen Lang (MIT, USA)
  • Kathy Deng (Google, USA)
  • Li Yue (South China University of Technology, China)
  • Lissa Soep (YR Media, USA)
  • Marisol Diaz (MIT, USA)
  • Michelle Sun (First Code Academy, Hong Kong)
  • Peter Mathijssen (MIT App Inventor Power User, The Netherlands)
  • Selim Tezel (MIT, USA)
  • Tara Chklovski (Technovation, USA)

 

贊助

如果您個人或您的組織單位有意願贊助本次黑客松,請來信 hack-2020@appinventor.mit.edu 與主辦單位聯絡。

 

(原文頁面最下方的小文字)

與好朋友組隊寫 app,參加 MIT App Inventor 的 “Hackathon for Good” 黑客松活動。

與我們一同慶祝 app 全球開發之民主化運動,同時還能解決各種富挑戰性的複雜問題!

【翻譯】Raspberry Pi 8GB 來了!來自樹莓派基金會創辦人Eben Upton的消息

$
0
0

本文感謝原作者樹莓派基金會創辦人 Eben Upton 授權後翻譯,請參考原文 (5/28, 2020)

譯者   曾吉弘
圖片來源  轉載自 Eben Upton原文 

謠傳已久的 8GB Raspberry Pi 4 終於終於登場,樹莓派基金會定價 $75 美金。

Raspberry Pi 4 快一歲了,這一年也確實相當忙碌。我們出貨了接近三百萬套 Pi、 做了一些板子上的微調,並將 Pi4 2GB 版本從 $45 調降為 $35。軟體方面更是投注了大量心血來減少裝置的閒置功耗、通過了OpenGL ES 3.1 認證整合Vulkan 驅動程式、加入了 PXE 網路開機模式,還有 USB 開機模式的原型也在趕工中 – 除了這些之外還有各種除錯日常、加入大小功能還有核心版本進版等等。

雖然 Pi 4已經有了 1、2 與 4GB 的版本,但我們依然期待著 8GB Raspberry Pi 4 是否有可能誕生。我們滿心期待這款前所未見的產品能快快問世,要把它放入 Beginner’s Guide 書內容與產品家族中。

挖喔~

用於 Raspberry Pi 4 的 BCM2711 晶片最高可以定址到 16GB  LPDDR4 SDRAM,因此大記憶體版本 Pi 之所以卡住的關鍵在於 8GB LPDDR4 缺貨。2019 年這件事都一直無解 (至少以我們可用的規格來說),但幸好 Micron 的好夥伴們提早一步到位。正因如此,我們才能在今天宣布: 8GB Raspberry Pi 4 已可出貨,售價只要 $75。

小中見大(Multum in parvo)

 

8GB 的記憶體到底有多大,值得和大家聊一下。回顧一下當年的 BBC Micro (譯註:產品線 1981 – 1994),Model A 的 RAM 只有 16KB,而 Model B 最後也只有 128 KB;而 8GB 也是比爾蓋茲當年宣稱,640 KB 就能滿足所有人需求,的 13,000 倍以上(不過,這句話的真實性還有待考證)。

如果您是重度使用者,不論是要編譯或連結大型軟體、執行大量的伺服器運算、或只是想要一次多開幾個瀏覽器標籤,這款 Raspberry Pi 絕對是您要的。

還改了哪些地方?

為了穩定供應新款記憶體封裝所需的峰值電流(比先前版本稍微高了一點),James 對板子的電源動了點手腳,把原本的供電元件從板子的右側換到接近 USB 2.0 接頭旁邊,並在 USB-C 電源接頭旁邊加了新的切換器。這是必要的調整,但由於亞洲電感元件供應商被 COVID-19 疫情所衝擊,讓我們足足花了三個月才完成。

全新切換器、電感器,還有全新的時程QQ

除了這些之外,這就是您熟知且喜愛的 Raspberry Pi 4。

 

64 位元又如何呢?

預設的作業系統映像檔 使用了 32-位元 LPAE 核心與 32-位元 userland。這使得完整的 8GB 記憶體能被多個行程所共享,但單一行程最多不可使用超過  3GB。對於多數使用者來說這不是什麼大問題,況且就算是記憶體怪獸的 Chromium,其每個標籤頁都是獨立行程。32-位元 userland 的好處是從 2011年古時候的 alpha 板 t到今天發布的閃亮亮 8GB Pi,都能用同一個映像檔搞定。

但如果是那些想把完整的 8GB 用好用滿的重度使用者的話,就需要 64-位元才行。已經有許多現成的方案,包含 UbuntuGentoo

還有,我們也在今天發布了 Pi 64-位元作業系統映像檔的 early beta,其中 32-位元映像檔相同的應用程式包與桌面環境,只是改用 Debian arm64 版本來重新建置而已。

而且,32-位元與 64-位元的作業系統映像檔都有新名字了:Raspberry Pi OS。隨著社群人口不斷成長,希望能讓新使用者能以最快最簡易的方式找到我們針對 Raspberry Pi 特別推薦的作業系統。因此,我們認為新的名字能讓更多人在使用 Pi 與相關軟體時更有信心。支援現行所有作業系統映像檔的新版 Raspberry Pi 桌面軟體也已經發布了,之後會另外寫一篇文章來聊聊這件事。

請由本篇文章找到最新 64-位元映像檔載點與一些重要聲明。

*本文經 Eben Upton 同意後翻譯

【教學】Intel RealSense LR200的SDK安裝以及範例教學(Raspberry Pi、Jetson Nano、Tinker Edge R )

$
0
0

Intel RealSense LR200的範例程式,在Jetson Nano、Raspberry Pi、Tinker Edge R上都可以安裝使用。

本篇文章將教你如何在Jetson Nano、Raspberry Pi、Tinker Edge R上安裝Intel RealSense LR200 SDK,並且介紹範例程式(C/C++)。這個型號沒有提供Python範例程式,不過沒有C/C++基礎的人也可以順利執行。閱讀本篇文章需要對Terminal以及Linux常見指令有基礎了解。

 

本文大綱

  • 認識 Intel RealSense LR200
  • 在不同開發板上安裝RealSense LR200 SDK
    • Raspberry Pi 4
    • Jetson Nano & Tinker Edge R
  • 範例程式介紹
    • 對齊-cpp-alignimages
    • 回傳函式-cpp-callback & cpp-callback-2
    • 基礎影像串流組圖-cpp-capture
    • 使用者互動介面-cpp-config-ui
    • 列出可用項目-cpp-enumerate-devices
    • 儲存影像-cpp-headless
    • 同步顯示多裝置影像-cpp-multicam
    • 三維點雲-cpp-pointcloud
    • 選擇顯示組合-cpp-restart
    • 低延遲的多執行緒範例-cpp-stride
    • 教學範例一:取得深度資訊-cpp-tutorial-1-depth
    • 教學範例二:顯示四種影像組圖-cpp-tutorial-2-streams
    • 教學範例三:顯示三維點雲-cpp-tutorial-3-pointcloud.cpp
作者/攝影 蔡雨錡/CAVEDU教育團隊
時間 1.5hr
難度 ★★☆☆☆
材料表

 

認識Intel RealSense LR200

Intel RealSense LR200 是 RealSense攝影機家族的成員之一,推出時間為2016年Q3,可用距離範圍為0.5m-3.5m,解析度為480×360@60fps,彩色影像的單獨解析度可以到1920×1080。可以點此看Intel RealSense攝影機的歷代成員,並且可以點選任意想要比較的成員進行規格比較。

本篇文章著重在安裝SDK跟範例程式介紹,想要了解更多細節可以參考RealSense LR200 SDK的Github

 

在不同開發板上安裝RealSense LR200 SDK

以下指令皆為在Terminal中執行。如果你之前已經為了RealSense D435(i)安裝過librealsense,由於並不相容於LR200,必須重新安裝。

此函式庫將安裝在/ usr / local / lib;header files安裝在/ usr / local / include;

範例、教學、測試程式位於/ usr / local / bin。

 

1. Raspberry Pi 4

Step1. 同步apt軟體資料庫、軟體升級、系統升級 (這個步驟可以處理一些軟體相依/相斥的問題)

$ sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade

Step2. 安裝一些librealsense需要的套件

$ sudo apt-get install libusb-1.0-0-dev pkg-config libglfw3-dev git cmake
$ sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev

 

Step3. 從Github下載 legacy Realsense SDK

$ git clone -b legacy --single-branch 

https://github.com/IntelRealSense/librealsense.git

Step4. 編譯並安裝librealsense

$ mkdir build && cd build
$ cmake ../ -DBUILD_EXAMPLES=true
$ make && sudo make install

2. Jetson Nano & Tinker Edge R

Step1. 同步apt軟體資料庫、軟體升級、系統升級 (這個步驟可以處理一些軟體相依/相斥的問題)

$ sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade

Step2. 安裝一些librealsense需要的套件

$ sudo apt-get install libusb-1.0-0-dev pkg-config libglfw3-dev git 

Step3. 從Github下載 legacy Realsense SDK

$ git clone -b legacy --single-branch 

https://github.com/IntelRealSense/librealsense.git

Step4. 編譯並安裝librealsense

$ mkdir build && cd build
$ cmake ../ -DBUILD_EXAMPLES=true
$ make && sudo make install

範例程式介紹

如下圖中所示,完成安裝後,你可以在~/librealsense/examples資料夾中找到範例程式。

接下來的內容為範例程式在Jetson Nano B01開發板上測試的成果,程式的介紹順序按照Github中的字母排列順序。

想要執行範例程式時,只要在Terminal中輸入該範例名稱即可順利執行,例如想要執行cpp-capture.cpp這個程式,輸入以下指令即可執行。

$ cd ~/librealsense/examples
$ cpp-capture

A.對齊-cpp-alignimages

顧名思義這個程式會對齊彩色影像、深度影像、紅外光影像,因為兩個影像的涵蓋範圍略有差異,畢竟鏡頭位置不一樣。從左至右,從上到下顯示的影像順序分別為彩色影像、彩色影像對齊深度影像、紅外光影像對齊深度影像、深度影像對齊彩色影像、深度影像、深度影像對齊紅外光影像。

B.回傳函式-cpp-callback & cpp-callback-2

cpp-callback提供了深度跟彩色資訊(寬、高、影像格式、時間戳記)的回傳函式,如下圖。

cpp-callback-2中有寫這是Multi-threading範例三,執行後會在Terminal中顯示使用的硬體名稱、序列編號跟韌體版本。另外會跳出組圖畫面,從左至右,從上到下顯示的影像順序分別為深度影像、彩色影像、紅外線影像一、紅外線影像二。回傳函式會提供影像解析度以及是第幾個stream等資訊。

C.基礎影像串流組圖-cpp-capture

執行程式後可以看到跳出四張組圖的影像串流,從左至右,從上到下顯示的影像順序分別為深度影像、彩色影像、紅外線影像一、紅外線影像二。Terminal中顯示組圖中的每張影像資訊(影像類型、解析度、FOV、有沒有變形校正)

D.使用者互動介面-cpp-config-ui

由於最新的RealSense Viewer讀不到LR200的資訊,這個程式可以想成是初代/簡化版本的使用者互動介面。可以調整的項目有明亮度、對比、白平衡、多項深度閾值等等,有興趣的人可以全部調整看看。顯示的畫面是基於cpp-capture程式延伸改寫的。

E.列出可用項目-cpp-enumerate-devices

非常實用的程式,可以列舉所有可用的項目,執行後能依序獲得以下資訊:

  • 獲取系統上當前存在的設備清單
  • 顯示每項設備名稱和資訊(序列編號、韌體版本等)
  • 顯示每項設備支持哪些選項
  • 顯示每項設備支持哪些影像串流以及個數
  • 顯示每種影像串流的每種可用模式(寬度、高度、格式、幀率、以及在此模式下啟用影像串流所需的設定)
  • 取得內建函式
  • 檢視水平跟垂直的FOV(Field Of View)

像一份直接攤開來的規格書。下圖為執行後的成果。

F.儲存影像-cpp-headless

這個範例會取得30幀並將最後一幀的彩色影像、深度影像、兩張紅外線影像分別寫入程式同資料夾下,如下圖。

對於檢測沒有辦法顯示圖片的嵌入式系統很有用。

G.同步顯示多裝置影像-cpp-multicam

如果專題中需要用到至少兩個LR200,就可以使用這個程式來檢視所有LR200的彩色影像跟深度影像。

由於手邊只有一個LR200,所以只有一直排的影像;如果有n個LR200,就可以顯示n直排的影像(上方為彩色影像,下方為深度影像)。

H.三維點雲-cpp-pointcloud

執行程式後,顯示的三維點雲畫面如下圖。左上角為影像的fps。可以使用滑鼠進行視角旋轉。令人感動的是旋轉視角的過程十分順暢不卡頓。

I.選擇顯示組合-cpp-restart

Intel很貼心地準備了20種影像顯示組合供使用者選擇,有單圖/多圖、不同解析度、不同格式等設定,詳細可以看程式碼。執行程式後會按順序顯示這20種影像顯示組合。下方即為其中一種,顯示過程中也可以看每張圖片左上角的細節設定。

J.低延遲的多執行緒範例-cpp-stride

這是個多執行緒、低延遲、有回傳函式、零複製的範例,為了縮小延遲感會適當地丟掉多餘的幾幀影像。程式中設定最多只可以有一幀影像在排隊,排超過的就捨棄。

執行後顯示影像如下圖,此程式重點在程式碼

 

 

K.教學範例一:取得深度資訊-cpp-tutorial-1-depth

這個教學範例就是D435i第一個教學範例的前身了,用ASCII碼 ” .:nhBXWW”來代表深度,下圖因為天花板的燈太遠,所以只有用到前兩個的” ”跟”.”。

L.教學範例二:顯示四種影像組圖-cpp-tutorial-2-streams

基本上跟cpp-capture差不多,但深度影像的套用的假彩色變成紅色色階。從左至右,從上到下顯示的影像順序分別為深度影像、彩色影像、紅外線影像一、紅外線影像二。

M.教學範例三:顯示三維點雲-cpp-tutorial-3-pointcloud.cpp

跟cpp-pointcloud的顯示略不同以外,code比較簡潔少了40幾行,一樣是顯示三維點雲資訊。

其中有一個cpp-motion-module範例沒有講是因為LR200沒有motion frame,所以這個範例無法執行。

手邊有LR200可以試著修改這些範例玩玩看,有任何有趣的相關主題都歡迎在留言區跟大家分享!

 

參考資料:

 

【翻譯】最新 Raspberry Pi OS 有哪些新功能!?

$
0
0

Raspberry Pi 4 B+ 推出 8GB 的版本了,感覺可用它來做的事情真的愈來愈接近一台入門級筆電了呢!上回已經看過硬體規格,這回來看看新版 Raspberry Pi OS 加入了哪些功能吧!

本文感謝原作者 Simon Long授權後翻譯,請參考原文 (5/29, 2020)

譯者  曾吉弘
圖片來源  轉載自 Simon Long 原文 

自從 new 8GB Raspberry Pi 4(原文連結),我們也發布了預載 Raspberry Pi 桌面系統的的 Debian 64-bit ARM beta 版作業系統,現在都可以使用了。另外也更新了 32-位元版本之 Raspberry Pi OS (新名字!不再使用 Raspbian),以下和大家聊一下有哪些新東西吧。

阿吉老師說:另外也多了 Scratch 3 離線版與新的 GPIO 工具,之後再介紹囉~

書架 Bookshelf

大家都知道,我們(譯註:樹莓派基金會)自己就有出版公司:Raspberry Pi Press,每個月都出版相當多樣的雜誌,包含 MagPiHackSpace magazineWireframe。也出版多元化的書籍與刊物,您可購買紙本產品(訂購網站) 或免費下載 pdf 檔。

為了讓這些優質內容能被更多人看到與使用,我們新增了 Bookshelf (書架) 應用程式,請由主選單的 Help 項目中就能找到。

 

Bookshelf 列出了所有免費雜誌的現有內容 – MagPiHackSpace magazineWireframe 等等,從創刊號到最新的一應俱全 – 當然還有 Raspberry Pi Press 的所有免費書籍。執行本程式之後,它會自動更新來找找看從您上次瀏覽之後有沒有任何新的內容推出,新內容的ㄥ面會有一個小小的 “new” 閃動喔!

用滑鼠點兩下就能閱讀任何一本刊物 – 如果您要閱讀的內容已經下載到 Pi 的話,會自動用 Chromium (後來發現它是個相當不錯的 PDF 檢視軟體)開啟這份檔案;如果還未存於 Pi 的話,就會先下載並在下載完成之後自動開啟。刊物封面上如果有一朵雲的圖示,代表這個檔案還沒被下載。

您所下載的所有 PDF 檔都會放在 home 目錄下的 “Bookshelf” 目錄中,因此也可以從這裡直接開啟所要的檔案。

Raspberry Pi Press 已經出版了許許多多非常棒的內容 – 我們希望這樣可以讓這些內容更容易被找到與閱讀。

 

 有些網友反應在非英語環境的系統中,Bookshelf 會回報 “磁碟已滿(disk full)” 錯誤,即便磁碟尚有空間;這個問題已可透過 apt 來解決,因此在終端機輸入 sudo apt update 指令再輸入 sudo apt upgrade 應該可以就搞定了。

 

放大鏡 Magnifier

回顧我上一篇落落長的文章,有一個我們不斷改進中的領域就是針對視覺障礙的朋友們提供更好的無障礙操作體驗。我們很早就已經加入 Orca screen reader (上一版作業系統已經有一些修正了,新版作業系統應該會更穩定),再來推薦的作法就是來自 AbilityNet 的螢幕放大鏡。

這件事做起來比想像的更難!我嘗試過非常多 Debian 桌面系統現有的螢幕畫面放大程式,但沒有一款真的運作地很好;我找不到任何一款再操作上能比在 Mac OS 或 Ubuntu,所以到最後我乾脆從頭(幾乎啦)寫一個。

要安裝放大鏡程式的話,請由新的作業系統中點開 Recommended Applications,並在 Universal Access 中選擇  Magnifier。安裝完成之後,請重新開機。

您會在狀態列的右手邊看到一個放大鏡圖示 – 點選這個圖示或按下鍵盤的 Ctrl-Alt-M 就能啟用放大鏡(再次點選圖示或按下組合鍵就能關閉放大鏡功能)。

    對放大鏡圖示點選滑鼠右鍵會帶出它的設定選項。請選擇圓形或矩形視窗以及視窗大小,並設定放大的程度。也可以讓放大鏡視窗跟著滑鼠游標移動或畫面上某個固定視窗 (固定視窗還是能用滑鼠來拖動)。

  另外,某些應用程式可以讓放大鏡自動跟著文字游標,或某個按鈕來移動。但糟糕的是,這會根據該軟體是否支援必要的無障礙套件而定,因為這個功能並非每套程式都有,但只要有包含這個功能的程式通常都運作得相當穩定。其中一個例外是 Chromium,它要在之後的版本才會加入無障礙功能;目前如果想要一個支援無障礙功能的網路瀏覽器的話,我們推薦 Firefox。請在終端機視窗輸入以下指令來安裝 Firefox:

sudo apt install firefox-esr

(請注意,除非您需要無障礙功能,不然我們不推薦在 Raspberry Pi OS 中使用 Firefox。FireFox 不像 Chromium,後者可以運用 Raspberry Pi 的硬體來加速影像播放)。

   我本身視力沒問題,但我發現放大鏡在檢查圖示小細節時尤其好用,所以我建議您還是安裝起來玩玩看。

 

使用者調查

    我們已經知道很多關於 Raspberry Pi 使用者們用這片板子來做些什麼事情,但現在還是很好奇有沒有漏掉什麼… 因此現在系統加入一份小問卷(非必填)來詢問您(身為使用者),想知道您使用 Raspberry Pi 的用途,好讓我們確保能為大家在做的事情提供正確的幫助。

    這份問卷會在新作業系統首次啟動 Chromium 瀏覽器時顯示出來。只有四題,不會占用您太久時間,結果會用 Google 表單來記錄。

    您會發現問卷最下方的欄位自動被填入了一串英文與數字,這是從這片  Raspberry Pi 自動產生的硬體序號,這樣就能過濾掉同一台裝置卻作答了多次 (例如日後您弄了一片全新的映像檔來開機)。我們無法使用這個序號來辨識關於您或這片 Raspberry Pi 的任何東西,但如果您還是很在意的話,可以先把這串序號刪除再送出表單。

   如上所述,這份問卷並非必填 – 如果您不想填的話,直接關閉  Chromium,之後再次開啟就不會看到問卷了 – 但如果我們能得到您的寶貴意見的話,對於日後的產品開發會非常有幫助。因此,我們感謝所有願意填寫這份問卷的朋友,愈多愈好喔。

 

其他修改

    另外,這份映像檔也有既定的錯誤修整與一些小改進,詳情請參考下載頁面的 release note。

    值得一提的地方是聲音上的微調。Raspberry Pi OS 使用 ALSA (Advanced Linux Sound Architecture) 來控制聲音裝置。到目前為止,Raspberry Pi 的兩款內部聲音輸出裝置 – HDMI 接頭與耳機接頭 – 都會被系統視為同一個 ALSA 裝置,後續再用 Raspberry Pi 專屬的指令來設定哪一個裝置要被啟用。我們要做的事情是把這兩個東西視為獨立的 ALSA 裝置;這會讓 Raspberry Pi 4 更易於管理兩個 HDMI 接頭的音源,與第三方軟體的相容性應該也會更高。這代表在新版的作業系統中,您需要在聲音輸出選項(audio output selector,請對工作列的音量圖示點選滑鼠右鍵) 中設定您想要的聲音輸出(這個問題在 Sonic Pi 中存在已久,該軟體不論如何設定都只會從 HDMI 輸出音效 – 希望在後續更新很快能搞定這件事)。

    有些朋友詢問如何從終端機下指令來切換聲音輸出而不需用到桌面系統。如果想這麼做的話,您需要在 /home 目錄建立一個 .asoundrc 檔案;ALSA 會透過這個檔案來決定要用哪個音效裝置。如果該檔案不存在,ALSA 會使用 “card 0” – 也就是 HDMI – 作為輸出裝置。如果您想用耳機接頭作為預設音效輸出的話,請新建一個 .asoundrc 檔並輸入以下內容:

defaults.pcm.card 1
defaults.ctl.card 1

    這樣,ALSA 就知道預設裝置為 “card 1”,也就是耳機接頭。如果要切換回 HDMI 的話,請把檔案中所有的 1 都改回 0,或直接刪除該檔案。

 

如何取得新的作業系統?

新版作業系統映像檔請由老地方下載。如果要更新既有的映像檔,也是用相同的指令:

sudo apt update
sudo apt full-upgrade

如果只是要安裝 bookshelf 程式的話,請執行以下指令:

sudo apt update
sudo apt install rp-bookshelf

如果只要安裝放大鏡軟體,先在 Help 選單 → Recommended Software(譯註:本選項目前無中文) 中的 Universal Access 找找看是否已經裝好了,或輸入以下指令來安裝:

sudo apt update
sudo apt install mage

    安裝完成之後,您還需要把放大鏡放入工作列中。裝好並重新開機之後,請對工作列點選滑鼠右鍵,選擇 Add/Remove Panel Items;點選 Add,並選擇 Magnifier 項目。

    希望您喜歡這些改變 — 一樣,我們歡迎任何意見,請在這裡留言吧!

【一分鐘小學堂系列彙整】Intel RealSense D435i x Jetson Nano

$
0
0

Intel RealSense D435i x Jetson Nano 一分鐘小學堂系列文章幫大家整理在一起了!

本文大綱

  • RealSense D435i 一分鐘小學堂01-假彩色製作深度影像
  • RealSense D435i 一分鐘小學堂02-校正IMU
  • RealSense D435i 一分鐘小學堂03-取得IMU數據
  • RealSense D435i 一分鐘小學堂04-IMU結合影像
  • RealSense D435i 一分鐘小學堂05-三維點雲
作者/攝影 蔡雨錡
時間 1hr
難度 ★☆☆☆☆
材料表

🌱  RealSense D435i 一分鐘小學堂01-假彩色製作深度影像 🌱

Intel RealSense景深攝影鏡頭可以提供深度資訊,而深度資訊通常會轉換成對應的顏色以影像呈現

例如: 20cm~40cm之間為粉紅色,40cm~60cm之間為藍色,決定什麼深度上哪種顏色就是假彩色(pseudo color)的ColorMap

圖中為使用OpenCV中幾種不同ColorMap的深度影像效果,還有更多的種類可以試試看唷!

了解更多 OpenCV ColorMap https://docs.opencv.org/master/d3/d50/group__imgproc__colormap.html

🌱  RealSense D435i 一分鐘小學堂02-校正IMU 🌱

RealSense D435i的i是代表有IMU可以使用,IMU全名為Inertial measurement unit,中文為慣性測量單元

IMU由三軸的陀螺儀跟三軸的加速度感測器組成,用於測量物體在三維空間中的角速度跟加速度

建議安裝在機器人或車的重心上,才能測到能對整體有代表性的數值

在正式開始執行程式前進行校正是必要的,RealSense IMU校正教學➡️ https://reurl.cc/V6WYZy

在研習中的學員們進行校正時手都意外地穩呢!

 

🌱  RealSense D435i 一分鐘小學堂03-取得IMU數據 🌱

RealSense D435i 搭配Jetson Nano要如何取得IMU數據呢,

首先要先了解IMU裡的陀螺儀(gyro)跟加速度感測器(accelerometer),頻率設定跟數據單位的部分如圖中表格

設定錯誤的頻率就收不到資料囉!

詳細規格看這裡 ➡️ https://www.intelrealsense.com/depth-camera-d435i/

🌱  RealSense D435i 一分鐘小學堂04-IMU結合影像 🌱

【私下問公開答】

想要同時取得RealSense D435i的IMU數據跟影像串流怎麼做?

首先要先了解彩色影像跟深度影像可以用的解析度跟fps,並且從最低的規格開始測試起

小編推薦的組合如下:

  • 影像解析度為640 x 480
  • fps(frame per second)為6

是開研習必定成功的好組合!

 

🌱  RealSense D435i 一分鐘小學堂05-三維點雲 🌱

點雲(Point Cloud)是由具有立體空間座標(x,y,z)、色彩等資訊的點所組成,通常是3D掃描的產物

 

RealSense可以收集彩色及深度影像數據,這兩組數據除了能以2D方式呈現

也可以透過RealSenseViewer或是Python程式,以3D點雲的方式呈現

Intel提供的範例程式中你可以用鍵盤或是滑鼠來進行三維點雲的

  • 旋轉
  • 縮放
  • 儲存PLY檔案
  • 儲存PNG檔案
  • 改變點雲的色彩來源

等很多有趣的功能!

快到Github下載來玩玩看吧>> https://reurl.cc/b5mvdM

對Intel RealSense D435i x Jetson Nano 有興趣的人可以進一步參考我們的以下兩篇文章以及Youtube上的專題介紹唷!

 

💻 Jetson Nano安裝及使用RealSense:https://reurl.cc/xDydmL

💻 Jetson Nano搭RealSense做人臉辨識及距離偵測:https://reurl.cc/W4lGDZ

💻【範例展示】Nvidia® Jetson Nano x Intel® RealSense D435i

 

【MakerPRO】ESP32專欄 ESP32評比與教學推薦NodeMCU-32s的理由

$
0
0

近年來隨著人工智慧及物聯網產業的興起,教育部也越來越重視如何帶領學生實做這類程式教育課程,而Arduino易學易用,能快速開發感測與互動程式,成為程式課程的主流教材。Arduino的特點是所有軟硬體都開源,感測器種類繁多價格便宜,學生在設計程式專題時,能很快的找到合適的元件接線組裝,完成程式撰寫,可以說是初學者學習程式最重要的教材之一。

目前市面上最普遍的是Arduino UNO板,網路售價大概在100~200之間。UNO板最容易取得,可用感測器也多,不過卻缺少了網路及藍牙元件,物聯網課程中「通訊」是非常重要的一環,缺少了網路通訊,只能做本地端感測互動,沒有資料收集、雲端圖表、LINE互動、智慧家庭、語音或圖像分析…等功能,筆者覺得物聯網課程缺少了網路,不能叫做物聯網了。

UNO雖然可以加裝網路、藍牙(HC05)元件,但要另外採購,且接線、通訊設定、AT COMMAND等問題,會打亂教學流程,此時由樂鑫科技(ESPRESSIF)所開發內建WiFi的ESP8266晶片則是承接了這個需求缺口。

ESP8266一樣採用Arduino開放性架構,呼叫內建的ESP8266 WiFi.h函式庫就可以連上網路讀取資料,因此ESP8266曾經風靡一陣子,但後來發現ESP8266只有一組類比感測(analogRead),如果學生在製作專題需要使用到兩組類比感測器時,就必須再回去使用UNO,並沒有改善教學上的問題。

作者 尤濬哲,本文經MakerPRO同意轉載,原文連結

因此樂鑫再次推出ESP32這款殺手級Arduino相容晶片,ESP32不僅內建有WiFi及低功率藍牙BLE,可用腳位也擴增到約26根,大部分腳位同時支援類比及數位,內建霍爾、溫度、觸控感測器,主頻高達260mHz的雙核心CPU,傳輸界面SPI、I2C、UART等強大的功能,而價格上也相當有競爭力,不僅可以演練所有目前現有UNO課程,也可以利用內建的網路及藍牙等通訊元件完成更多的應用專題。

下表整理目前常見物聯網課程所使用的UNO、ESP8266及ESP32等三種開發板的規格比較:

由上表比較可知,ESP32充分改進ESP8266的缺失,加上經濟實惠的價格,足以讓ESP32成為IoT課程最佳的教學工具,且ESP32與UNO所有週邊感測元件完全相容,可以無痛直接升級ESP32。

常見的ESP32版本

與Arduino相同,ESP32也有很多不同版本,每種都各有特色,目前市面上常見包括下列幾種:價格便宜的Doit ESP32 Dev Kit、附帶OLED的Lolin ESP32、18650電池座ESP32-TTGO、附帶相機及SD卡槽的ESP32-CAM、附帶光環LED及麥克風的HaloCode、縮小板ESP32-mini…等等,使用者可以依據需求採購合適的ESP32,常見的ESP32版本製表如下:

教學推薦版本-NodeMCU-32s

至於老師在教學上要選擇哪種ESP32版本較為合適呢?例如ESP32-CAM帶相機看起來很炫,卻不適合國高中教學,因為製作上為了縮小體積,刪除了USB-TTL晶片,且腳位剩下16根且大多跟內部共用,因此非常不適合初學者,在筆者歷年來的教學經驗中,較推薦Ai-Thinker的NodeMCU-32s,主要原因如下:

1.價格公道:

網路價格大概在200~300之間,物超所值。

2. 尺寸適中:

NodeMCU-32s尺寸剛好能塞入麵包板中,且留兩邊腳位通道,其他產品尺寸較寬,插入麵包板後,只能留下一邊可用,教學上較為不方便。

3. 運作穩定:

筆者的經驗,當開啟WiFi或藍牙時,它牌的產品較為不穩定,經常連不上網路,要經多次Reset後才能連上,NodeMCU-32s則大多一次就可連上,傳輸穩定。

4. 電壓輸出:

較多的ESP32都僅有3.3V輸出,缺少5V常發生Relay推不動、Servo不會轉等問題。而NodeMCU-32s則同時提供5V及3.3V。

5. 腳位數量:

許多ESP32並沒有將腳位完全拉出,導致腳位數量較少,例如較為便宜的DOIT僅有30根腳,而NodeMCU則保留完整38根腳,可以發揮最大效益。

6. 預留外接天線:

ESP32雖然都有板載PCB天線,但若距離AP較遠或要放置在金屬容器內時,則時會收訊不良,而NodeMCU-32s預留外接天線,透過外接ipex天線可大幅增加傳輸距離,使用外接天線須改0R電阻由預設1的位置改至2的位置,如下圖。

如上所述,在眾多ESP32中,筆者一直以NodeMCU-32s為主要教材,在上課過程中運作穩定、價格合適、功能齊全的優點,避免教學過程中要協助排除故障、錯誤等問題。

而在程式開發上,ESP32可用原廠的ESP-IDF開發工具開發之外,也可進一步使用MicroPython,但ESP32開發相容於Arduino IDE,僅需安裝ESP32開發核心。

下集將簡略說明如何安裝及設定ESP32的開發環境,敬請期待。

 

*本文經MakerPRO同意轉載,原文連結,特此感謝


【MakerPRO】科技防疫 用AI與RPi建立流感、新冠風向雷達 - FluSense

$
0
0

在「大數據」一書中,Google發現某地區的人搜尋「感冒」或相關字眼的次數增加,進而推斷出某些地區開始流行感冒,此對防疫可說是一大貢獻。

作者

陸向陽,本文經MakerPRO同意轉載,原文連結

事實上我國也有建立疫情通報系統,即便是偏鄉診所,發現可疑的傳染病時,至少也必須傳真或電話通報,至於都會醫院更是採電子信件或直接連線通報,未通報查證屬實將受罰。

不過疫情通報系統的感應末梢只到診所,仍不是第一線,即便是Google的區域性熱門搜尋,也可能產生偏頗,例如某區人口密集或居民e化較深,搜尋次數可能較多。加上去年底至今的新冠肺炎(COVID-19)風暴困擾全球,我們似乎需要更即時公允的第一線疫情偵測能力。

對此,美國麻塞諸塞州大學阿默斯特分校的助理教授Tauhidur Rahman與他實驗室裡的博士學生Forsad Al Hossain,共同提出了FluSense的裝置,該裝置期望能更即時有效的探測流感/新冠疫情動向,使醫療團隊能更即時有效地因應。

美國麻州大學阿默斯特分校的助理教授Tauhidur Rahman(圖左)與他實驗室裡的博士學生Forsad Al Hossain(圖右)共同提出了FluSense的裝置(Hossain手中的白盒)。(圖片來源:美國麻塞諸塞州大學阿默斯特分校)

FluSense相關影片報導:

解析FluSense裝置

FluSense是以一個樹莓派(Raspberry Pi, RPi)為主體、主控系統,在相關報導中並沒有強調使用的是第幾代的樹莓派,但從相關圖片上來看是典型的B型樹莓派。

樹莓派主要連接兩個感測裝置,一是一個具備紅外線熱感應的影像感測器(攝影機),另一則是一組麥克風陣列(Microphone Array,或稱陣列麥克風Array Microphone, Array MIC)。

熱影像感測器即是與過去SARS到近期COVID-19所施行的防疫方式一樣,是透過感測每個路經者的皮膚表面是否溫度較高(影像色溫會偏亮)而判定是否有發燒,發燒即可能是患者。

麥克風陣列則是用兩個或兩個以上的麥克風,共同即時捕捉現場環境的聲音,但因為麥克風位置配置的差異,感測到聲音信號也會不同,如此可透過交叉比對運算把環境中的雜音過濾掉,使想要聽到的聲音信號更純淨。在FluSense的應用中麥克風陣列是用來捕捉咳嗽聲的,其他聲音則會濾掉。

進一步的,捕捉到的疑似發燒信號、咳嗽信號需要進一步的研判,這時就需要用上人工智慧(AI)運算。不過,樹莓派在人工智慧方面的執行運算力有限,恐無法支援因應現場的立即辨識運算,所以FluSense還會加裝上一個人工智慧加速運算裝置,即Intel的Movidius NCS2神經運算引擎(條棒狀外觀),以USB介面方式與樹莓派連接。

所以FluSense感測到的影音資訊會即時在Movidius NCS2內先行運算,之後將運算結果透過有線或無線網路拋丟到後方雲端,集中上報,這時再進行進一步的運算,並將可疑動向標在地圖上,供醫療團隊研判與行動。

FluSense的主要硬體構成。(圖片來源:美國麻塞諸塞州大學阿默斯特分校)

 

FluSense用上一片樹莓派、一個攝影機、一組麥克風陣列、一個AI加速棒,目前的設計是將四者配置在一個盒內,但感測鏡頭、麥克風等會露出外殼。盒的體積根據報導所言約僅一個字典大,言下之意在各種環境中都很好擺設、配置。

FluSense最初配置在麻州大學健康服務診所的4間候診室內,經過半年的時間已收集了35萬張熱影像圖片與2,100萬筆非語音(只需要咳嗽聲或相關聲音,人的講話聲等話語內容會被濾除)的樣本資料。

FluSense感測到的熱影像,並透過人工智慧對人進行標示。(圖片來源:美國麻塞諸塞州大學阿默斯特分校)

 

小結

FluSense可以自動回報疑似資訊,省去人力回報的麻煩,事實上也確實有人開發疫情通報的App,如英國倫敦的國王學院醫院(Kings College Hospital)研究人員就與新創業者Zoe合作開發自助回報的App,稱為C-19 COVID Symptom Tracker,24小時內就被下載75萬次。

然而如前所言,人工回報可能會出現一些偏頗,且較費力。相對的,FluSense預計將擴大裝設量與裝設位置,期望透過平均或合理的地理覆蓋得到自動且一致性標準的回報。不過,現階段FluSense得出的推論結果,仍是被當成多一個輔助比對驗證用的選項,不是醫療團隊的主要研判方法。

比較可惜的是,目前FluSense似乎尚未釋出其相關軟體程式,包含樹莓派這端執行的控制程式、人工智慧辨識程式,也包含遠端匯集的程式,而FluSense的硬體組成卻相當簡單,透過USB或MicroUSB介面即可完成連接,連GPIO接腳都不會用到。

或許其他有心的創客也可以比照FluSense所用硬體規格,另行發起共同開程式開發的專案,一樣能實現類似疫情動向的預警雷達系統,嘉惠大眾。

FluSense(圖中下位置)可協助疾病傳染的模型預測。(圖片來源:美國麻塞諸塞州大學阿默斯特分校)

 

延伸閱讀:

 

*本文經MakerPRO同意轉載,原文連結,特此感謝

【開箱】Grove Beginner Kit for Arduino-免複雜接線的Arduino學習套件

$
0
0

給Arduino初學者的一份禮物,擁有10個感測器和教學資源的多合一Arduino相容板,適合STEAM教育相關的初學者

在學習新事起步總是相當困難,對於Arduino初學者來說也是一樣。需要學習硬體知識、程式設計、了解各種複雜針腳的連接方式,甚至需掌握焊接技巧;在開始學習Arduion程式設計之前,需要準備的事情很多…..現在只需要擁有Grove Beginner Kit for Arduino就能夠解決您的前期準備的問題喔!

作者/攝影 曾吉弘/CAVEDU教育團隊
時間 1hr
難度 ★☆☆☆☆
材料表

 

接線這件事

 V 接 V,地接地,剩下的接訊號。想必各位玩過任何電子元件專題的朋友們不難明白這句話的意思。Arduino 這類入門開發板更是如此,LED亮起來和燒掉對於自己的震撼是依樣大的。因此,我們總是需要那個第一次的勇氣來接線,如果不小心燒過一次的話,心中陰影面積又更大了……

這套 「Grove Beginner Kit for Arduino 」概念很簡單,把一片 Arduino 相容開發板 (Seeeduino Lotus ,以下簡稱為Seeeduino)和10個常用的 Grove 模組整合成一整片電路板,模組已經都拉好線且都標示好腳位名稱了,也就是說,一條線都不用接就可以用這些預先拉好的線來控制所有的模組!

 

後續有需要的話,您當然可以把模組拆下來再使用Grove訊號線連接模組。相信這套「Grove Beginner Kit for Arduino」很適合初學者使用,打造出各種豐富有趣的 Arduino/Seeeduino 專題。

 

學習目標

  • 對於開放原始碼硬體有基本的理解
  • 基礎 Arduino 程式設計
  • 感測器通訊原理與讀值方式
  • 動手實作各種開放原始碼硬體

 

元件清單

整片電路板包含以下元件(尺寸為17.69 * 11.64 * 1.88 mm):

元件名稱 說明 預設腳位與模式
Grove – LED 簡易的LED模組 D4(數位輸出)
Grove – Buzzer 壓電式蜂鳴器 D5(數位輸出)
Grove – OLED Display 0.96” 128×64 解析度小螢幕 I2C, 0x78(預設位址)
Grove – Button 按鈕 D6(數位輸出)
Grove – Rotary Potentiometer 旋轉式電位器(可變電阻) A0(類比輸入)
Grove – Light 檢測環境光的強度 A6(類比輸入)
Grove – Sound 檢測環境聲音的強度 A2(類比輸入)
Grove – Temperature & Humidity Sensor 檢測周圍的溫度和濕度值 D3(數位輸出)
Grove – Air Pressure Sensor 檢測周圍的大氣壓力 I2C, 0x77(預設) / 0x76(可選)
Grove – 3-Axis Accelerator 檢測本體三個軸向的加速度大小 I2C, 0x63(預設)
Seeeduino Lotus 具有Grove連接埠的Arduino相容開發板

Arduino IDE 與驅動程式

由於 Seeeduino Lotus 與Arduino UNO使用同一片 ATMEGA328 微處理器 (需另外安裝 CP2010N 驅動程式),而且腳位配置方式相同,因此在 Arduino IDE 中直接當成 Arduino UNO 來使用即可,非常方便。絕大多多數的 Arduino UNO 範例也可直接使用,後續要搭配擴充板的話,也沒有問題。

期待這套Grove Beginner Kit for Arduino 極簡套件在您的手中發揮出大大創意喔!

 

商品介紹影片

 

最後與大家分享一個好消息,CAVEDU要準備出版關於Grove Beginner Kit for Arduino 的繁體中文操作教學書籍囉!書名《Arduino首次接觸就上手》裡頭結合了Arduino UNO相容板、10種常見電子元件以及操作教學手冊,歡迎有興趣的朋友們用新台幣支持我們!

現在購買前20名可免費參加《Arduino首次接觸就上手》新書體驗會喔!

 

《Arduino首次接觸就上手》新書體驗會|台北場  我要購買台北場

『CAVEDU教育團隊』創辦人曾吉弘博士與『台灣自造者協會』理事長鄭鴻旗共同主持

  • 時間:2020年07月22日(週三)
  • 晚上19:00~21:00(18:40開始入場)
  • 地點:Fablab Taipei 台北自造實驗室|台北市中山區玉門街1號(花博公園圓山園區,爭豔館對面)

 

《Arduino首次接觸就上手》新書體驗會|高雄場  我要購買高雄場

『CAVEDU教育團隊』創辦人曾吉弘博士主持

  • 時間:2020年07月27日(週一)
  • 晚上19:00~21:00(18:40開始入場)
  • 地點:創客萊吧 MakerLab|高雄市左營區博愛二路202號 B1(博愛路上心心寵物醫院旁邊鐵門,上面有掛創客萊吧的帆布,推門進入即可)

*貼心小提醒:請攜帶可以無線上網的筆記型電腦來參加喔!

【MakerPRO】Maker電子學-I2C 界面解密—PART 4

$
0
0

上一篇文章【Maker電子學】I2C 界面解密 — PART 3,我們聊了 I2C(以下寫作 I2C) 界面的底層邏輯協定,但是我們發現 I2C 的標準只定義了對裝置的單一/連續的讀取與寫入,並沒有定義我們常使用的暫存器編號使用方法,那麼這些用法是怎麼來的呢?這一次我們就來探討這個部分。

作者 Bird,本文經MakerPRO同意轉載,原文連結

一切都從 EEPROM 開始

我們上次說過,I2C 誕生在一個淳樸的年代,那時候的週邊晶片並沒有爲數衆多的暫存器可供讀寫,因此 I2C 也就沒有定義什麼暫存器位址之類的協定。當時大部分的 I2C 週邊晶片都只有一兩個 8-bit 的暫存器,因此不管是讀或是寫,頂多連續讀寫幾個 byte 就可以了。

但自從 EEPROM 出現之後,這種只用連續讀寫來存取多個暫存器的方法就顯得很笨拙了。假設今天我們有一顆 256 bytes 的 EEPROM,我們總不能每次讀取時都下一個連續讀取 256 bytes 的指令,把它的內容全部讀出來吧?如果寫入的時候這樣做,EEPROM 的壽命很快就會用完了。

因此,當 I2C 的 EEPROM 出現時,就帶入了索引(index)這個協定上的概念。

索引暫存器

這個概念是,EEPROM 的內部有一個稱為 index 的暫存器,它就像一個指標,指向我們要讀取或是寫入的位置。每一次我們對 EEPROM 下寫入指令時,第一個寫入的 byte 就是寫入這個 index 暫存器,接下來寫入的資料才會寫到這個 index 暫存器所指向的位置。

以 24C02 這樣的 EEPROM 爲例,它的容量是 2 Kbits,或是 2048 / 8 = 256 bytes,因此一個 byte 的 index 暫存器剛好可以用來指向 0-255 的位置,也就可以用來存取整顆 EEPROM 的內容。

如果我要對 EEPROM 的第 0 個 byte 寫入一個 0x77 這樣的值,在 I2C 上就要用這樣的指令:

這是一個 2 bytes 的連續寫入指令,它連續寫了 0x00 和 0x07 這兩個值到 EEPROM 的 I2C slave address。根據上面說明的,寫入 I2C EEPROM 的第一個 byte 一定會寫入它的 index 暫存器,因此當第一個 byte 寫完時,index 暫存器的內容就會變成 0x00,而接下來對 EEPROM 所操作的任何動作,不管是讀取還是寫入,都是對著 index 所指向的這個位址進行,因此上面這個指令就會把 0x77 寫到 EEPROM 的 0x00 這個位置裡。

那要讀取 EEPROM 的內容時該怎麼做呢?讀取的時候比較麻煩。假設我們要讀取 EEPROM 裡面位於 0x02 這個位址的內容,我們得先寫一個 0x02 到 EEPROM 的 I2C slave address,然後再對同一個 slave address 下讀取的指令,讀回一個 byte。整個指令會變成這樣:

看起來比第一個寫入資料的指令複雜很多,但其實只要知道它的結構就不會那麼令人疑惑。

第一個寫入的指令同樣會寫入 index 暫存器,以上面的例子來說就是將 index 暫存器設爲 0x02,因此接下來的動作都會對著 EEPROM 裡面 0x02 這個位址操作。

寫入指令結束後,緊接著是一個 START 狀態,當 I2C 裝置看到 START 狀態,就知道接下來的這個 byte 是 slave address。這種沒有經過 STOP 狀態而直接來的 START 狀態,叫「RESTART」,事實上跟一般的 START 沒有什麼不同,一樣是一個 SCL 爲 high、SDA 下降的訊號,它的目的是用來告訴裝置接下來的動作變成讀取(還記得嗎?I2C slave address 的最後一個 bit 代表這個指令是寫入還是讀取,寫入是 0,讀取是 1)。

當我們下了 RESTART 狀態以及讀取的 I2C slave address 後,目標裝置就會知道接下來要吐資料出來,此時 master 繼續切換 SCL 訊號,slave 裝置會把資料放到 SDA 上,讓 master 讀回來,而根據我們前面說明的協定,由於 index 暫存器已經在前一個寫入指令時被設定爲 0x02,此時讀出來的資料就是 0x02 這個位址的內容。

自動加一

Index 這個索引暫存器除了用來指向要讀寫的資料外,還有一個特點:每次讀寫完之後就會自動加一。因著這個特性,如果我們寫完一個 byte 後,沒有立即送出 STOP 狀態,而是繼續送出資料,那麼接下來的資料就會依序被寫入後面的位址;讀取時也一樣,如果我們讀完一個 byte 之後不送 non-acknowledge 也不接 STOP,而是繼續切換 SCL,EEPROM 就會繼續依序吐出接下來位址裡面的資料。

這種連續讀取的功能叫「sequential read」,它可以從一個特定的位址開始一直讀一直讀,沒有長度的限制,就算你已經讀到 2 Kbit EEPROM 的最後一個位址 0xff,index 暫存器會自動歸零,你可以繼續從第一個位址 0x00 讀起。

不過寫入時狀況就有一點不一樣。由於 EEPROM 寫入需要一點時間,而且這個時間相對 I2C bus 的速度來說並不快,通常在數個 ms 左右,因此 EEPROM 的連續寫入指令長度有限制。

EEPROM 在收到來自 I2C bus 的指令後,會先把要寫入的資料暫存在一個寫入用的 buffer 中,再慢慢寫入,因此這個寫入用 buffer 的大小就限制了連續寫入指令的長度,常見的限制是 16 或 32 個 bytes,詳情要看每一顆 EEPROM 的 datasheet。

在 EEPROM 裡面,記憶單元是以一個 page 一個 page 這樣的單位排列的,page 是 EEPROM 更新資料的最小單位,因此這個寫入 buffer 的長度通常會跟 EEPROM 的 page size 一樣,除此之外,大部分的 EEPROM 在單一的連續寫入指令中,不能跨越 page 的邊界。

頁的邊界

我們用個實際的例子來說明 page 的概念。下圖是 24C02 這個 I2C EEPROM 的內部結構圖(事實上大部分的 I2C EEPROM 結構都是這個樣子):

左邊框起來的那個 address register and counter 就是我們說的 index 索引暫存器。根據 24C02 的 datasheet,它的 page size 是 16 bytes,因爲總容量是 256 bytes,所以總共有 256 / 16 = 16 個 page。

Page 的位址是連續排列的,因此 0x00 – 0x0f 的位址是一個 page,0x10 – 0x1f 的位址是下一個 page,以此類推。如果我們從 0x00 開始下連續寫入的指令,最多就可以下 16 個 bytes,寫到 0x0f,但如果我們從 0x12 開始下連續寫入的指令,最多就只能下 14 個 bytes,寫到 0x1f,再多就會發生錯誤。

大部分的 I2C EEPROM 設計會讓寫入 buffer 繞到同一個 page 的前面,也就是說如果你從 0x12 開始連續寫 16 個 bytes,第 15 和第  16 個 byte 就會分別被寫入 0x10 和 0x11 這兩個位址(雖然這是一種可以預期的結果,但還是儘量不要這樣操作比較好)。

由於 EEPROM 的寫入是以 page 爲單位,因此寫入一個 byte 和寫入一個 page 所需要的時間是一樣的。這個時間大概在數個 ms 左右,對大部分的 MCU 來說都是個不能忽略的時間,因為如果 EEPROM 還在忙著寫入,而 I2C 上又捎來新的指令, EEPROM 就會用 non-acknowledge 狀態回應 slave address 的點名指令,因此對 MCU 來說剛下完寫入指令的 EEPROM 是不能馬上接著操作的。

不是 EEPROM 的裝置

除了 EEPROM 以外,還有很多週邊裝置 IC 使用 I2C 界面作爲和 MCU 或是系統晶片溝通的橋樑。大部分的週邊裝置 IC 內部有許多用來設定功能或是讀取狀態的暫存器,如果暫存器的總數小於 256 個,它們大概就是遵循我們今天所說明的讀寫方式來操作。

舉個例子,我們之前介紹過 TI 的 LM73 這顆數位界面的溫度感測器,這顆晶片就是使用跟 I2C 相容的界面來存取內部的暫存器。LM73 裡面總共有 6 個暫存器,因此它在讀寫時允許的 index 範圍就是 0 到 5。

我們來看一下 LM73 的 datasheet 中,讀取一個暫存器內容的時序圖:

有沒有覺得這個時序圖跟我們這次介紹的時序圖很像?圖中的 Frame 1 就是寫入的 I2C slave address 指令,Frame 2 就是要讀取的暫存器編號,也就是要寫入 index 的值(在這裡 TI 稱之爲 pointer)、Frame 3 是 RESTART 狀態之後讀取 I2C slave address 的指令,接下來讀出來的那個 byte 就是 LM73 對應的暫存器內容。

這些使用 I2C 界面操作的週邊 IC,使用起來其實就像是一顆 I2C EEPROM,而裡面的暫存器就像是 EEPROM 裡面的每一個記憶單位,因此只要會使用  I2C EEPROM,就會使用  I2C 和這些週邊 IC 溝通了。

這些週邊 IC 內部暫存器通常是 SRAM,寫入的速度非常快,因此沒有 EEPROM 那種寫入要等待的麻煩手續,也沒有什麼 page 邊界的問題,使用起來其實更簡單;不過由於各家廠商在實作 IC 時多少還是會有一些細節上的差異,實務上還是要詳細閱讀 IC 的 datasheet 以確定使用 I2C 通訊的正確方法。

小結

這次我們用 EEPROM 爲例子,完整說明了用 I2C 界面操作週邊 IC 的方法。下一回我們要進入到 I2C 界面,比較少人接觸到的一些協定細節,如時脈延展(clock stretch)和廣播(broadcast)等動作。

 

*本文經MakerPRO同意轉載,原文連結,特此感謝

【MakerPRO】AI_Column-如何以YOLOv3訓練自己的資料集 ─ 以小蕃茄為例

$
0
0

在人工智慧的電腦視覺領域中,最常見的應用包括影像分類、物件偵測、像素級物件影像分割(語義分割及實例分割),其中以物件偵測的應用範圍最廣。

近年來物件偵測的算法(模型)不斷推陳出新,從最早的二階式(R-CNN、Fast R-CNN、Faster R-CNN)高精度算法演變到現在一階式(YOLO、SSD、R-FCN)高效算法,在這之中以 YOLO(You Only Look Once)系列最受大家喜愛。

作者 許哲豪 Jack,本文經MakerPRO同意轉載,原文連結

目前 YOLO 已演進至第三代(下簡稱 YOLO v3),其主要搭配 Microsoft COCO 物件偵測 80 分類做為預設訓練資料集,如果只需偵測常見物件偵測(如人、動物、車輛等),那直接利用 YOLO 預訓練好的模型及權重值就可應用到實際場域了,不過這 80 類物件通常很難滿足我們的需求,因此如果想應用自己準備的資料集,如何收集(取像)、標註、訓練資料集及進行最後的推論就顯得非常重要,接下來就以辨識(偵測)小蕃茄為例為大家介紹完整的工作流程:

此次會以小蕃茄為例主要是受到去年 FarmBot Taiwan User Group(FBTUG)總召哈爸號召多位創客高手及科技農夫創作的台版「開源採收機器人(HarvestBot)」專案所激勵。當時有許多電腦視覺及人工智慧高手投入水果的物件辨識(位置及尺寸,不含深度距離)程式開發,主要實驗對象是彩椒和柑橘,但受限於人力及優先順序,小蕃茄辨識部份暫被擱置。

由於今年接到 Intel 邀約分享 RealSense D435 深度感測器應用案例,因此想到重啟小蕃茄辨識案,同時也希望解決去年無法處理的深度(距離)計算的問題。由於撰文當下並不是小蕃茄產季,也沒有伙伴能提供實際場域取像,因此直接上網買了一串假的塑膠小蕃茄作為實驗對象,說實在的,除了綠色的蒂頭比較塑膠感外,整體而言非常逼真,很適合作為測試範本。以下所有範例程式、資料集皆可從筆者的OmniXRI部落格Github 取得,請多多利用。

建立資料集

為了使後續訓練的成果較理想,取像和訓練影像條件要盡可能接近,因此這裡直接使用 RealSense D435取像(彩色影像),而不採用其它高階、高解析度的攝影機,另外這麼做還能順便取得因攝影機本身受光照(白平衡、亮度、對比、色相等)及其它干擾產生的雜訊(如熱雜訊、低照度雜訊等)。

通常如果要作為深度學習的影像資料集,少說得取得幾千張,甚至數十萬張影像,但這裡只是示範如何建構,因此僅對小蕃茄的正反面各取數十張影像當作測試,其取像及測試環境如下圖所示,後續也可依需求自行增加影像的數量,至於如何取得 RealSense D435 的彩色影像可參考【3D感測器】如何擷取Intel RealSense™串流影像到OpenCV

雖然訓練影像不足時可以透過影像平移、旋轉、縮放、亮度、對比、色彩調整等方式來擴增,但物件的紋理、視角、光照、形變等差異是不容易以資料擴增(Data Augmentation)的方式完成,因此在建立資料集時,資料的多樣性部份要特別留意。

由於沒有實際場域可以取像,所以只能反向操作,讓攝影機不動,移動、旋轉小蕃茄,以這種方式取得多種位置及視角的影像,其中也包含因移動產生的模糊影像。這裡為了加快取像速度及與加大影像間的差異,設定攝影機以連續取像模式進行取像,每隔 1/3.3 秒(10 frames @ 30 FPS)取一張影像並存成 JPG 格式,另外也為減少後續訓練資料集時間和因計算所需的記憶體空間,所以單張影像取像大小僅為 640×480 像素,而非 RealSense D435 的最大解析度 1920×1080 像素,最後本範例共取得小蕃茄正面 92 張、反面 79 張,合計 171 張影像,完整的影像資料集請參考OmniXRI部落格 Github 下 VOC2007\JPEGImages。

標註資料集

有了自己的影像資料集後,接著要開始對其進行標註(Annatation),就是把每一張影像中的每一個小蕃茄的位置標上一個物件框,不過為了後續方便其它訓練框架也能輕鬆讀取標註資料,這裡採用 VOC2007 的物件標註格式,而不直接採用 YOLO 自訂的格式。

首先新增一個名為 VOC2007 的資料夾,其下分別新增 Annotations 資料夾存放標註資料(.xml)、ImageSets\Main 資料夾存放工作清單(.txt)及 JPEGImages 資料夾存放原始影像(*.jpg),如下圖:

有了影像後要如何標註呢?目前市面有許多免費開源工具可以使用,網路上也有許多教學範例,有需要的可以參考【AI實戰】手把手教你訓練自己的目標檢測模型(SSD 篇)【採果辨識】建立自己的YOLO影像辨識模型 — 以柑橘為例,這兩篇文章都是以 LabelImg 為例。

標註時 LabelImg 預設路徑會將產生的標註檔(.xml)放在原始圖檔(.jpg)的路徑下,每一張 jpg 影像檔標註完後會產出一張同名的 xml 檔,可以等全部標註完後再一起搬到 \Annotations 下即可。標註時由於小蕃茄會有多層重疊問題,所以只標註靠外側(層)較完整的和第二層有露出超過 1/2 以上的,完整的影像標註內容可參考本Github 下 VOC2007\Annotations。

接著要分配資料集大小,包括訓練集(train.txt)、驗證集(val.txt)、測試集(test.txt)及訓練加驗證集(trainval.txt)。若執行本部落格 Github 下 my_dataset.py,就會自動隨機把影像資料集分成三個部份,其比例可自定,預設訓練加驗證集大約佔全部數量的 2/3(trainval_percent = 0.66),而訓練集佔前述比例的一半(train_percent = 0.5),完成分配後,存放路徑在 VOC2007\ImageSets\Main 下,而各資料集清單檔(*.txt)即為不含副檔名的影像名稱清單。

訓練資料集

一般要訓練 YOLO v3 可選擇使用原始的 DarkNet 方式或使用常見的 AI 框架。本文主要參考【AI 實戰】動手訓練自己的目標檢測模型(YOLO 篇)完成實驗,而這篇又是參考 GitHub 上 qqwweee 以 Keras 框架為基礎完成的,所以本文也可說是簡化它後完成的,完整程式請參考本Github

在程式執行前請先依照【AI 實戰】動手訓練自己的目標檢測模型(YOLO 篇)將 Keras 及相關依賴元件安裝好,並另行下載 YOLO v3 預訓練好的權重文件 yolov3.weights(約 243 MB)。

  • 資料集格式轉換

VOC2007 格式所產生標註檔(.xml)內容會如上圖所示,主要表示物件框的方式為左上(xmin、ymin)及右下(xmax、ymax)座標,和 YOLO 格式不同,所以要依資料集清單檔(.txt),將個別標註檔(*.xml)轉換成物件編號加上物件框中心座標及尺寸格式後再寫至另一個清單檔。

這裡只需執行執行本部落格 Github 下 my_voc_annotation.py 即可產生 2007_tarin.txt、2007_val.txt 及 2007_test.txt 三個 YOLO 格式的清單檔。由於目前只有一個類別 tomato,所以 my_voc_annotation.py 中只需定義 classes = [“tomato”] 一個項目即可,另外 \model_data 下有一個 my_classes.txt 即是此次所需自義類別的標籤檔,同樣地只需定義 tomato 一個項目即可。

轉換權重文件

由於此次使用的是 Keras 框架,所以須把下載到的 YOLO 預訓練權重值轉成 Keras 格式(*.h5),執行本部落格 Github 下 convert.py 即可轉換完成並置於 \model_data 下,其完整指令如下所示。

python convert.py -w yolov3.cfg yolov3.weights model_data/yolo_weights.h5

執行模型訓練

接下來就可以執行本部落格 Github下 my_train.py 進行小蕃茄影像像訓練,訓練前要設定好下列參數(程式碼前二位數字為列號)。如果 GPU 記憶體不足導致訓練到一半程式中止時,可把第 56 列批次數量設小一些;如果想先大概測一下(未完全收斂),可將第 62、82、83 列數值設小一點。最終訓練完的結果會存放在 \logs\000\trained_weights_final.h5,若不滿意結果想從這個結果繼續訓練,則可將此權重檔複製到 \model_data 下,再將第 32 列程式修改成 weights_path=’model_data/ trained_weights_final.h5′ 即可。

另外如程式第 35、36列,在訓練過程每隔幾個遍歷(Epoch)就會有檢查點並會存權重結果臨時檔,萬一不幸還沒訓練完成程式就意外終止時,可使用這些檔案當成起始權重檔使用,不過由於程式每次存檔是以第幾次遍歷加上損失率做為檔名且不會自動刪除,所以可能會佔用巨量的磁碟空間,建議可改為存同一個名稱,保留最後一次成果權重檔即可;另外如果需要將 YOLO 模型及權重完整存檔以供其它程式或框架使用,則可把第 86 列改成 model.save() 即可。

16 annotation_path = '2007_train.txt' #待訓練清單(YOLO 格式)
17 log_dir = 'logs/000/' #訓練過程及結果暫存路徑
18 classes_path = 'model_data/my_classes.txt' #自定義標籤檔路徑及名稱
19 anchors_path = 'model_data/yolo_anchors.txt' #錨點定義檔路徑及名稱

32 freeze_body=2, weights_path='model_data/yolo_weights.h5') #指定起始訓練權重檔路徑及名稱

35 checkpoint = ModelCheckpoint(log_dir + 'ep{epoch:03d}-loss{loss:.3f}-val_loss{val_loss:.3f}.h5',
36 monitor='val_loss', save_weights_only=True, save_best_only=True, period=3) #訓練過程權重檔名稱由第幾輪加上損失率為名稱

56 batch_size = 24 #批次處理數量,依 GPU 大小決定

62 epochs=50, #訓練遍歷次數
63 initial_epoch=0, #初始訓練遍歷次數

82 epochs=100, #訓練遍歷次數
83 initial_epoch=50, #初始訓練遍歷次數

86 model.save_weights(log_dir + 'trained_weights_final.h5') #儲存最終權重檔

影像推論

訓練完成就可以來測試推論效果如何,執行本部落格 Github 下 my_yolo.py 即可,這裡為求簡單起見,直接於程式第 216 列指定待推論影像檔(如果想改成外部參數或變成對影片檔連續推論可自行修改)。

216 path = 'C:/Users/jack_/my_yolo3/VOC2007/JPEGImages/img_1550.jpg' #指定待測影像檔案路徑及名稱

下方是程式第 22~30 列,推論前除指定權重檔、錨點定義檔、標籤檔外,最重要的是指定置信度門檻和重疊區比例,而值要設多少就看實際偵測到多少個物件及外框尺寸精度來調整。

22 _defaults = {
23 "model_path": 'model_data/trained_weights_final.h5', #指定 YOLO 訓練完成權重檔路徑及名稱
24 "anchors_path": 'model_data/yolo_anchors.txt', #指定錨點定義檔路徑及名稱
25 "classes_path": 'model_data/my_classes.txt', #指定自定義標籤檔路徑及名稱
26 "score" : 0.1, #最低置信度門檻(0.01~0.99)
27 "iou" : 0.45, #重疊區比例(0.01~1.0)
28 "model_image_size" : (416, 416), #影像尺寸
29 "gpu_num" : 1, #使用GPU數量
30 }

由於本文使用的影像資料集非常少,且訓練的次數也不足一百次,所以小蕃茄被正確檢出的比例並不高,所以將置信度調得很低,以方便呈現檢出結果。另外一般測試時是絕對不能將訓練集和驗證集當作測試集,但本實驗因為影像資料集太小及訓練次數不多,所以就直接拿所有影像當成測試集以方便大家了解結果,不妥之處敬請見諒。完整的結果影像動畫 GIF 檔可參考本Github 下\Result\tomato_ori.gif(原始影像檔)及tomato_yolo3.gif(推論結果檔)。

另外這裡補充兩個小程式,yolov3_keras_to_darknet.py 方便大家將 Keras 訓練好的 YOLO 模型轉回 DarkNet 權重檔(.weights),而 h5topb.py 則可將模型和權重轉換到 TensoFlow(.pb),有興趣的朋友可以試一下。不過這裡提醒一下,如果想在 Intel OpenVINO 下執行的朋友,請直接將權重檔從 .h5 格式轉成 DarkNet *.weights 格式再送至 Model Optimizer 轉換成 IR 格式(.xml、*.bin),而不要轉成 TensorFlow *.pb 格式再送到 MO 轉 IR,以免無法順利執行。

小結

YOLO v3 是非常普遍及高效的物件偵測深度學習模型,只要多花一點時間取得夠多的影像集並進行仔細的標註及長時間的訓練,相信像小蕃茄這類層疊疊的物件也能順利檢出,後續若再配上像 Intel RealSense D435 深度感測器的深度影像資訊,自動採收小蕃茄的機器手臂很快就能土炮出來了。

 

參考資料:

 

*本文經MakerPRO同意轉載,原文連結,特此感謝

【App Inventor 路徑規劃專題】使用 Navigation 導航元件

$
0
0

 MIT App Inventor 於日前的更新推出了 Navigation 導航元件,使用 Openrouteservice 線上服務,您需要先到這個網站申請一個 api key 之後就可以使用了。Navigation 導航元件位於Map分類中,直接新增到您的 app 畫面中即可。本範例 .aia 原始碼請由 App Inventor 中文學習網下載,元件 詳細說明請點我

作者/攝影 曾吉弘

App Inventor 路徑規劃專題,使用 Navigation 導航元件

   介紹 Navigation 導航元件幾個重要的屬性:

  • ApiKey:請填入您在 Openrouteservice 線上服務所申請的 api key
  • StartLatitude / StartLongitude:起始點經緯度,可以動態指定也可以在此寫死,本範例的起始點經緯度為動態指定
  • StartLatitude / StartLongitude:終點經緯度,可以動態指定也可以在此設定,本範例的終點經緯度直接指定為蘆洲國中
  • Transportation method:移動方式,提供了走路(Walking)、開車(Driving)、腳踏車(Cycling)與輪椅(Wheelchair)。國外對於無障礙空間的要求相當高,國內的話我覺得看看就好。本範例將使用開車(Driving)

Designer

   畫面配置如下圖,畫面最上方有兩個 textbox 來檢視起始點的緯度(左)與經度(右)。

會將該點的座標分別更新在這裡。點選 [取得導航資訊] 按鈕就會對 Openrouteservice 進行呼叫,並將結果以一個 list 來回傳。在此我們巧妙地(自己說)運用一個 lineString (線條字串)元件,直接把 Navigation 的回傳結果設定為 lineString 元件的路點(points)就搞定了!

   另外還加了兩個 Marker 標記元件來代表起始點與終點。起始點(藍色 marker) 會自動移動到您點選的地圖位置上,終點(紅色 marker) 在本範例中則為固定,您之後可以自由修改這個功能。

Blocks

1. 點選地圖上任何一點時,會啟動 TapAtPoint事件並回傳點擊處的緯度(latitude) 與經度(longitude)。在此我們會先把標記_起點元件(藍色)設為可見(一開始不可見),並根據該點經緯度來移動藍色標記、顯示於 TextBox 並設定 Navigation 元件的起始點經緯度。

2. 按下[取得導航資訊] 按鈕,就執行 RequestDirections 方法來取得路徑規劃,並自動呼叫下一步的 GotDirections 事件

3. 在 GotDirections 事件中,把取得的資訊全部顯示在畫面下方的標籤來看看吧,如果路徑很長,當然就會一大堆資訊跑出來。接著顯示 lineString 元件,並把回傳的 point 直接設定為 lineString 元件的 PointsFromString,輕輕鬆鬆。

執行畫面    

   程式開始時,只會看到紅色標記代表終點

點選地圖看看吧,會在您點選的地方出現藍色標記,並把該點的經緯度座標顯示出來。按下按鈕就可以看到路徑囉!

不同路徑的規畫結果

 

歡迎加入 MIT App Inventor 台灣使用者社群 ,更多有趣範例都在 App Inventor 中文學習網 

 

 

【開箱】Intel RealSense L515 光達深度攝影機開箱介紹

$
0
0

Intel RealSense L515 可以用 OpenVINO 取得你的年齡與性別

Intel RealSense L515 是世界上最小的高解析度光達深度攝影機,是 Intel 光學雷達深度家族的第一款產品,適用於在室內取得高解析度和高精度深度資料。Intel 的宣傳頁面上提供的 L515 使用案例為物流、機器人、以及3D掃描。L515 的優點很多,其中最亮眼的前五項是:

  1. 尺寸小又輕:只有 100 克重。
  2. 高解析度:宣稱每秒 2300 萬像素,在深度影像解析度為1024 x 768下可以達到 30 fps。
  3. 可用範圍大:0.25m ~ 9m 之間都可以使用,最大 Z 誤差為 15.5mm。
  4. 功耗小:低於 3.5W。
  5. 搭載多種感測器:除了可以取得深度影像、彩色影像、紅外線影像之外,跟之前的RealSense系列一樣有加速度感測器以及陀螺儀。

本文大綱

  • Intel RealSense L515 開箱
  • 以 RealSense Viewer 為介面的 L515 功能介紹
作者/攝影 蔡雨錡
時間 1hr
難度 ★☆☆☆☆
材料表

Intel RealSense L515 開箱

在開箱之前,先來看一下Intel RealSense L515 的規格。

項目 特性 備註
使用距離 0.25~0.9m 室內
深度影像 FOV:70° × 55° (±2°)

最小深度距離(Min-Z) : 0.25m

解析度跟幀率:1024 x 768 / 30 fps

RGB彩色影像 FOV : 70°±3 × 43°(±2°)

解析度跟幀率:1920 x 1080 / 30 fps

使用OmniVision OV2740模組
尺寸 61mm x 26mm
支援套件 OpenCV、PCL、OpenNL、Unity、ROS、Unreal Engine 開發者網頁
支援程式語言 Python、C/C++、C#、LabVIEW、Node.js、MATLAB

 

由於 L515 是一個圓形的攝影機,其外包裝是一個方盒。

 

打開盒子後,可以看到說明書、L515 攝影機、USB-C 3.1 連接線、以及小型三腳架。

從不同角度欣賞 Intel RealSense L515,除了底部的三腳架所點以及 USB 連接孔之外,背面還有兩個 M3 的螺絲孔。

幫 L515 接上三腳架以及 USB 連接線後的樣子如下圖。

組裝好後,就來測試看看有什麼功能可以使用吧!

 

以 RealSense Viewer 為介面的 L515 功能介紹

由於 RealSense Viewer 要 2.35.2 以上的版本才支援 L515,所以之前裝的 2.35.0 版本不能用了。本篇文章操作中使用 2.36.0 版本進行功能測試,點此到 RealSense Github 查看最新的 RealSense SDK 版本以及各個版本適用的作業系統及 RealSense 攝影機。

開啟 RealSense Viewer 後,將 L515 接上電腦。下圖為第一次使用時,跳出 L515 韌體更新建議的視窗。

韌體更新完畢後,來測試看看左側的三個主要功能:深度感測器(L500 Depth Sensor)、RGB 攝影機(RGB Camera)、動作感測模組(Motion Module)。

深度感測器(L500 Depth Sensor)開啟後可以看到深度影像(左)以及紅外線影像(右)。

RGB 攝影機(RGB Camera)模式的彩色影像中,預設情況下,會使用OpenVINO進行臉部辨識,並可以辨識性別以及年齡。圖中戴口罩的辨識結果為25歲男性,脫了口罩後為36歲女性,真實情況是26歲女性。找其他幾位23歲~26歲女性朋友測,有化妝的情況下也是36~37歲女性,可能大量熬夜會有差,供大家參考。

動作感測模組(Motion Module)開啟後,跟 Intel RealSense D435i 一樣有 Accel(加速度感測器)跟 Gyro(陀螺儀) 這兩個即時資料視覺化的視窗。

接下來就來看看這三個模式的細節如下圖。

 

深度感測器(L500 Depth Sensor)除了顯示基礎資訊以外,還分成控制(Controls)、深度視覺化(Depth Visualization)、影像後處理(Post-Processing)三部分。展開後的細節圖如下,可以根據使用需求做以下參數的調整:

RGB 攝影機(RGB Camera)除了解析度、幀率、串流設定以外,還分成控制(Controls)、影像後處理(Post-Processing)這兩部分。展開後的細節圖如下,可以根據使用需求做以下參數的調整。圖中人臉偵測(Face Detection : OpenVINO)選項預設為開啟。

動作感測模組(Motion Module)的控制部分展開如下圖。

三個模式按照預設數值同時開啟後,最容易突然抓不到圖的是 RGB 彩色影像,遇到這種情況除了開啟電腦風扇、選擇更好的硬體裝置、或是可以關掉 RealSense Viewer 跟拔掉再重新插上 L515。

2D 模式看完後來看看 3D 模式的呈現效果,該模式中會有 L515 在影像中的相對位置 3D 模型:

3D 模式下,可以選擇的來源(Source)為 L515 的深度資訊,如果同時使用多顆深度攝影機,這邊就可以選擇其他來源。顯示的紋理(Texture)有深度、紅外線、彩色影像這三種選擇,選擇後的成果圖在下圖的綠色方框中依照順序顯示。加陰影的方式(Shading)也有三種選擇:原始的點雲(Raw Point-Cloud)、平坦著色網格(Flat-Shaded Mesh)、使用漫射光線(With Diffuse Lighting),選擇後的成果圖在下圖的藍色方框中依照順序顯示。

平常在 3D 圖上隨意選取一點可以得到座標值。使用測量功能(Measure)可以在 3D 圖上任選兩點,就可以取得兩點之間的距離。

想了解有關 Intel RealSense L515 的最新討論議題或是想發問,都可以到 Intel RealSense 的 Github  Issues 頁面查詢或是開新的討論喲!

 

參考資料:

Intel RealSense T265 追蹤攝影機介紹及應用範例

$
0
0

Intel RealSense 家族的 T265 追蹤攝影機,在沒有GPS的情況下可以提供精確的空間中的物體追蹤、掌握空間及地形特徵。

Intel RealSense T265 追蹤攝影機中的Movidius Myriad 2.0視覺處理器經過最佳化,可低功耗運行V‑SLAM。不需要其他設備,在T265攝影機上運行的V-SLAM演算法,在沒有GPS的情況下可以提供精確的空間中的物體追蹤、掌握空間及地形特徵。適用於有追蹤精度要求或是攝影機會大幅度移動的專案。想要進一步了解 Intel RealSense T265 追蹤攝影機,可以參考 Intel RealSense Github 的 T265 介紹文件或是觀看 T265 介紹影片。本篇中的程式操作均在 Jetson Nano 上執行,作業系統為 Ubuntu 18.04。

本文大綱

作者/攝影 蔡雨錡
時間 1hr
難度 ★☆☆☆☆
材料表

Intel RealSense T265介紹

首先是簡單的開箱,Intel RealSense T265 追蹤攝影機盒子是如下圖的長方形。

這樣的盒裝深度很明顯的是沒有像 D435i 或是 L515 那樣有附上三腳架。盒子內的內容物如下圖所示。

正上方看可以看到 T265 的兩顆魚眼鏡頭。背面有兩個M3螺絲孔。附上的連接線兩端規格分別為 USB 3.0 以及 Micro B。

Intel RealSense T265 追蹤攝影機大致上的優缺點整理如下: 

優點:

  • 體積小
  • 兩顆魚眼鏡頭
  • IMU感測器測量設備的旋轉和加速度
  • 5W低功耗
  • 可獨立運行的V-SLAM演算法
  • Movidius Myriad 2.0 VPU
  • 支援跨平台:Windows, Linux, Android
  • 開源的 Host API 函式庫

缺點:

  • 非深度攝影機

 

因為非深度攝影機,所以可以搭配有深度資訊的 Intel RealSense D435i 一併使用,Intel 也有現成的程式碼 rs-tracking-and-depth 以及配合程式的3D列印stl檔案,提供了組裝方法及兩者如何搭配使用的體驗,之後有機會會撰寫文章向大家介紹。

Intel RealSense T265 追蹤攝影機的不同感測器的座標軸方向如下圖,截圖自Intel RealSense T265 Github 文件

T265 vs D435i 比較表圖下圖:

搭配 RealSense Viewer 使用 T265

接下來,將連接線接上已經開機的 Jetson Nano。打開終端機輸入 realsense-viewer 開啟 RealSense Viewer 。

預設情況下,將 Tracking Module 改為 on 後,兩顆魚眼鏡頭、加速度、陀螺儀、以及姿態感測器的五個畫面可以很順利的同時顯示。

稍微轉動一下,可以看到左下角姿態感測器座標有改變。

展開的項目如下圖,可以調整的項目比較少。

接下來,來看一下 3D 的介面。 相較於起始位置,會顯示移動路徑以及現在的 T265 座標。

紀錄移動路徑的顏色有分三種:綠色、黃色、紅色。綠色為慢速度移動,紅色則為高速移動,黃色的速度為介於前兩者之間。

RealSense Viewer 的部分就介紹到這邊,接著介紹更受關注的、可以修改的Python及C++範例程式碼。

 

Python 範例程式

Intel RealSense T265 追蹤攝影機 Python 範例程式有三個:T265 BasicT265 CoordinatesT265 Stereo

如果你按照之前的文章安裝RealSense套件,在~/librealsense/wrappers/python/examples資料夾底下可以找到這三個程式碼。

T265 Basic 的程式中,顯示了前50個幀的加速度、陀螺儀、姿態(位置)感測器數據。

T265 Coordinates 程式範例中為顯示 T265 姿態(位置)感測器的坐標系的改變數值。

T265 Stereo 程式中教你如何在OpenCV中使用T265內部函數和外部函數,在主機上利用T265魚眼圖像非同步的計算深度影像。

這一步一開始一直無法執行成功,因此在操作的時候註解掉了以下圖中紅色的兩行,以避免直接進入 break。

C++ 範例程式

覺得 Python 範例不夠過癮,可以來玩看看 C++ 程式。在這邊主要介紹以下幾個程式。

rs-pose 程式會顯示 T265 當下與初始位置的相對位置。

rs-pose-predict 顯示位置預測,使用了callback API 以及 librealsense global time。

rs-pose-and-image 顯示了如何非同步的使用 T265 追蹤攝影機取得 200Hz 的位置資訊以及 30 fps 的影像。

以上三之程式的成果圖如下:

rs-ar-basic 顯示如何使用姿態(位置)感測器和魚眼影像在魚眼影像上顯示簡單的虛擬物件。

rs-trajectory 範例為使用姿態(位置)數據繪製 T265 裝置移動的 3D 軌跡。共會顯示四個視窗,包含三個角度的 2D 移動路徑圖以及 3D 路徑圖。

rs-capture 為將魚眼鏡頭、陀螺儀、以及加速度感測器數據的 2D 視覺化的範例。

rs-save-to-disk 教你如何設定攝像機和保存 PNG 圖片檔。會儲存兩顆魚眼鏡頭的影像在你終端機執行命令時的當前所在資料夾中。

rs-multicam  為在單一窗口中同時處理多個攝像機串流的範例,但因為我現在只有一個 T265 攝影機,會跳警告提醒你只有一個攝影機後顯示介面如下圖。

rs-sensor-control 為使用 rs2::sensor API 的教學範例程式碼。有好幾個層次,以下列出主要的幾層資訊給大家看。

執行程式後,會先列出連接上主機的 RealSense 裝置,目前只有一顆 T265。

輸入你想要查看的裝置編號,本範例中輸入僅有的裝置編號 0。選擇完裝置後,可以選擇模組,查看裡面所有的感測器,在這裡也是只有一個 Tracking Module。

接著輸入你想要讓感測器做的動作編號。

標號 0~3的結果分別如下:

Action 0 : 有 62 個進階選項。

 

Action 1:可以進一步選擇五個感測器及魚眼鏡頭其中一個。

Action 2:檢視五個感測器及魚眼鏡頭其一的內部函數。

 

Action 3:檢視五個感測器及魚眼鏡頭其一的外部函數。

 

關於 Intel RealSense T265 的介紹就到這裡。想要進一步了解 Intel RealSense T265 追蹤攝影機,可以參考 Intel RealSense Github 的 T265 介紹文件或是觀看 T265 介紹影片。另外,關於 Intel RealSense T265 搭配有深度資訊的 Intel RealSense D435i 一併使用,之後有機會會撰寫文章向大家介紹。有 RealSense 攝影機系列產品的相關問題或是分享都歡迎在底下留言喲!

 

參考資料:


【活動】NVIDIA GTC 2020,9/25 前報名享有早鳥優惠!

$
0
0

    每年的這個時候,Apple WWDC、Google I/O 都輪番登場,但還有另一個令人期待的大活動:NVIDIA GTC(GPU TECHNOLOGY CONFERENCE).最近 NVIDIA 才剛從 Softbank 手中以高達 400 億美金的天價把 ARM 公司納入麾下(2016年,Softbank 以約 309 億美金買下ARM).這件事相關的產業報導非常多,這邊就不多提了!

作者 曾吉弘

由於這幾年各大廠家都在爭奪 AI leader 的地位,各種軟硬體不斷推陳出新的情況下,對使用者或學習者來說,最大的好處就是有愈來愈多方便甚至免費的資源可以使用(例如 Google Colabaws educate 等等),網際網路的特性也讓我們很容易就知道這個領域又有哪些新的技術誕生了。一切的一切都把我們學習的速度與強度推上新的高峰,對於學習者來說,只怕你不肯學而已!

言歸正傳,10/5-10/9 來去參加史上規模最大 GTC!來自全球各國陸續接棒,連續五天24小時帶來總共超過 600 場的線上演說與最新技術展示!NVIDIA GTC 2020 在 9/25 之前使用學術、政府或非營利單位之電子郵件地址 (.edu/.gov/.org),就可以免費取得線上會議通行證,價值 49 美金(折合台幣約1,500元),現在就報名吧:  https://www.nvidia.com/zh-tw/gtc/

如果您有沒有以上的電子郵件,也可使用優惠碼 NVCHCHOW 報名,現折 10 美元!

首頁就能看到今年 GTC 的講者陣容,No.1 當然是 Founder & CEO – 黃仁勳先生,其他則是來自各領域的菁英,其中最右邊是 MIT 的博士生 Alexander Amini,主題是自駕車,讓我相當感興趣。

您馬上可以找找看繁體中文有哪些講題:

CAVEDU 喜愛的 Jetson 平台也有相當份量的分享,從較早的 TX2 與頂級規格的 Xavier

到入門款的 nano 以及最新的 NX 都有專題介紹。

活動期間 10/5-10/9,歡迎您共襄盛舉,總之一定要先報名喔!

同一時間,我們也在 Facebook 粉絲頁舉辦活動:【GTC AI 應援團,好康道相報!】請在 CAVEDU教育團隊的 Facebook 粉絲頁

  1. 貼文按讚 + Tag 1 位朋友 + 一起參加  #GTC20,有機會獲得 GTC 通行證 & NVIDIA 帆布托特包(名額三位)
  1. 貼文按讚 + Tag 3 位朋友 + 一起參加  #GTC20,有機會獲得 GTC 通行證 & NVIDIA Logo T-shirt(名額兩位)

留言截止日期為留言截止只到 9/25 晚上 12:00,將於 9/26 週六於CAVEDU教育團隊的 Facebook 粉絲頁 公佈中獎名單,歡迎參加!

【GTC AI 應援團,好康道相報!】趕快來按讚Tag朋友啊!10/5-10/9 來去參加史上規模最大 GTC!全球各國陸續接棒,連續五天24小時帶來總共超過 600 場的線上演說與最新技術展示!在這篇貼文下方:1. 貼文按讚 +…

Posted by CAVE教育團隊 on Friday, September 18, 2020

 

最大規模的全球 GTC 就在今年秋天!10 月 5 日至 9 日,歡迎您共襄盛舉!

$
0
0

誠摯邀請您參加今年 10 月的 NVIDIA GPU 技術大會 (GTC),一同共襄盛舉!

今年春天,NVIDIA 首度在線上舉辦 GTC,並且成功吸引了將近 60,000 人報名。如今,NVIDIA 將擴大舉辦,首度跨全球時區、連續五天不間斷地進行,推出有史以來最大規模的 GTC!

2020 年 10 月 5 日至 9 日,透過這場全球範圍的線上 GTC,您將有機會與來自全球各個產業的研究人員、工程師、開發人員與技術專家互動,彼此交流突破性的理論、分享創新的方法,並探索人工智慧如何改變您的工作模式。

您可依照適合您的時區選擇想觀看的直播內容或瀏覽大量的隨選內容,包含數百支直播與隨選影片、由專業講師指導的深度學習機構 (DLI) 實作訓練、展示等多元內容。

GTC 現已開放線上報名,只要於 9 月 25 日前完成報名,便能以 49 美元的早鳥優惠價獲得完整的線上會議通行證;若使用學術、政府或非營利單位之電子郵件地址 (.edu/.gov/.org),更可享免費優惠。另外,深度學習機構 (DLI) 實作訓練也能以每堂僅 99 美元的價格加價購入,若通過考試還可獲得電子認證證書。

這場不可思議的國際盛事,您絕對不容錯過!歡迎造訪 GTC 台灣官網,關注更多活動內容與細節。

 

*若欲詢問團體票票價或其他任何疑問,請寄送電子郵件至 GTC_Taiwan@nvidia.com

 

若想知道更多,也歡迎點選阿吉老師的活動介紹文喔!(文章連結)

CAVEDU專屬限時臉書活動

即日起至9/25前,在 Facebook 粉絲頁舉辦活動:【GTC AI 應援團,好康道相報!】請在 CAVEDU教育團隊的 Facebook 粉絲頁 :

  1. 貼文按讚 + Tag 1 位朋友 + 一起參加  #GTC20,有機會獲得 GTC 通行證 & NVIDIA 帆布托特包(名額三位)
  1. 貼文按讚 + Tag 3 位朋友 + 一起參加  #GTC20,有機會獲得 GTC 通行證 & NVIDIA Logo T-shirt(名額兩位)

留言截止日期為留言截止只到 9/25 晚上 12:00,將於 9/26 週六於CAVEDU教育團隊的 Facebook 粉絲頁 公佈中獎名單,歡迎參加!

【GTC AI 應援團,好康道相報!】趕快來按讚Tag朋友啊!10/5-10/9 來去參加史上規模最大 GTC!全球各國陸續接棒,連續五天24小時帶來總共超過 600 場的線上演說與最新技術展示!在這篇貼文下方:1. 貼文按讚 +…

Posted by CAVE教育團隊 on Friday, September 18, 2020

 

【開箱評測】Intel RealSense D455 開箱與 RealSense Viewer 測試

$
0
0

Intel 有一系列強大的深度攝影機 RealSense,D435、L515等等的,相關產品的應用已經非常多了,在我們的技術部落格中也可以看到非常多文章,而Intel在今年六月的時候發布了 D455景深相機,現在我們也要來開箱囉!D455真的非常的漂亮!

作者/攝影 張嘉鈞
時間 1hr
難度 ★☆☆☆☆
材料表

開箱介紹

這次的 D455 升級了許多:

  1. 4公尺內誤差低於2%,比D435的2公尺低於2%強太多!
  2. RGB感測器從原本的捲簾式快門升級成全局式快門,並且搭配一個深度FOV,所以速度更快,色彩跟深度的資訊可以結合得更好。
  3. 結合了IMU,可以提升機器人對於環境的熟悉度。
  4. 除此之外還提供了兩倍的更長感測距離,機器人將能更快的做出判斷!
  5. 可結合多個D455,捕捉更大的範圍。

 

下面是 D455 的剖析圖 ( 圖片來源 ):

而現在校正也更加快速了:

https://www.intelrealsense.com/depth-camera-d455/?fbclid=IwAR2x59pnNd2lODXihsusIse_iXds5tuTXxi4dI1kqVfqYH0VIb6DPov368s

 

接下來就是實際開箱啦!這次D455 檢附的東西一樣有說明書、realsence本體、三腳腳架以及USB-A to Type-C的傳輸線。

實際圖片

雖然都是一如往常,但往往高手升等之後通常都是不顯露於表面的~再來是D455實體細部照片,這次的設計由於要塞入強大的感測元件 ( 體積目測都較大 ),所以整體設計較寬!值得一提的是相比D435系列還要拆卸Type-C蓋,這次直接做在下方,使用上方便許多。

D455 與 D435 外觀比較,可以看出幾乎是多了一個鏡頭的寬度

D455 與 D435 鏡頭位置比較 (圖片來源 : Intel 官網)

更多 Intel RealSense的比較細節可以參考下圖 (圖片來源)

RealSense 相關軟體測試

這次將會帶給大家Windows跟Linux的Viewer測試,首先先下載RealSense SDK 2.0

安裝RealSense SDK 2.0非常的簡單,就是 Next > Next >Next。

官方提供非常多的範例,大部分是C / C++,但也支援其他語言,點擊該圖示就可以進到對應語言的函式庫介紹。

像是Python的就會進到 pyrealsense2函式庫頁面:

執行RealSense Viewer

 

使用內附的Type-C線接上電腦,Viewer會自動抓到並且詢問是否安裝

都安裝完之後就可以開始操作了

先將所有的模組都打開來看,並且右上角的3D先轉成2D,就可以看到總共有4個畫面出來,左上是深度攝影機的資訊、左下是RGB、右上右下分別是陀螺儀及加速度計。

Viewer已經有內建人臉辨識以及年齡偵測,有點準也蠻好玩的,經實測側臉年齡都比較高哈哈,讓大家看看同事們認真工作的樣子:

題外話,我發現RGB跟IMU不能同時開啟,這時候要重開整個Viewer

在2D模式下,右邊的刻度是深度,越大則越遠,單位是 meters (m);而滑鼠指到的位置會在左下角顯示深度資訊。

接著切換到3D模式,我稍微測了一下最短距離,大概是0.3XM左右,其實比表定的0.4M還小一些;最遠距離的話就如規格所示,大約4M。

功能的部分,上方這些基本款的話,只有Shadow、Measure、Export可以玩

其中Shading有三種模式可以更換,可以找到自己喜歡、適合的風格,第二、三的風格差別在於有光線紋路 (?)

Measure的部分則是測量距離,蠻有趣的,準度的話我實際測試如下,可以參考一下,準確度確實蠻高的。

可以在左側開關開啟RGB的感測器,讓深度加上色彩

除此之外,還可以調整模式,可以注意手部的部分會很明顯。

大概的測試就先這樣,下一次將會帶大家在Windows環境下實測Python程式碼、以及在Jetson Nano上實測看看。

 

在NVIDIA Jetson Nano上實現JetBot AI自駕車專案-基礎安裝篇

$
0
0

*本文由RS components 贊助發表

作者/攝影 郭俊廷

 

一、JetBot專案介紹

JetBot是基於NVIDIA Jetson Nano的一款開源機器人,JetBot使用NVIDIA Jetson Nano做為運算核心。使用無線搖桿控制器或網頁控制JetBot小車,透過攝影機拍照收集資料,在Jetson Nano裡面訓練、實現避免碰撞、物件跟隨、道路跟隨等效果。

以下是JetBot官方的介紹

JetBot是基於NVIDIA Jetson Nano的開源機器人,特點有以下幾點:

  • 經濟實惠-不到150美元的Jetson Nano A02以及附加產品
  • 教學-從基本移動到基於人工智慧的避免碰撞的教學
  • 好玩!-通過瀏覽器進行互動程式編輯
  • 建立和使用JetBot可提供創建全新AI項目所需的體驗。

本篇文章將帶大家一步一步從Github安裝JetBot專案相關的套件,您也可以直接從附件下載我們安裝好的系統備份檔案。

首先來看我們JetBot小車的實體圖跟範例成果影片吧!

 

JetBot小車的實體圖

 

二、硬體介紹

我們先來看看JetBot官方建議的硬體清單跟我們使用的材料清單

https://github.com/NVIDIA-AI-IOT/jetbot/wiki/bill-of-materials

JetBot官方建議的硬體清單 我們所使用的材料清單
  1. Jetson Nano*1
  2. 64 GBMicro SD卡*1
  3. 電源供應器*1
  4. 馬達*2
  5. Feather2927馬達驅動版*1
  6. 全向輪*1
  7. 電池*1
  8. USB線*1
  9. PiOLED顯示器*1
  10. PiOLED轉接頭*1
  11. 車身3D模組*1
  12. 攝影機支架3D模組*1
  13. 攝影機*1
  14. Wi-Fi模組*1
  15. 輪胎*2
  16. M2M3螺絲螺帽*N
  17. 跳線*4
  1. JETSON NANO DEVELOPMENT KIT*1+風扇*1
  2. 64G Micro SD卡*1
  3. 5V4A變壓器(接頭外徑5.5mm/內徑2.1mm)*1
  4. TT馬達*2(已焊線)
  5. DFRobot DFR0592馬達驅動板*1
  6. 全向輪*1
  7. PQI 12000mAh Type C雙輸出行動電源*1
  8. Type C TO Micro USB線*1
  9. USB線紅黑剝線頭*1
  10. 壓克力車身*1
  11. 攝影機支架3D列印件固定座*1
  12. Raspberry Pi Camera V2攝影機 *1
  13. 輪胎*2
  14. D-Link N150無線網卡*1
  15. 金屬螺絲螺帽+塑膠螺絲螺帽*N

 

組裝前車體材料清單圖

 

硬體上我們做以下這些變動:

  • 使用了自己設計的壓克力車身
  • 上海DFRobot製作的馬達驅動板,把馬達驅動板接上Jetson Nano上的GPIO即可使用。
  • 給Jetson Nano裝載了風扇,當Jetson Nano過熱時風扇即會自動啟動,也可以下指令讓風扇啟動。
  • 使用USB的無線網卡不用另外接線插入Jetson Nano USB中即可使用。
  • 電源的部份我們使用有Type C跟Micro USB雙輸出的行動電源,Type C可以供電給Jetson Nano、Micro USB可以供電給馬達驅動板使用。

各位可以依照自己的需求和設計更換符合自己的零件,如使用官網建議的馬達驅動板,部分軟體安裝過程請不用更新,使用官方的預設程式即可。其他如行動電源及輪胎等材料可以依據您的車身大小來更換適合的零件。

車體結構介紹

組裝完成車體後,我們將JetBot分成以下13個項目

(1)Jetson Nano開發板、(2)DFRobot馬達驅動板、(3)TT馬達、(4)輪胎

(5)攝影機、(6)攝影機支架、(7)全向輪、(8)車殼

(9)Jetson Nano風扇、(10)WiFi dongle、(11)Jetson Nano電源線、(12)馬達驅動板電源線、(13)行動電源

三、軟體安裝介紹

這一部分我們將開始介紹如何燒錄Jetobot映像檔,如何連上WiFi設定Jetobot相關軟體,下載Jetobot馬達驅動板相關程式。

Step1 如何安裝JetBot專案軟體並且燒入映像檔

首先我們要重新燒錄映像檔,JetBot專案所使用的映像檔跟之前Jetson Nano官方的映像檔不同,請使用Nvidia Github JetBot專案提供的檔案,映像檔連結:jetbot_image_v0p3p0.zip

下載映像檔後,並解壓縮檔案。

(下載後解壓縮的映像檔大小為59.6GB,記憶卡請準備64G之記憶卡),登陸的帳號密碼為jetbot。(如使用balenaEtcher軟體燒錄可不用解壓縮,可直接燒錄ZIP檔)。

使用balenaEtcher軟體工具燒錄映像檔

balenaEtcher在Windows、MAC的作業系統都可以安裝,您也可以使用另一套常用的Win32Diskimager(教學文章可參考[第一次用Jetson Nano 就上手]硬體介紹、開機步驟、遠端連線(繁體))。本篇文章使用的是Windows x64系統環境安裝,請按照您電腦使用的作業系統安裝匹配版本的軟體。

開啟軟體後,先點擊”Select image“,選擇剛剛下載的JetBot專案提供的檔案。

將SD卡插入讀卡機,在軟體中點擊”Select drive“,選擇SD卡的磁碟機編號,點擊”Continue“後,再點擊”Flash“就開始在SD卡安裝作業系統。

燒錄完成進度條會顯示100%,並且檢查錯誤,檢查完成後即燒錄完成。

Step2 Jetson Nano開機檢查映像檔有無燒錄成功

有兩種方法檢查映像檔有無燒錄成功:

  • 第一種是連接螢幕、鍵盤、滑鼠來開機查看系統可否正常開機啟動。
  • 第二種是使用MicroUSB線與JetsonNano進行遠端連線,確認系統是否正常執行。

首先使用DC接頭供應JetsonNano電源:

請將跨接器(jumper)接在下圖標示的J48腳位上(不接跨接器(jumper),JetsonNano則改由MicroUSB接頭供應電源)。

使用DC接頭變壓器,將JetsonNano接上電源。

使用USB傳輸線,一邊接上電腦,另一邊接上JetsonNano的MicroUSB接頭。(如下圖)

跨接器(jumper)接在J48腳位

JetsonNano開機成功時,電腦裡即會新增一個L4T-README的磁區。

電腦可透過Jetson Nano新增的虛擬區域網路與IP位置連線溝通,

Jetson Nano的IP是固定的,192.168.55.1。電腦開啟瀏覽器後,輸入

192.168.55.1:8888連上Jetbot。

開機成功時,電腦新增一個L4T-README的磁區

透過192.168.55.1:8888來連上JetBot

電腦端的瀏覽器畫面:第一次登入會要求輸入密碼,密碼是jetbot

Step3 將JetBot連上Wi-Fi

將JetBot連上Wi-Fi是為了我們能順利讓JetBot小車實際在地上移動,訓練等等用途。這裡介紹如何將JetBot連上Wi-Fi。

有兩種方法,第一種是之前介紹過的連接螢幕、鍵盤、滑鼠來連上Wi-Fi。

另一種就是透過JupyterLab的Terminal來操作連線至Wi-Fi。

以下是透過JupyterLab的Terminal來操作連線至Wi-Fi之步驟。

首先透過192.168.55.1:8888來連上JupyterLab。

接著使用JupyterLab內建的Terminal來設定要連線的Wi-Fi(位置如下圖紅框處)

JupyterLab內建的Terminal位置

輸入執行以下指令(如需要輸入密碼時請輸入jetbot)

在JupyterLab內建的Terminal使用複製貼上指令的方法是按CTRL+SHIFT+V

sudo nmtui

會看到一個網路管理員的控制介面,選擇第二個啟用連線(如下圖)

進入之後選擇想要連線的Wi-Fi,連線後輸入密碼即可連線

連線成功之後選<Back>後回選單

接著回選單後按離開即可離開此介面

接著輸入

iwconfig

查看是否有連上我們想連的Wi-Fi,成功連線即會顯示下圖畫面

使用指令

ifconfig

查看自己的Wi-Fi(wlan0)的IP是多少(<jetbot_ip_address>),即可確認成功連線至Wi-Fi並使用此IP透過JupyterLab連線至Jetbot。

進入JupyterLab的網址是http://<jetbot_ip_address>:8888

Step4 將JetBot配置電源模式

為確保Jetson Nano消耗的電流不會超過行動電源可以提供的電流,請使用以下命令將Jetson Nano配置於5W模式。

可以使用USB連線或是http://<jetbot_ip_address>:8888進入JupyterLab。作者測試時連線的IP熱點為192.168.137.155。

一樣使用JupyterLab內建的Terminal來設定電源模式

使用以下指令改變電源模式至5W

sudo nvpmodel -m1

使用以下指令查看電源模式是否調整至5W

sudo nvpmodel -q

Step5 安裝DFrobot馬達驅動板修改程式

本篇使用的DFRobot馬達驅動板需要更動馬達驅動板的函式庫,請輸入以下指令來下載我們修改過後的JetBot程式。

git clone --branch cave https://github.com/YuanYuYuan/jetbot.git

下載完之後,移動到jetbot資料夾並請輸入以下指令安裝必要的套件。

cd jetbot

sudo python3 setup.py install

安裝完套件就可以開始操作JetBot了

 

四、基礎操作介紹

我們操作JetBot範例的介面都是在JupyterLab上執行,JupyterLab是甚麼呢?首先我們先介紹一下JupyterLab。

JupyterLab是Jupyter團隊為Jupyter專案開發的下一代基於 Web的介面。相對於Jupyter Notebook,它的整合性更強,更靈活並且更易擴充套件。它支援100種多種語言,支援多種文件相互整合,實現了互動式計算的新工作流程。如果說 Jupyter Notebook 像是一個互動式的筆記本,那麼 Jupyter Lab 更像是一個互動式的 VSCode。另外,JupyterLab 非常強大的一點是,你可以將它部署在雲伺服器,不管是電腦、平板還是手機,都只需一個瀏覽器,即可遠端訪問使用。使用JupyterLab,你可以進行資料分析相關的工作,可以進行互動式程式設計,可以學習社群中豐富的Notebook資料。

下圖是JupyterLab的操作介面,依序介紹我們常用的功能。

  1. 選單欄:主要的功能選單都在這上面:文件、編輯、視窗、運行、內核、分頁、設置、幫助
  2. 左側邊欄:左側邊欄包含許多常用的功能,由上而下是文件瀏覽器、正在運行的內核和終端的列表、命令面板以及正在工作區中的分頁列表
  3. 主要的工作區域
  4. Terminal:我們的終端機在這裡開啟,可以在這操作各種Linux指令

JupyterLab操作介面

以上是我們在Jetson Nano上執行JetBot專案Part1基礎安裝篇之介紹,大家有沒有成功登入JupyterLab呢?未來我們將會推出更多豐富的內容。下一篇我們將介紹讓車子移動並且介紹如何在網頁上控制車子的前後左右移動,當然也有JetBot專案更進階的功能介紹,有興趣歡迎關注我們。

 

程式下載,請至designspark部落格原文連結下載

*本文由RS components 贊助發表

性能不變,價格更優,$59 美金的 Jetson nano 2GB 登場,直攻 Raspberry Pi 8GB 版本

$
0
0

性能不變,價格更優,$59 美金的 Jetson nano 2GB 登場,機器人王國售價為 $1880(含稅),相關配件我們會盡快測試,方便大家一次購足。

NVIDIA 的 Jetson 系列自從 2019 年推出了 Jetson Nano 之後(定價$99美金,終端售價請參考機器人王國商城) ,終於有台幣$5000以下的方案可供入門者選擇,除了 gpio 腳位配置與 Pi 3/4 相同之外,安裝的方式也貼近 Raspberry Pi 燒錄 sd 記憶卡,而非像是 Jetson Xavier 還需要刷 Jetpack 套件(相當久)。一時之間各種邊緣裝置的方案都熱絡了起來,Google Coral aiASUS tinker edge T 紛紛上市,且都標榜可以做到一定程度的神經網路推論,當然也有像是 Intel Movidius 神經運算棒這類的外掛硬體加速裝置的過渡方案。加上 TensorFlow Lite 在 2019 年發布之後,足見各家大廠對於邊緣裝置的重視,在單板電腦甚至 MCU 微控制器上的可能性就愈來愈多了。但在 Jetson Nano 之前的這類單板電腦,多半無法直接在板子上進行神經網路訓練,但 Jetson Nano 卻可以做到,一些小規模的訓練可以直接在板子上執行。

進入正題,Jetson nano 推出 2GB版本,且售價只要 59 美金!居然比目前市場上的另一個主流商品 Rasperry Pi 4 8GB版本 (售價75美金) 還要便宜 (您該不會要說 pi 4 2GB 與 nano 2GB相比才公平吧?)

Jetson Nano 2GB 版本標榜 “性能不變,價格更優”,往下延伸了產品線,直接攻打想在 Raspberry Pi 進行相關AI運算的使用者族群,畢竟 Jetson nano 是用 Ubuntu 系統,這類深度學習框架本來就是以 Ubuntu 為基礎來開發。而且現在 Jetson Nano 2GB定價一口氣降到比 Raspberry Pi 4 8GB還低,應該會有一定程度的使用者會想要玩玩看Jetson nano。

看一下外觀,少了DC筒狀接頭,代表只能用 USB type-C來供電,且少了兩個 USB 接頭(這樣接上 wifi 天線之後就剩一個啦…) 與 M.2 SSD 硬碟插槽。GPIO 腳位配置上應該是與 4GB 版本相同。

 

下圖是 NVIDIA公布的主流神經網路效能評比:Inception V4 / VGG-19openPose / Tiny Yolo v3 / ResNet-50 / SSD MobileNet-V1。用於比較的平台則是 Jetson nano 2GB / Raspberry Pi 4(未說明記憶體大小)/ Google Coral ai。可以看出除了 SSD MobileNet-V1 之外,Jetson nano 2GB 都優於(甚至遠勝於)其比較者。但在此我們要說,每個案例都不盡相同,Raspberry Pi 在很多時候還是非常好用的。而  Google Coral ai 有一個小巧可愛的 TPU ,在某些特定的神經網路會有效能上的優勢。

CAVEDU 曾經在 2019 年 Maker Faire Taipei 舉辦了一整個 AI 館,展示了 Jetson nano 的各種應用,可完全滿足教學用無人車的視覺推論需求,相信 Nano 2GB 也可以的!

另一個亮點是 NVIDIA 即將推出 AI認證,名為 “Jetson AI Fundamentals Course”  之前的 “Getting Started with AI on Jetson Nano” 也是相當不錯的課程,CAVEDU 曾經在工研院產業學院與其他單位執行過多次這個課程,與學員們一起取得 DLI 線上認證是很有趣的經驗,新的 AI 認證也很令人期待喔!

最後來看看我們使用 Jetson Nano 製作的 jetbot jet Racer。,都是 NVIDIA 推出的開源機器人專案,很適合機器人與神經網路入門者來學習喔!

 

Viewing all 673 articles
Browse latest View live