2018年1月28日 星期日

遠端臨場機器人(Telepresence Robot)

拜讀元智大學徐業良教授在2006年發表在輔具之友"遠端臨場機器人之開發與應用",從該篇文章中可以看得出來元智從2000年就開始開發遠端臨場機器人,2016年華康科技送給本校的康粟機器人,就是屬於這一類的機器人。遠端臨場機器人除可以用來照顧長輩外,也用在遠距醫療、遠距教育、遠距維修等領域。



在網站https://telepresencerobots.com/中,有一篇文章,如下:

Android + ROS = Wheelphone

介紹把Android和ROS兩者組合起來就變成有輪子的手機(Wheelphone),感覺很有趣,可以稱為微型遠端臨場機器人(micro-telepresence robots),有興趣可以參訪Wheelphone的網站:http://www.wheelphone.com/,其展示影片如下:


Padbot公司也有推出微型遠端臨場機器人,Padbot T1/T2兩款,其影片如下:

Padbot公司有許多遠端臨場機器人,有T1, T2, U1, U2, P1, P2, P3, X1等,下面影片是U2。


大家如果想進一步瞭解遠端臨場機器人,可以參考A telepresence robot – Programming文章,在該篇文章中有列出其架構圖,如下所示:


經由上圖我們可以看出,使用者經由HTML5的網頁,透過HTTP Server來和遠端臨場機器人進行溝通,而其主要的技術就是WebRTC,可以參考:https://webrtc.org/start/以及Getting Started with WebRTC

2018年1月27日 星期六

永生者的人工智慧-長生不死!



大家都聽說過秦始皇追求長生不老的故事,現代也有許多科學嘗試進行永生者的人工智慧-長生不死的研究計畫,有人企圖讓時間停止把大腦凍結起來,有人做出像阿凡達一樣的機器人,也有人做出像人一樣的機器人,更有人企圖瞭解大腦內的約860億個神經元運作,進行大腦上傳計畫,把人類思想轉換成數字,再上傳到機器人身上,企圖長生不死。不管如何對於想要研究研器人的工作者,或許可以先到機器人作業系統的網站上,找到開源的軟體硬資訊,機器人作業系統網站:http://wiki.ros.org/



阿凡達機器人


很像美人的機器人


服務型的機器人


大家如果對機器人研究有興趣,不妨可以研究一下Care-O-bot。
http://wiki.ros.org/Robots/Care-O-bot#Tutorials

2018年1月24日 星期三

嵌入式程式設計好教材推薦

自從Arduino流行起來後,就很少人再談8051,這曾經是8 bits的霸主,應該也是使用量相當的CPU,不過有了Arduino,學校似乎都用Arduino而不用8051。因為Arduino採用開源硬體的方式,在網路上有太多的學習資源,大家只要按圖施工,就會保證成功,而且軟體也很容易取得,於是剪貼似乎成了現代人的技能之一。
今天敏哥要介紹一本嵌入式程式設計的好書-Embdded C,作者是Michael J. Pont,然而它是用8051當成學習標的,而不是用Arduino,不過因為敏哥覺得這本書介紹許多不錯的觀念,值得大家學習,其章節如下:
1 Programming embedded systems in C
2 Introducing the 8051 microcontroller family
3 Hello, embedded world
4 Reading switches
5 Adding structure to your code
6 Meeting real-time constraints
7 Creating an embedded operating system
8 Multi-state systems and function sequences 
9 Using the serial interface 
10 Case study: Intruder alarm system
11 Where do we go from here
其中以第6-8章為重點。



有關於教材以及範例的程式碼,請參閱下列連結。

https://www.safetty.net/publications/embedded-c



2018年1月21日 星期日

[Tinkercad arduino程式設計] 類比輸入程式設計


輸入訊號可分成兩大類:數位和類比,分別使用digitalRead()和analogRead()函式來讀取其內容值,因為其電路設計上有些差異,數位輸入和類比輸入的腳位不同,在類比腳位上標示"A",A0~A5共有5支腳,簡單的程式設計如下:

int sensorValue = 0;

void setup()
{
  pinMode(A0, INPUT);
  pinMode(13, OUTPUT);
}

void loop()
{
  // read the value from the sensor
  sensorValue = analogRead(A0);
  // turn the LED on
  digitalWrite(13, HIGH);
  // stop the program for the
  // milliseconds
  delay(sensorValue); // Wait for sensorValue millisecond(s)
  // turn the LED off
  digitalWrite(13, LOW);
  // stop the program for the
  // milliseconds
  delay(sensorValue); // Wait for sensorValue millisecond(s)
}
上面程式利用analogRead讀取數值後,用來當成延成時間的數值,因此我們可以用可變電阻來改變燈光閃爍的頻率或快慢。
接下來我們來介紹類比數值由串列埠輸出,利用set視覺模組來取得A0腳位的數值,並把它放到sensorValue變數中,在利用print to serial monitor視覺模塊將值經由串列埠輸出。
程式如下:
int sensorValue = 0;

void setup()
{
  pinMode(A0, INPUT);
  Serial.begin(9600);

}

void loop()
{
  // read the input on analog pin 0:
  sensorValue = analogRead(A0);
  // print out the value you read:
  Serial.println(sensorValue);
  delay(10); // Delay a little bit to improve simulation performance
}

類比輸入轉換成電壓值的程式,把0-1023轉換0-5V,其公式為:


X=X*5.0 / 1023.0

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
  float voltage = sensorValue * (5.0 / 1023.0);
  // print out the value you read:
  Serial.println(voltage);
}

2018年1月19日 星期五

[Tinkercad arduino程式設計] 設計按鈕監控程式

按鈕(Push Button)是常見使的輸入裝置,透過開與關(On and Off)來控制輸出設備的狀態,上面影片很清楚地說明控鈕有四個接點,分別是11,12,21,22,其中11和12始終是連接在一起,21和22也是,因此其實只有2個接點。接下來用它來當做數位輸入,接到arduino 第2支腳,其接法如下:

程式如下:
int buttonState = 0;

void setup()
{
  pinMode(2, INPUT); //第2支腳為輸入
  pinMode(13, OUTPUT); //第13支腳為輸出
}

void loop()
{

  buttonState = digitalRead(2);//讀取第2支腳的訊號

  if (buttonState == HIGH) { //檢查狀態是高電位?
    //LED ON
    digitalWrite(13, HIGH);
  } else {
    // LED Off
    digitalWrite(13, LOW);
  }
  delay(10); // 延遲10ms
}
上面程式很簡單使用digitalRead()來讀取第2支腳的訊號,儲存在buttonState的變數中,檢查狀態是高電位,若是則點亮LED否則熄滅LED。

開關是屬於機器結構,會有所謂彈跳現象,因此我們必須撰寫消除彈跳現象的程式,如下:

(millis() - lastDebounceTime) > debounceDelay

完整程式如下:


2018年1月16日 星期二

[Tinkercad arduino程式設計]使用脈波寬度調變PWM控制LED亮度

前一篇我們使用digitalwrite來控制LED的on/off,本篇則介紹如何使用脈波寬度調變(Pulse Width Modulation, PWM)控制LED亮度,造成一種由暗到漸漸亮,亮到漸漸暗的效果。
上圖剛開始使用title block comment視覺模塊來當成註解,說明程式的功能,接下來用兩個count計數視覺模塊來設計迴圈效果,一個是上數up,另外一個是下數down,每次增減量都是以5為單位,範圍從0-255或255-0。控制變數為brightness,然後用set pin輸出視覺模塊來控制第9腳LED的亮度。最後再利用wait來製造延遲效果。以下是將上圖轉換成程式,要特別留意是set pin輸出視覺模塊會被轉換成analogwrite()以類比輸出方式來控制LED的亮度,這就是PWM技術。 在arduino中標有"~"符號者,就是可以被當成類比輸出,有 ~3、~5、 ~6、 ~9、 ~10 和 ~11等腳位。


2018年1月15日 星期一

[ Tinkercad Arduino] 用Ardino快樂學習程式設計

前幾篇文章我們介紹如何使用Tinkercad去設計以及模擬電路,Tinkercad是一套免費的工具,功能相當強大,可以學習3D建模、電路設計、以及程式設計。今天本文要介紹就是如何使用Tinkercad來學習程式設計。以步驟如下:

1.開啟Tinkercad網站:https://www.tinkercad.com,登入帳號和密碼後,選擇Circuits以及Create new Circuit。



2.選擇Arduino元件。


3.加上LED以及330歐姆的電阻,並將它連接到Arduino第13支腳以及GND。

4.開啟Code Editor,可以看到程式碼已經撰寫好了。


5.按下Start Simulation,就可以看到它在執行。
這次從123d circuit到Tinkercad circuit的改版,在程式部份增加視覺化的程式設計,用拼圖方式就能寫程式。程式設計如下圖,先把內建LED(build-in LED)點亮,等待(wait)1秒,再把內建LED(build-in LED)熄滅,再等待(wait)1秒,依此循環,雖然視覺化的程式設計看不出來有循環的意思,但對於嵌入式系統,會有一點超級大迴圈。

上圖的轉換成程式列表如下:

void setup()
{
  pinMode(13, OUTPUT);
}

void loop()
{
  digitalWrite(13, HIGH);
  delay(1000); // Wait for 1000 millisecond(s)
  digitalWrite(13, LOW);
  delay(1000); // Wait for 1000 millisecond(s)
}


2018年1月14日 星期日

[Tinkercad] 簡易電路LED串並聯介紹


(影片來源:https://www.youtube.com/watch?v=upuGkCdGEKA&t=30s)

Tinkercad是一套教導小朋友認識基本電路的好工具,上面影片中教導我們如何用三用電錶來量測電壓電流、以及電阻,再教導我們認識兩個LED的串並聯電路。

以上是我使採用330歐姆的電阻以及9V的電池,來觀察發現電流高達20.9mA,已經呈現過電流的現象。



採用LED串聯電路,指一顆LED正極接至另一顆的負極,我們可以發現電流下降到14.9mA,已經沒有過電流的現象,記得串聯流經每顆LED的電流是相同的。

採用LED並聯指一顆LED正極和負極分別接至另一顆的正極和負極,我們發現電流增加到21.1mA,也沒有發現LED有過電流的情形,因為並聯所以每個LED的電流值僅10.55mA。


接下來我們來做實驗,求LED過電流最低是多少呢?

(1) 大約超過20mA就有過電流現象。


(2) 大約超過145mA就有燒毀現象。



2018年1月10日 星期三

[Tinkercad] 好用的電路學習工具-TinkerCAD

Tinkercad不僅是適合所有人的簡單線上3D設計和3D列印應用程式,同時也是學習電路設計、模擬的好工具。首先,可以在上圖右上方先註冊,取得帳號後就可以登入。


在上圖有左方,可以選擇Circuits選單,然後按下Create New Circuit按鈕,就可以開始設計,下面影片是教導如何用一個開關來啟閉馬逹的運轉。




這套工具很強,也很實用。

2018年1月8日 星期一

[英雄出少年系列] 測水位

目前市面上賣售的水位計,可以看水利署電子報認識水位計

本文介紹的接觸式水位計。
電路圖:


程式碼:



結果:



作者:
雲林科技大學-資訊工程所 莊尚儒
曾於財團法人資訊工業策進會 DIGI+ Talent計畫中研習,平時興趣為設計開發板的應用、網頁設計、App設計與科技和商品結合的設計

2018年1月7日 星期日

[英雄出少年系列] 用Arduino控制伺服馬達

伺服馬達用在機器人關節的控制,對於設計機器人而言,是很重要的技術,伺服馬達就是使用伺服機構的馬達(電動機),簡單說就是可以精準控制,如本篇文章提到用角度來控制。

電路圖:


程式碼:

#include

#include

Servo myservo; // 建立Servo物件,控制伺服馬達

void setup()
{
  myservo.attach(2); // 連接數位腳位2,伺服馬達的訊號線
}

void loop()
{
  for(int i = 0; i <= 180; i+=1){
    myservo.write(i); // 使用write,傳入角度,從0度轉到180度
    delay(20);
  }
  for(int i = 180; i >= 0; i-=1){
    myservo.write(i);// 使用write,傳入角度,從180度轉到0度
    delay(20);
  }
}

實驗結果:

作者:
雲林科技大學-資訊工程所 莊尚儒
曾於財團法人資訊工業策進會 DIGI+ Talent計畫中研習,平時興趣為設計開發板的應用、網頁設計、App設計與科技和商品結合的設計

[英雄出少年系列] Arduino超音波測距範例

電路圖

程式碼:

實驗結果:









作者:
雲林科技大學-資訊工程所 莊尚儒
曾於財團法人資訊工業策進會 DIGI+ Talent計畫中研習,平時興趣為設計開發板的應用、網頁設計、App設計與科技和商品結合的設計

2018年1月6日 星期六

跨出混合實境的第一步,地板和天花板的偵測

虛擬實境(Virtual Reality, VR)是指用電腦虛構出生活情境,與使用者進行互動的一種科技,跟使用者所處環境無關,一切的影像都是虛構出來的,而擴增實境(Augmented Reality, AR)是在現實生活中呈現出3D的物件或數位內容,如影片等,最常使用的技巧是用標籤(Marker)方式,Vuforia是採用非標籤(Markless)的方式,用影像物件(Image Target)的方式其實影像物件也可以算是標籤的一種,只是沒有邊框而已,當然使用不的樣式來設計,其辦識的方法就不同。以下是用Vuforia影像物件來實現AR的情形:



混合實境(Mixed Reality,MR)是較新的概念,它結合AR和VR,利用現實環境來打造電腦虛構出來的場景,因此地板和天花板的偵測就變得相當重要,要讓運算裝置(電腦或手機)能知到地板、天花板、和牆壁等。以下微軟推出Hololens專案的展示影片:



看完影片,您是不是覺得很有趣,也很好玩呢?接下來我們來看到如何使用Vuforia以及Unity來實現地板和天花板的偵測。
軟體的版本:
Vuforia 7
Unity 2017.3 (ARKit enabled iOS devices only)
目前Android要等Unity 2017.3的補丁檔或是Unity 2017.4才會支援,以下是建立地板偵測實驗步驟:
1.開啟Unity 2017.3(含以後)
2.建立新的專案
3.在Edit選單中選擇Project Settings> Player,按下 PlayerSettings按鈕,在“XR Settings”區塊中,將“Vuforia Augmented Reality Supported”打勾。

4.替換預設的“Main Camera”成為"ARCamera",在Game Object選單中,選擇Vuforia> AR Camera,在scene視窗中產生新的AR Camera物件,移除預設 “Main Camera”。
5.在Game Object選單中,選擇Vuforia> Ground Plane> Ground Plane Stage。
6.地平面階段遊戲物件(Ground Plane Stage GameObject)為其他遊戲物件(GameObject)的父親的角色。數位內容應該是地平面階段遊戲物件的一個小孩。 請注意,地平面舞台有視覺標記,表明它是100平方厘米。 這些視覺指南僅在Unity編輯器中呈現,並用於確定Unity編輯器中的真實世界的比例。 此外,地面平台允許內容相對於地平面本身定位,允許將內容相對於現實世界的地平面。
7.接下來放一些數位內容放到地平面舞台上。 在 Game Object單中,選擇3D Object> Cube。 這將在Unity  Hierarchy 窗口中,建立新的Cube物件。 拖動Cube,使它位於地平面舞台GameObject的內部。 將Cube的X,Y和Z位置設置為0.將X,Y和Z Scale設置為0.1,您應該看到它佔據了舞台的大約一半。


8.在Game Object選單中,選擇 Vuforia> Ground Plane> Plane Finder, 平面搜查器(Plane Finder)的主要任是:

1.使用錨點輸入監聽器行為(Anchor Input Listener Behaviour)來監聽用戶的輸入(例如在設備屏幕上輕按)。
2.試圖找到一個適當的平面,在真實世界中以平面搜索行為(Plane Finder Behaviour)放上數位內容。
3.在真實世界使用內容定位行為(Plane Finder Behaviour),嘗試找到一個合適地方將在數位內容放在現實世界,本範例的數位就是指在步驟7的Cube。

9.將“Ground Plane Stage”物件拖到“Content Positioning Behavior”組件的“Anchor Stage”參數中。

10.在Project視窗中,可以在Assets\Editor\Vuforia\ForPrint\Emulator\目錄下,找到下列影像物件,把它放在地上就可以進行測試。


11.敏哥偷懶直接在電腦中打開,按下Play鈕進行測試,結果如下圖:


2018年1月1日 星期一

Vuforia 7讓擴增實境更貼進我們的生活

在2017年12月19日Vuforia推出新版本 - Vuforia 7,發表"Vuforia 7 is Available!"的文章,這個版本有三個主要的特點,分述如下:

  1. Vuforia模型目標(Vuforia Model Targets)”透過形狀來識別物體,而現有的方法是以平面影像上的特徵點,例如:平面印刷品、產品包裝和許多消費品上。 模型目標是完美的,可以把數位內容聯結到工業設備、汽車或家用電器等物品上。
  2. Vuforia地平面 (Vuforia Ground Plane)”可以將數位內容呈現在地面、天花板或桌面上,Vuforia構建一個可視化應用的理想解決方案,從家俱購買到擴增實境的設計評論。 地平面功能支持從啟用的iOS設備的ARKit開始到各式各樣的設備 ,擴展到時下流行的Android和iOS設備。
  3. Vuforia聚變 (Vuforia Fusion)”是全新的功能,主要是用來解決在相機、傳感器、晶片組、以及軟體框架(ARKit和ARCore)等內部支持AR技術的碎片化(Fragmentation)問題。 借助Vuforia聚變應用程應可自動提供解決此問題,而不需要額外的工作。
Vuforia模型目標(Vuforia Model Targets)


Vuforia地平面 (Vuforia Ground Plane)



Vuforia聚變 (Vuforia Fusion)用在同步定位與地圖構建(SLAM或Simultaneous localization and mapping)視覺慣性測程(visual inertial odometry)