LabView with Lego NXT

Preview:

Citation preview

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

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

09:00 ~12:00

LabVIEW 環境簡介

了解 LabVIEW 資料流概念

人機界面 / 程式碼介紹

LabVIEW NXT 函式總覽

編輯 LabVIEW 程式技巧

LabVIEW 程式除錯工具

13:00 ~16:00

迴圈結構 : For loop, While loop

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

LabVIEW 裡的判別與抉擇 (Case)

NXT 感測器和馬達應用

課程大綱

09:00 ~12:00

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

圖表的應用與資料分析

字串和檔案存取

狀態機

13:00 ~16:00

Android 手機程式設計

使用 Google App Inventor

LabVIEW 環境簡介

LabVIEW 優點• 直覺式程式設計

• Multithreading ,平行處理迴圈

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

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

– C , Matlab , .NET , ActiveX …

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

• Windows, Mac, PDA, FPGA …

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

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

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

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

Express Functions Palette

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

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

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

LabVIEW 圖形化程式環境

開始 » 所有程式 »National Instruments LabVIEW

歡迎畫面:

從空白 VI 開始:New»Blank VI

從範例開始:Examples»Find

Examples…

or

LabVIEW 歡迎畫面

每個 VI 都有兩個視窗 :

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

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

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

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

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

Front Panel

(Drag and drop to front panel)

Indicator: 顯示元件

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

Block Diagram

( Drag and drop to block diagram )

函式,迴圈,程式結構

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

右邊:ProgrammingNXT Robotics

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

操作工具

定位/改變大小工具

標籤工具

接線工具

工具 (Tools) 面板

自動選擇工具

在以下工具中進行選擇:

執行按鈕

連續執行按鈕

放棄執行

執行標示按鈕

額外按鈕 :

狀態 (Status) 工具欄

保留接線值按鈕

步進函數按鈕

Dataflow: LabVIEW 核心概念

Dataflow ( 資料流 )

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

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

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

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

Dataflow ( 資料流 )

• Ex:

LabVIEW EE NXT Setup

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

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

Example Finder

• 搜尋範例程式的好幫手

• Help Find Examples

• NXT Robotics 資料夾

Exercise 1: Hello World

• Display -> Hello World.vit

• 用 Highlight Execution 了解資料流

LabVIEW 的資料類型

LabVIEW NXT 函式總覽

NXT Programming

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

NXT I/O

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

如何切換 Direct / Remote

Behaviors

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

TETRIX

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

Exercise 2: 擷取 NXT Light Sensor

• Sensors -> Graphing_Sensor_Values.vit

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

LabVIEW 程式設計技巧

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

Context Help 視窗

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

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

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

小技巧

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

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

LabVIEW 程式除錯工具

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

• Execution Highlighting

• Probes

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

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

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

迴圈結構: For loop, While loop

迴圈 (Loop)• While 迴圈

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

為止

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

執行

While 迴圈

For 迴圈

繪製迴圈

1. 選擇結構

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

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

Exercise 3

• Structures -> Loop_infinitely

• 該怎麼改成用 for loop?

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

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

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

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

迴圈開始之前

第一次執行

第二次執行

最後一次執行

值 3初始值

Exercise 4

• Structures -> Shift_Register_Counting

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

2. Select

Exercise 5

• Motors -> Case_Structure_Motor_Control

NXT 感測器與馬達應用

Exercise 6

• Sensors -> Use_Value

Exercise 7

• Motors -> Front_Panel_Steering_Control

假設情境 :

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

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

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

不如先由 Flowchart 開始規劃開始

結束

擷取麥克風音量

將燈泡反向大於界限 ?

Stop 按鈕 ?

yes

no

yesno

一個做法 …

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

Array :陣列

Array

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

• 如何建立陣列 ?

建立 Array

在 NXT Robotics» Array

and Cluster ,選擇 Array 圖示

將它放在人機界面上。

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

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

– “Auto-Indexing”

– 開啟時,迴圈會自動把

裡面的資料整理成 array

– 關閉時,迴圈只會輸出

最後一筆資料

– 在節點上按右鍵,可以

選擇 Enable 或 Disable

Auto-Indexing

接線變粗

接線保持原樣

關閉自動索引

啟動自動索引

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

1D 陣列

0 1 2 3 4 5

5

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

Exercise 8

九九乘法表

Graphs and Charts

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

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

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

Exercise 0

• Sensors -> Uploading_Data_to_Graph

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

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

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

在 NXT Robotics» Array and Cluster ,選擇 Cluster

2. 將物件放入邊框裡。

資料擷取與分析

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

• 選擇記憶體空間

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

• 定義 Time–整體作業時間

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

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

讀取資料: Data Viewer

Exercise 10

• Data Logging -> Multiple_Data_Sets

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

Web Publishing Tool

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

• Step2︰啟動 Start Web Server

• Step3︰選擇 Save to Disk

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

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

結語與討論

72

Recommended