72
高高高高高高高高高高高高

LabView with Lego NXT

Embed Size (px)

Citation preview

Page 1: LabView  with Lego NXT

高階圖形化介面機器人研習

Page 2: LabView  with Lego NXT

課程大綱日 期 時  間 課 程 內 容

09:00 ~12:00

LabVIEW 環境簡介

了解 LabVIEW 資料流概念

人機界面 / 程式碼介紹

LabVIEW NXT 函式總覽

編輯 LabVIEW 程式技巧

LabVIEW 程式除錯工具

13:00 ~16:00

迴圈結構 : For loop, While loop

遞迴概念與暫存器 (Shift Register)

LabVIEW 裡的判別與抉擇 (Case)

NXT 感測器和馬達應用

Page 3: LabView  with Lego NXT

課程大綱

09:00 ~12:00

陣列與叢集 : 掌握資料的第一步

圖表的應用與資料分析

字串和檔案存取

狀態機

13:00 ~16:00

Android 手機程式設計

使用 Google App Inventor

Page 4: LabView  with Lego NXT

LabVIEW 環境簡介

Page 5: LabView  with Lego NXT

LabVIEW 優點• 直覺式程式設計

• Multithreading ,平行處理迴圈

• 許多現成函式庫 ( 視覺,馬達控制, I/O)

• 可以和其他程式環境結合

– C , Matlab , .NET , ActiveX …

• 程式可移植到不同平臺執行

• Windows, Mac, PDA, FPGA …

Page 6: LabView  with Lego NXT

LabVIEW 有那些種類的函數可以使用?• 輸入和輸出

– 信號與資料模擬– 使用 DAQ 擷取及產生真實信號– Instrument I/O Assistant (序列與 GPIB )– ActiveX ,用於和其它程式通訊

• 分析– 信號處理– 統計– 高級數學與公式– 連續時間解算器 (Continuous Time Solver)

• 視覺 /馬達控制– PID , Fuzzy

Express Functions Palette

Page 7: LabView  with Lego NXT

LabVIEW 的應用領域• 業界量測與自動化標準• 圖形化概念• 豐富函式庫,包含 :

– 視覺檢測– 運動控制– 資料擷取– 儀器控制– 進階運算– 報表產生– 和更多 …

• 整合週邊軟硬體和其他工具

Page 8: LabView  with Lego NXT

LabVIEW 圖形化程式環境

Page 9: LabView  with Lego NXT

開始 » 所有程式 »National Instruments LabVIEW

歡迎畫面:

從空白 VI 開始:New»Blank VI

從範例開始:Examples»Find

Examples…

or

LabVIEW 歡迎畫面

Page 10: LabView  with Lego NXT

每個 VI 都有兩個視窗 :

人機界面 (Front Panel)• 使用者界面 (UI)

– Controls = 輸入埠– Indicators = 輸出埠

程式區 (Block Diagram)• 圖形化程式碼

– 由資料流 (Dataflow) 來決定程式流程

LabVIEW 的程式稱為虛擬儀器 (Virtual Instrument, VI)

Page 11: LabView  with Lego NXT

Front Panel

(Drag and drop to front panel)

Indicator: 顯示元件

Control: 控制元件自訂面板檢視

Page 12: LabView  with Lego NXT

Block Diagram

( Drag and drop to block diagram )

函式,迴圈,程式結構

Page 13: LabView  with Lego NXT

如何更改可視視窗左邊:ProgrammingNXT Robotics

右邊:ProgrammingNXT Robotics

Page 14: LabView  with Lego NXT

• 建議:自動選擇工具 (Automatic Selection Tool )• 用於操作及修改人機界面和程式區物件的工具

操作工具

定位/改變大小工具

標籤工具

接線工具

工具 (Tools) 面板

自動選擇工具

在以下工具中進行選擇:

Page 15: LabView  with Lego NXT

執行按鈕

連續執行按鈕

放棄執行

執行標示按鈕

額外按鈕 :

狀態 (Status) 工具欄

保留接線值按鈕

步進函數按鈕

Page 16: LabView  with Lego NXT

Dataflow: LabVIEW 核心概念

Page 17: LabView  with Lego NXT

Dataflow ( 資料流 )

• 要駕馭 LabVIEW ,一定要清楚 dataflow

• LabVIEW 執行順序– 要看資料是怎麼流的– 資料左進右出

• VI 從左邊接受到所有的 input 資料, VI 才會執行

• VI 執行完,將會從右邊輸出 output 資料

Page 18: LabView  with Lego NXT

Dataflow ( 資料流 )

• Ex:

Page 19: LabView  with Lego NXT
Page 20: LabView  with Lego NXT

LabVIEW EE NXT Setup

• 進行習題之前,先確認 NXT 已連線

• Tools NXT Tools NXT Terminal• 需要更新 NXT firmware -> 1.28

Page 21: LabView  with Lego NXT

Example Finder

• 搜尋範例程式的好幫手

• Help Find Examples

• NXT Robotics 資料夾

Page 22: LabView  with Lego NXT

Exercise 1: Hello World

• Display -> Hello World.vit

• 用 Highlight Execution 了解資料流

Page 23: LabView  with Lego NXT

LabVIEW 的資料類型

Page 24: LabView  with Lego NXT

LabVIEW NXT 函式總覽

Page 25: LabView  with Lego NXT
Page 26: LabView  with Lego NXT

NXT Programming

• LabVIEW 程式的基礎元件– 迴圈,抉擇– Array , String , File I/O– 布林判斷– Delay 函式

Page 27: LabView  with Lego NXT

NXT I/O

• 控制 NXT 的函式– Motors– Sensors– Display– Sound– Log Data – Advanced

Page 28: LabView  with Lego NXT

如何切換 Direct / Remote

Page 29: LabView  with Lego NXT

Behaviors

• 現成的程式碼片段,來模擬一些動作– Lurch ( 走走停停 )– Swerve ( 左晃右晃 )– Snake ( 蛇行 )– Move to Zero ( 馬達歸零 )– Position Control ( 馬達定位 )– Follow a Line ( 循跡 )– Save Light to File ( 紀錄光值 )– Drive While Sampling Light ( 邊走邊紀錄光值 )

Page 30: LabView  with Lego NXT

TETRIX

• 控制 TETRIX 擴充套件的函式庫

Page 31: LabView  with Lego NXT

Exercise 2: 擷取 NXT Light Sensor

• Sensors -> Graphing_Sensor_Values.vit

• 如果用 Touch sensor 該如何修改程式 ?

Page 32: LabView  with Lego NXT

LabVIEW 程式設計技巧

Page 33: LabView  with Lego NXT

幾個準則• 線,儘量不要彎– 避免程式雜亂

Page 34: LabView  with Lego NXT

Context Help 視窗

• Help Show Context Help ,或 Ctrl+H• 把滑鼠浮過欲查詢的 VI

更詳細的說明 :– 在 VI 上按右鍵,選擇 “ Help”

– 可以從 Context Help 視窗選擇 “ Detailed Help”

Page 35: LabView  with Lego NXT

小技巧

• 鍵盤快捷鍵 Shortcuts– <Ctrl+H> – 叫出 Context Help 視窗– <Ctrl+B> – 清除所有斷線– <Ctrl+E> – 從 Front Panel 和 Block

Diagram 互相切換– <Ctrl+Z> – Undo

Page 36: LabView  with Lego NXT

LabVIEW 程式除錯工具

Page 37: LabView  with Lego NXT

除錯工具• 查看程式問題點

• Execution Highlighting

• Probes

當程式有錯誤的時候,執行按鈕會有「斷箭」按下「斷箭」則可以顯示程式錯誤點

程式會以「慢動作」顯示資料流向清楚呈現

程式執行時,可以在資料線上按下左鍵,來查看此線的資料

Page 38: LabView  with Lego NXT

迴圈結構: For loop, While loop

Page 39: LabView  with Lego NXT

迴圈 (Loop)• While 迴圈

– 接點計算重複執行次數– 至少執行一次– 一直執行到滿足停止條件

為止

•For 迴圈– i 接點計算重複執行次數– 根據計數接點的輸入埠 來

執行

While 迴圈

For 迴圈

Page 40: LabView  with Lego NXT

繪製迴圈

1. 選擇結構

2. 圈選要重複執行的程式碼

3. 拖拉其它的節點並完成接線

Page 41: LabView  with Lego NXT

Exercise 3

• Structures -> Loop_infinitely

• 該怎麼改成用 for loop?

Page 42: LabView  with Lego NXT

暫存器 (Shift Register) – 暫存器• 可在迴圈結構的左邊框或右邊框使用

• 在邊框上按滑鼠右鍵,選擇 Add Shift Register

• 右側接點會在迴圈執行完畢時儲存資料

• 左側接點輸出上次迴圈的資料

迴圈開始之前

第一次執行

第二次執行

最後一次執行

值 3初始值

Page 43: LabView  with Lego NXT

Exercise 4

• Structures -> Shift_Register_Counting

Page 44: LabView  with Lego NXT

如何進行抉擇?1. Case 結構

2. Select

Page 45: LabView  with Lego NXT

Exercise 5

• Motors -> Case_Structure_Motor_Control

Page 46: LabView  with Lego NXT

NXT 感測器與馬達應用

Page 47: LabView  with Lego NXT

Exercise 6

• Sensors -> Use_Value

Page 48: LabView  with Lego NXT

Exercise 7

• Motors -> Front_Panel_Steering_Control

Page 49: LabView  with Lego NXT

假設情境 :

• 早上起來懶洋洋的,懶得起床把電燈打開。是否可以寫個程式,當拍手一下電燈就會從暗到亮,再拍一下會從亮到暗,而一直連續下去 ?

Page 50: LabView  with Lego NXT

提示• 當你發現程式在多處會重複的時候 …– 該用迴圈了

• 當你發現迴圈需要記住上一次迴圈的狀態– 該用 Shift Register 了

Page 51: LabView  with Lego NXT

不如先由 Flowchart 開始規劃開始

結束

擷取麥克風音量

將燈泡反向大於界限 ?

Stop 按鈕 ?

yes

no

yesno

Page 52: LabView  with Lego NXT

一個做法 …

• 有其他做法嗎 ? 請和其他同學分享你的想法 !

Page 53: LabView  with Lego NXT

Array :陣列

Page 54: LabView  with Lego NXT

Array

• 將同類型的資料集合成一個群組– 可以有不同維度,例如 1-D , 2-D 等等 …–收集資料,方便做後續分析或呈現

• 如何建立陣列 ?

Page 55: LabView  with Lego NXT

建立 Array

在 NXT Robotics» Array

and Cluster ,選擇 Array 圖示

將它放在人機界面上。

Page 56: LabView  with Lego NXT

建立 Array將其他資料形態放入 Array 框中,例如要數字的 Array ,就把數字的 Control 或 Indicator 放進去

Page 57: LabView  with Lego NXT

使用迴圈建立 Array• 自動索引

– “Auto-Indexing”

– 開啟時,迴圈會自動把

裡面的資料整理成 array

– 關閉時,迴圈只會輸出

最後一筆資料

– 在節點上按右鍵,可以

選擇 Enable 或 Disable

Auto-Indexing

接線變粗

接線保持原樣

關閉自動索引

啟動自動索引

只有一個值(最後一次執行)被傳出迴圈

1D 陣列

0 1 2 3 4 5

5

Page 58: LabView  with Lego NXT

有了 Array ,就能夠分析並處理• Sort Array• Reverse Array• Search Array

Page 59: LabView  with Lego NXT

Exercise 8

九九乘法表

Page 60: LabView  with Lego NXT

Graphs and Charts

Page 61: LabView  with Lego NXT

Graphs and Charts• Graph– 適合顯示 array– 不會累計資料,上次顯

示的 array 會被這次的資料覆蓋

• Chart– 適合顯示單筆資料– 有 history 記憶體,可以累計資料

Page 62: LabView  with Lego NXT

Exercise 0

• Sensors -> Uploading_Data_to_Graph

• 可不可以在迴圈裡加個 Chart 來顯示即時資料 ?

Page 63: LabView  with Lego NXT

Cluster (叢集 ) 簡介• 將資料集合在一起的資料結構• 資料可以是不同類型• 相當於 C 的 struct• 元件必須都是 control 或 indicator• 可以想像綁成一條電纜的電線

Page 64: LabView  with Lego NXT

建立叢集1. 選擇一個叢集邊框。

在 NXT Robotics» Array and Cluster ,選擇 Cluster

2. 將物件放入邊框裡。

Page 65: LabView  with Lego NXT

資料擷取與分析

Page 66: LabView  with Lego NXT

Log (Red) Dataset• NXT 內建三個記憶體空間– Red, Blue, Green

• 選擇記憶體空間

• 定義 Sample Time– 資料點之間的時間差

• 定義 Time–整體作業時間

Page 67: LabView  with Lego NXT

另外一個方法• Log Dataset 會等到所有資料都抓到之後才

執行完畢• 如何讓迴圈裡其它函式繼續執行 ?

Page 68: LabView  with Lego NXT

讀取資料: Data Viewer

Page 69: LabView  with Lego NXT

Exercise 10

• Data Logging -> Multiple_Data_Sets

Page 70: LabView  with Lego NXT

加入搖桿 / 滑鼠來控制機器人

Page 71: LabView  with Lego NXT

Web Publishing Tool

• Step1︰開啟 vi檔,選擇 Tools→ Web Publishing Tool

• Step2︰啟動 Start Web Server

• Step3︰選擇 Save to Disk

• Step4︰程式將顯示此網頁的網址 (http://yourpcIP/檔名 .htm) 。

• Step5︰用瀏覽器開啟網址,進行遠端控制動作。

Page 72: LabView  with Lego NXT

結語與討論

72