第十二章 遙控機(jī)器人
特別提示:《AppInventor編程實(shí)例及指南》中文譯本上線,請?jiān)L問www.17coding.net。本章將創(chuàng)建一個(gè)應(yīng)用,將Android手機(jī)變成LEGOMINDSTORMS NXT機(jī)器人的遙控器。應(yīng)用中用按鈕來控制機(jī)器人前后移動(dòng)、左右轉(zhuǎn)動(dòng)和停止,如果機(jī)器人遇到障礙物,它還會(huì)自動(dòng)停止。應(yīng)用中使用具有藍(lán)牙功能的手機(jī)與機(jī)器人通信。
LEGOMINDSTORMS機(jī)器人不只是玩具,更是教具。After-school program使用機(jī)器人來教小學(xué)和初中的孩子們掌握解決問題的能力,并引導(dǎo)他們了解工程和計(jì)算機(jī)編程。NXT機(jī)器人也用于FIRST LEGOLeague 機(jī)器人競賽,這項(xiàng)比賽允許9-14歲的孩子參加。
NXT可編程機(jī)器人套件中有一個(gè)“NXT智能積木”主單元,它可以控制三個(gè)電機(jī)及四個(gè)輸入傳感器。你可以用樂高的構(gòu)造元件、齒輪、車輪、電機(jī)和傳感器來組裝機(jī)器人。該套件自帶的軟件可以對機(jī)器人進(jìn)行編程,但現(xiàn)在我們將用AppInventor來創(chuàng)建Android應(yīng)用,通過藍(lán)牙連接來控制NXT機(jī)器人。
應(yīng)用中參與協(xié)作的機(jī)器人具有超聲波傳感器以及用于移動(dòng)的車輪,如移動(dòng)發(fā)射器(Shooterbot)機(jī)器人。圖中所示,這款機(jī)器人通常是人們利用LEGOMINDSTORMS NXT 2.0套件建造的第一個(gè)機(jī)器人。它的左車輪與輸出端口C相連,右車輪與輸出端口B相連,顏色傳感器與輸入端口3相連,超聲波傳感器與輸入端口4相連。
學(xué)習(xí)要點(diǎn)
本章用到了以下組件和概念:
●BluetoothClient組件:用于建立Android設(shè)備與NXT機(jī)器人之間的藍(lán)牙連接;
●ListPicker組件:為用戶提供機(jī)器人選擇列表,選中后開始建立機(jī)器人到Android的連接;
●NxtDrive組件:用于驅(qū)動(dòng)機(jī)器人的輪子;
●NxtUltrasonicSensor組件:利用機(jī)器人的超聲波傳感器探測障礙物;
●Notifier組件:顯示錯(cuò)誤消息。
| 注意:如果你曾經(jīng)修改過機(jī)器人的名字,則尋找機(jī)器人現(xiàn)在的名字,而非“NXT”。 |
8.如果機(jī)器人名字下顯示“已配對但未連接”字樣,則配對成功!否則,繼續(xù)執(zhí)行步驟9;
9.如果機(jī)器人名字下顯示“與此設(shè)備配對”,則點(diǎn)擊它;
10.在NXT上,要求輸入密碼,按下橙色方塊接受1234為密碼;
11.在Android上,也會(huì)要求輸入PIN碼,輸入1234,然后按確定;
12.現(xiàn)在應(yīng)該看到“已配對但未連接。”,說明配對成功!
連接到App Inventor網(wǎng)站,創(chuàng)建新項(xiàng)目“NXTRemoteControl”,將設(shè)置屏幕的標(biāo)題為“遙控機(jī)器人”,并連接測試手機(jī)。
設(shè)計(jì)組件
在創(chuàng)建用戶界面之前,先來創(chuàng)建表12-1中的不可見組件,如圖12-1所示,用來控制NXT。
表12-1NXT“機(jī)器人遙控”應(yīng)用中的不可見組件
組件類型 | 面板中分組 | 命名 | 作用 |
BluetoothClient | Connectivity | BluetoothClient1 | 建立Android與NXT的連接 |
NxtDrive | LEGO® MINDSTORMS® | NxtDrive1 | 驅(qū)動(dòng)機(jī)器人的輪子 |
NxtUltrasonicSensor | LEGO® MINDSTORMS® | NxtUltrasonicSensor1 | 檢測障礙物 |
Notifier | User Interface | Notifier1 | 顯示錯(cuò)誤信息 |

圖12-1 在組件設(shè)計(jì)器底部顯示的不可見組件
按以下方式設(shè)置組件的屬性:1.設(shè)置NxtDrive1及NxtUltrasonicSensor1的BluetoothClient屬性為BluetoothClient1;(說明輪子的驅(qū)動(dòng)與障礙物的偵測都需要依賴藍(lán)牙通信——譯者注)2.勾選NxtUltrasonicSensor1的BelowRangeEventEnabled屬性(近距離偵測障礙物功能可用);3.設(shè)置NxtDrive1的DriveMotors屬性: ●如果機(jī)器人的左輪電機(jī)與輸出端口C連接,右輪電機(jī)與輸出端口B連接,則保持默認(rèn)設(shè)置“CB”;●如果機(jī)器人的配置與上述不同,則將DriveMotors屬性設(shè)置為兩個(gè)字母的文本,其中第一個(gè)字母是連接左輪電機(jī)的輸出端口,第二個(gè)字母是連接右輪電機(jī)的輸出端口。4.設(shè)置NxtUltrasonicSensor1的SensorPort屬性: ●如果機(jī)器人的超聲波傳感器與輸入端口4連接,則保持默認(rèn)值“4”; ●如果機(jī)器人的配置與上述不同,則將SensorPort設(shè)置為與超聲波傳感器連接的輸入端口。
可視組件
現(xiàn)在創(chuàng)建用戶界面組件,如圖12-2所示。
圖12-2 組件設(shè)計(jì)器中的應(yīng)用
建立藍(lán)牙連接時(shí),Android設(shè)備需要訪問NXT機(jī)器人具有唯一性的藍(lán)牙地址,但藍(lán)牙地址由8個(gè)用冒號分隔的2位數(shù)的十六進(jìn)制數(shù)(二進(jìn)制數(shù)的另一種表示方式)組成,輸入起來異常麻煩,而且每次運(yùn)行應(yīng)用都要在手機(jī)上輸入該地址。為了減少麻煩,使用ListPicker來顯示已經(jīng)與手機(jī)配對的機(jī)器人列表(列表項(xiàng)的值為機(jī)器人的名稱及藍(lán)牙地址),并從中選擇一個(gè)。
使用按鍵來驅(qū)動(dòng)機(jī)器人的前進(jìn)、后退、左右轉(zhuǎn)動(dòng)、停止和斷開連接,使用VerticalArrangement來放置除ListPicker以外的所有組件,用HorizontalArrangement來放置左右轉(zhuǎn)向及停車按鈕。
按照表12-2中列出的組件來創(chuàng)建圖12-2所示的用戶界面。
表12-2NXT機(jī)器人控制器應(yīng)用中的可見組件
組件類型 | 面板中分組 | 命名 | 作用 |
ListPicker | User Interface | ConnectListPicker | 選擇要連接的機(jī)器人 |
VerticalArrangement | layout | VerticalArrangement1 | 布局容器,容納除ListPicker之外的組件 |
Button | User Interface | Forwaron | 前進(jìn) |
HorizonalArrangement | layout | HorizonalArrangement1 | 布局容器,容納左轉(zhuǎn)、右轉(zhuǎn)、停止按鈕 |
Button | User Interface | LeftButton | 左轉(zhuǎn) |
Button | User Interface | StopButton | 停止 |
Button | User Interface | RightButton | 右轉(zhuǎn) |
Button | User Interface | Backwaron | 后退 |
Button | User Interface | DisconnectButton | 與NXT斷開連接 |
按照圖12-2所示來設(shè)置可視組件布局:將LeftButton、StopButton和RightButton放在HorizontalArrangement1中,將Forwaron、HorizontalArrangement1、Backwaron和DisconnectButton放在VerticalArrangement1中。按下列方式設(shè)置組件屬性: 1.取消勾選Screen1的Scrollable屬性(滾屏功能); 2.設(shè)置ConnectListPicker和DisconnectButton的寬度為“Fill parent”; 3.設(shè)置VerticalArrangement1、Forwaron、HorizontalArrangement1、LeftButton、StopButton、RightButton及Backwaron的Width與Height為“Fillparent”; 4.設(shè)置ConnectListPicker的Text屬性為“連接”; 5.設(shè)置Forwaron的Text屬性為“∧”; 6.設(shè)置LeftButton的Text屬性為“<”; 7.設(shè)置StopButton的Text屬性為“—”; 8.設(shè)置RightButton的Text屬性為“>”; 9.設(shè)置Backwaron的Text屬性為“∨”; 10.設(shè)置DisconnectButton的Text屬性為“斷開連接”; 11.設(shè)置ConnectListPicker和DisconnectButton的FontSize屬性為30; 12.設(shè)置Forwaron、LeftButton、StopButton、RightButton及Backwaron的FontSize屬性為40。 在這類應(yīng)用中,當(dāng)手機(jī)與NXT建立藍(lán)牙連接之前,應(yīng)該隱藏用戶的操作界面,為此取消勾選VerticalArrangement1的Visible屬性。不要擔(dān)心,當(dāng)NXT連通后,將重新顯示用戶界面。
為組件添加行為
本節(jié)將編程來設(shè)置應(yīng)用的行為,包括:●用戶從列表中選擇機(jī)器人,并與之建立連接;●斷開機(jī)器人與應(yīng)用的連接;●使用控制按鈕來操控機(jī)器人;●在機(jī)器人偵測到障礙物時(shí),讓它停下來。
連接到NXT機(jī)器人
添加第一個(gè)行為:連接到NXT。點(diǎn)擊ConnectListPicker將顯示已配對的機(jī)器人列表,選中一個(gè),將在應(yīng)用與機(jī)器人之間建立藍(lán)牙連接。
顯示機(jī)器人列表
使用ConnectListPicker組件來顯示機(jī)器人列表。ListPicker的外表像按鈕,被點(diǎn)擊后則顯示列表項(xiàng),并允許進(jìn)行單選。使用BluetoothClient1.AddressesAndNames塊來提供列表,列表項(xiàng)是已經(jīng)與Android設(shè)備配對的藍(lán)牙設(shè)備的名稱及地址。由于NXT已經(jīng)將輪驅(qū)動(dòng)及超聲波組件的BluetoothClient屬性設(shè)定為BluetoothClient1,因此AddressesAndNames屬性列表中的設(shè)備會(huì)自動(dòng)限定為這類機(jī)器人,其他類型的藍(lán)牙設(shè)備(如耳機(jī))將不會(huì)出現(xiàn)在列表中。表12-3列出了所需要的塊。
表12-3在應(yīng)用中添加ListPicker列表所需要的塊
塊的類型 | 所在抽屜 | 作用 |
ConnectListPicker.BeforePicking | ConnectListPicker | 當(dāng)ConnectListPicker被點(diǎn)擊時(shí),觸發(fā)該事件 |
set ConnectListPicker.Elementsto | ConnectListPicker | 為ConnectListPicker設(shè)置可供選擇的列表項(xiàng) |
BluetoothClient1.AddressesAndNames | BluetoothClient1 | 已經(jīng)與Android設(shè)備配對的機(jī)器人地址和名稱 |
塊的作用點(diǎn)擊ConnectListPicker將觸發(fā)ConnectListPicker.BeforePicking事件,并顯示可選項(xiàng)列表。將ConnectListPicker.Elements屬性設(shè)置為BluetoothClient1.AddressesAndNames塊,來設(shè)定可選項(xiàng);ConnectListPicker將顯示已經(jīng)與Android設(shè)備配對的機(jī)器人列表。
圖12-3 顯示機(jī)器人列表
測試:在手機(jī)上點(diǎn)擊“連接”,看看會(huì)發(fā)生什么,你會(huì)看到所有已經(jīng)與手機(jī)配對的機(jī)器人列表。 如果只見黑屏,說明手機(jī)尚未與任何機(jī)器人配對;如果見到其他藍(lán)牙設(shè)備,如藍(lán)牙耳機(jī),說明NxtDrive1與NxtUltrasonicSensor1的BluetoothClient屬性設(shè)置有誤。 |
建立藍(lán)牙連接
從列表中選擇一個(gè)機(jī)器人,應(yīng)用將通過藍(lán)牙與機(jī)器人連接。如果連接成功,用戶界面將發(fā)生變化:隱藏ConnectListPicker,并顯示用戶界面的其余部分。如果機(jī)器人開關(guān)沒有打開,則連接失敗,會(huì)彈出錯(cuò)誤信息。
使用callBluetoothClient1.Connect塊與機(jī)器人進(jìn)行連接。ConnectListPicker.Selection屬性提供了選中機(jī)器人的地址和名稱信息。
使用ifelse塊來測試連接是否成功。ifelse塊需要連接三個(gè)不同的塊:“if”、“then”及“else”。“if”與BluetoothClient1.Connect塊連接,“then”區(qū)域放置連接成功時(shí)要執(zhí)行的塊;“else”區(qū)域放置連接失敗時(shí)要執(zhí)行的塊。
如果連接成功,使用Visible屬性來隱藏 ConnectListPicker并顯示VerticalArrangement1(其中放置了除ConnectListPicker之外的所有組件)。如果連接失敗,則使用Notifier1.ShowAlert塊來顯示錯(cuò)誤信息。表12-4列出了設(shè)置上述行為所需的塊。
表12-4與機(jī)器人建立藍(lán)牙連接所需的塊
塊的類型 | 所在抽屜 | 作用 |
ConnectListPicker.AfterPicking | ConnectListPicker | 當(dāng)從ConnectListPicker選中一個(gè)機(jī)器人時(shí)觸發(fā) |
ifelse | Control | 檢驗(yàn)藍(lán)牙連接是否成功 |
callBluetoothClient1.Connect | BluetoothClient1 | 連接到機(jī)器人 |
ConnectListPicker.Selection | ConnectListPicker | 選中的機(jī)器人的地址及名稱 |
set ConnectListPicker.Visibleto | ConnectListPicker | 隱藏ConnectListPicker按鈕 |
false | Logic | 插入set ConnectListPicker.Visible to塊 |
set VerticalArrangement1.Visibleto | VerticalArrangement1 | 顯示“連接”按鈕之外的所有組件 |
true | Logic | 插入set VerticalArrangement1.Visibleto塊 |
Notifier1.ShowAlert | Notifier1 | 用來彈出錯(cuò)誤信息 |
“無法建立藍(lán)牙連接?!?/p> | Text | 錯(cuò)誤信息。 |
塊的作用
選中機(jī)器人后將觸發(fā)ConnectListPicker.AfterPicking事件,見圖12-4,BluetoothClient1.Connect塊用于建立與機(jī)器人之間的藍(lán)牙連接。如果連接成功,執(zhí)行“then”塊:隱藏ConnectListPicker按鈕并顯示VerticalArrangement1內(nèi)的所有組件,即,設(shè)置ConnectListPicker.Visible屬性為false,設(shè)置VerticalArrangement1.Visible屬性為true。如果連接失敗,執(zhí)行“else”塊:用Notifier1.ShowAlert塊彈出錯(cuò)誤信息。
圖12-4建立藍(lán)牙連接
與NXT斷開連接
讓Android設(shè)備與NXT機(jī)器人連接著實(shí)讓人興奮,不過“斷開連接”是我們下面要添加的行為,這樣便于對連接與斷開進(jìn)行連續(xù)測試。
當(dāng)點(diǎn)擊DisconnectButton時(shí),應(yīng)用將關(guān)閉藍(lán)牙連接,用戶界面將發(fā)生變化:ConnectListPicker按鈕將重新出現(xiàn),而用戶界面上的其余組件將被隱藏。
表12-5列出了構(gòu)建BluetoothClient1.Disconnect(斷開藍(lán)牙連接)所需的塊。設(shè)置Visible屬性來顯示ConnectListPicker按鈕并隱藏VerticalArrangement1中包含的所有組件。
表12-5 與機(jī)器人斷開連接所需的塊
塊的類型 | 所在抽屜 | 作用 |
DisconnectButton.Click | DisconnectButton | 當(dāng)點(diǎn)擊DisconnectButton時(shí)觸發(fā)該事件 |
BluetoothClient1.Disconnect | BluetoothClient1 | 斷開與機(jī)器人的藍(lán)牙連接 |
set ConnectListPicker.Visibleto | ConnectListPicker | 顯示ConnectListPicker(“連接”按鈕) |
true | Logic | 插入set ConnectListPicker.Visible to塊 |
set VerticalArrangement1.Visibleto | VerticalArrangement1 | 隱藏用戶界面上的其余組件 |
false | Logic | 插入set VerticalArrangement1.Visibleto塊 |
塊的作用
點(diǎn)擊DisconnectButton將觸發(fā)DisconnectButton.Clicked事件,如圖12-5所示,斷開藍(lán)牙連接要用BluetoothClient1.Disconnect塊,之后設(shè)置ConnectListPicker.Visible屬性為true來顯示ConnectListPicker,設(shè)置VerticalArrangement1.Visible屬性為false來隱藏VerticalArrangement1。
圖12-5 與機(jī)器人斷開連接
測試:請確保機(jī)器人已經(jīng)打開,點(diǎn)擊手機(jī)上的“連接”按鈕,并選擇要連接的機(jī)器人。建立藍(lán)牙連接需要一點(diǎn)時(shí)間。一旦連接成功,用戶界面將顯示機(jī)器人的控制按鈕,以及“斷開連接”按鈕。 單擊“斷開連接”按鈕:控制機(jī)器人的按鈕會(huì)消失,“連接”按鈕則重新出現(xiàn)。 |
操控機(jī)器人
下面是真正有趣的部分:添加前進(jìn)、后退、左右轉(zhuǎn)動(dòng)及停止行為。不要忘記“停止”,否則你手中的機(jī)器人會(huì)失去控制!
NxtDrive組件提供了五個(gè)塊,用來驅(qū)動(dòng)機(jī)器人的電機(jī):
lMoveForwardIndefinitely塊:驅(qū)動(dòng)兩個(gè)電機(jī)前進(jìn);
lMoveBackwardIndefinitely塊:驅(qū)動(dòng)兩個(gè)電機(jī)后退;
lTurnCounterClockwiseIndefinitely塊:驅(qū)動(dòng)機(jī)器人左轉(zhuǎn):讓右側(cè)電機(jī)向前而左側(cè)電機(jī)后退;
lTurnClockwiseIndefinitely塊:驅(qū)動(dòng)機(jī)器人右轉(zhuǎn):讓左側(cè)電機(jī)向前而右側(cè)電機(jī)后退;
lStop將停止電機(jī)。
每個(gè)移動(dòng)及轉(zhuǎn)向塊都有一個(gè)Power參數(shù),需要與數(shù)字塊配合使用,來設(shè)定機(jī)器人電機(jī)的輸出功率,取值范圍可以從0到100。但如果設(shè)置的功率太小,電機(jī)會(huì)發(fā)出吱吱聲而不運(yùn)轉(zhuǎn)。在本例中建議使用90(百分比)。表12-6中列出了所需的塊。
表12-6 用于控制機(jī)器人的塊
塊的類型 | 所在抽屜 | 作用 |
Forwaron.Click | Forwaron | 點(diǎn)擊Forwaron時(shí)觸發(fā) |
NxtDrive1.MoveForwardIndefinitely | NxtDrive1 | 驅(qū)動(dòng)機(jī)器人前進(jìn) |
數(shù)字90 | Math | 功率值 |
Backwaron.Click | Backwaron | 點(diǎn)擊Backwaron時(shí)觸發(fā) |
NxtDrive1.MoveBackwardIndefinitely | NxtDrive1 | 驅(qū)動(dòng)機(jī)器人后退 |
數(shù)字90 | Math | 功率值 |
LeftButton.Click | LeftButton | 點(diǎn)擊LeftButton時(shí)觸發(fā) |
NxtDrive1.TurnCounterClockwiseIndefinitely | NxtDrive1 | 驅(qū)動(dòng)機(jī)器人逆時(shí)針轉(zhuǎn)動(dòng) |
數(shù)字90 | Math | 功率值 |
RightButton.Click | RightButton | 點(diǎn)擊RightButton時(shí)觸發(fā) |
NxtDrive1.TurnClockwiseIndefinitely | NxtDrive1 | 驅(qū)動(dòng)機(jī)器人順時(shí)針轉(zhuǎn)動(dòng) |
數(shù)字90 | Math | 功率值 |
StopButton.Click | StopButton | 點(diǎn)擊StopButton時(shí)觸發(fā) |
NxtDrive1.Stop | NxtDrive1 | 讓機(jī)器人停止 |
塊的作用
如圖12-6所示,點(diǎn)擊Forwaron按鈕時(shí)觸發(fā)Forwaron.Clicked事件,此時(shí)調(diào)用NxtDrive1.MoveForwardIndefinitely塊,讓機(jī)器人以90%的功率前進(jìn),其余按鈕的事件處理程序與此類似,并以相同的功率驅(qū)動(dòng)機(jī)器人后退及左右轉(zhuǎn)動(dòng)。點(diǎn)擊StopButton時(shí)觸發(fā)StopButton.Clicked事件,調(diào)用NxtDrive1.Stop塊讓機(jī)器人停止運(yùn)動(dòng)。
圖12-6操控機(jī)器人
測試:按照此前的“測試”說明,先連接NXT機(jī)器人。不要將機(jī)器人放在桌子上,以免跌落,然后測試以下行為: 1.點(diǎn)擊前進(jìn)按鈕,機(jī)器人應(yīng)該向前移動(dòng);2.點(diǎn)擊后退按鈕,機(jī)器人應(yīng)該向后移動(dòng); 3.點(diǎn)擊左轉(zhuǎn)按鈕,機(jī)器人應(yīng)逆時(shí)針轉(zhuǎn)動(dòng); 4.點(diǎn)擊右轉(zhuǎn)按鈕,機(jī)器人應(yīng)順時(shí)針轉(zhuǎn)動(dòng); 5.點(diǎn)擊停止按鈕,機(jī)器人應(yīng)停止。 如果機(jī)器人不動(dòng)并發(fā)出吱吱聲,可能需要加大電機(jī)的功率,可以用最大功率100。 |
用超聲波傳感器探測障礙物
使用超聲波傳感器的機(jī)器人可以偵測到30厘米范圍內(nèi)的障礙物,遇到障礙物時(shí)機(jī)器人會(huì)像罪犯一樣停下來,如圖12-7所示。
圖12-7 為NXT機(jī)器人設(shè)置障礙
NxtUltrasonicSensor組件用于偵測障礙物,兩個(gè)屬性BottomOfRange和TopOfRange用來定義偵測范圍(以厘米為單位)。默認(rèn)設(shè)定BottomOfRange為30厘米,TopOfRange為90厘米。
NxtUltrasonicSensor組件具有三個(gè)事件BelowRange、WithinRange及boveRange,當(dāng)偵測到障礙物在BottomOfRange(下限)距離以內(nèi)時(shí),會(huì)觸發(fā)BelowRange事件;當(dāng)障礙物的距離在BottomOfRange與TopOfRange (上下限)之間時(shí),會(huì)觸發(fā)WithinRange事件;當(dāng)障礙物的距離超過TopOfRange(上限)時(shí),將觸發(fā)AboveRange事件。
這里使用NxtUltrasonicSensor1.BelowRange事件塊,用來偵測30厘米以內(nèi)的障礙物,如果你想嘗試偵測不同距離的障礙物,可以調(diào)整BottomOfRange屬性。當(dāng)BelowRange時(shí)間發(fā)生時(shí),使用NxtDrive1.Stop塊讓機(jī)器人停下來。表12-7中列出了所需的塊
表12-7使用NxtUltrasonicSensor需要的塊
塊的類型 | 所在抽屜 | 作用 |
NxtUltrasonicSensor1.BelowRange | NxtUltrasonicSensor1 | 超聲波傳感器在30厘米內(nèi)遇到障礙物時(shí)觸發(fā) |
NxtDrive1.Stop | NxtDrive1 | 讓機(jī)器人停下來 |
塊的作用
當(dāng)機(jī)器人的超聲波傳感器偵測到30厘米以內(nèi)的障礙物時(shí),NxtUltrasonicSensor1.BelowRange事件被觸發(fā),如圖12-8所示,此時(shí)NxtDrive1.Stop塊讓機(jī)器人停下來。
圖12-8 偵測障礙物
測試:按照此前的“測試”說明,先連接NXT機(jī)器人。引導(dǎo)機(jī)器人朝著障礙物(如貓)的方向前進(jìn),機(jī)器人將在距離貓30厘米時(shí)停下來。如果機(jī)器人沒停下來,可能是貓已經(jīng)遠(yuǎn)離了機(jī)器人,它們之間的距離一直大于30厘米??梢該Q一個(gè)靜止的障礙物來進(jìn)行測試。 |
改進(jìn)
應(yīng)用運(yùn)行起來,想必你已經(jīng)花了大量時(shí)間來操控這個(gè)機(jī)器人,不過還是想繼續(xù)其他的嘗試:
l調(diào)節(jié)驅(qū)動(dòng)電機(jī)的輸出功率: -可以修改插入到前進(jìn)(MoveForwardIndefinitely)、后退(MoveBackwardIndefinitely)、左轉(zhuǎn)(TurnCounterclockwiseIndefinitely)及右轉(zhuǎn)(TurnClockwiseIndefinitely)塊中的數(shù)字塊的值。l當(dāng)偵測到障礙物時(shí),使用NxtColorSensor讓紅燈閃爍: -可以使用NxtColorSensor組件及其GenerateColor屬性; -需要將DetectColor屬性設(shè)置為false(或在組件設(shè)計(jì)器取消勾選該屬性),因?yàn)轭伾珎鞲衅鳠o法同時(shí)檢測和產(chǎn)生顏色。l使用Android的方向傳感器OrientationSensor來控制機(jī)器人。l使用樂高的構(gòu)造元件建立手機(jī)與機(jī)器人之間的物理連接,創(chuàng)建應(yīng)用實(shí)現(xiàn)機(jī)器人的自主性。小結(jié)以下是本章涵蓋的內(nèi)容:
lListPicker組件:讓用戶可以從已配對的機(jī)器人列表中進(jìn)行選擇;lBluetoothClient組件:使Android設(shè)備與機(jī)器人建立連接;
lNotifier組件:用來顯示錯(cuò)誤消息;
lVisible屬性:用于隱藏或顯示用戶界面中的組件;
lNxtDrive組件:可以控制機(jī)器人的移動(dòng)、轉(zhuǎn)向及停止;
lNxtUltrasonicSensor組件:用于偵測障礙物。
�
愛華網(wǎng)



