高階圖形化介面機器人研習
課程大綱日 期 時 間 課 程 內 容
第
一
天
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
Top Related