關(guān)于我們
書單推薦
新書推薦
|
計算機科學與工程導論
本書以培養(yǎng)學生對計算機科學與工程專業(yè)的興趣為宗旨,以培養(yǎng)問題解決能力為目標,從具體到抽象,將計算機科學的基本原理和動手實踐有機結(jié)合,通過圖形化的編程語言、機器人實驗、手機應用和Web開發(fā)等工具及案例,使學生了解基本的程序設計、計算機原理、軟件工程等計算機知識,并把整門課組織成了一個完整的工程項目。
計算機工業(yè)一直引導著世界工業(yè)的發(fā)展,也是其他行業(yè)前進的動力源。計算機科學和計算機工程專業(yè)是計算機工業(yè)以及相關(guān)產(chǎn)業(yè)發(fā)展的源泉,也一直是全世界最有價值的專業(yè)之一。然而,2000 年的網(wǎng)絡泡沫使計算機工業(yè)受到重創(chuàng),也使計算機科學及相關(guān)專業(yè)的學位價值第一次受到質(zhì)疑。計算機科學和計算機工程專業(yè)的生源也受到挑戰(zhàn),甚至出現(xiàn)了一場世界范圍內(nèi)的計算機科學生源危機。然而,2000年的網(wǎng)絡泡沫的影響是短暫的,計算機工業(yè)很快恢復并創(chuàng)造出更高的價值。例如,亞馬遜的市值在2000 年從其峰值107 美元/ 股一度跌到7美元/ 股。今天,亞馬遜的市值已經(jīng)遠遠超過2000 年的107 美元/ 股的峰值,并發(fā)展成為一家云計算服務的主要提供商。Google更是從一家網(wǎng)絡公司發(fā)展成為世界最大的公司之一,其業(yè)務包含互聯(lián)網(wǎng)、云計算、移動計算、智能手表、汽車等行業(yè)。
然而,計算機工業(yè)的恢復并沒有消除計算機專業(yè)的生源危機。以美國亞利桑那州立大學(ASU)為例。2002 年前,ASU 每年有200 名新生進入計算機科學專業(yè)。到2004 年,就只有100 名新生入學。美國其他大學的情況也與之類似。2008 年,美國計算機協(xié)會(ACM)發(fā)布的計算機科學教學大綱報告(http://www.acm.org/ education/curricula/ComputerScience2008.pdf)正式定義2000 年之后計算機科學進入生源危機,必須采取有效措施來解決這一危機。ACM 在長達108 頁的報告中用了一整章來闡述這一危機的解決方案。 ACM 的報告指出,網(wǎng)絡泡沫的影響只是計算機科學專業(yè)進入生源危機的導火索,致使計算機科學生源持續(xù)危機的真正原因是陳舊的教學方法和內(nèi)容。計算機科學專業(yè)課程,特別是計算機入門課程的教學方法和內(nèi)容必須使學生感興趣,想挑戰(zhàn),還要能激發(fā)學生的創(chuàng)造性。ACM 報告建議從三方面來改進教學方法和內(nèi)容。 第一,應用領(lǐng)域。計算機科學的教學內(nèi)容必須更緊密地與應用相結(jié)合。 第二,課程設置。計算機科學的教學必須增加學生感興趣的課程,例如,游戲編程、多媒體計算、機器人、移動計算。 第三,教學方法。教學過程必須生動有趣,以激發(fā)學生的學習興趣,聽課的同時必須動手實踐,內(nèi)容有挑戰(zhàn)性但必須基于學生的接受能力,教學必須與就業(yè)機會相結(jié)合。 在ACM 大綱的指導下,很多大學開始在計算機的課程中增加學生感興趣的內(nèi)容。機器人的引入最為廣泛。 為什么基于機器人的計算機科學入門課程沒有在10 年、20 年或30 年前發(fā)生呢?有多方面的原因: 第一,計算機科學專業(yè)的生源一直很好,計算機教育主要注重內(nèi)容和系統(tǒng)化,沒有太多考慮學生的興趣。 第二,機器人硬件價格高,無法用于大班課程。 第三,機器人涉及硬件和軟件,編程復雜,不宜作為入門課程的內(nèi)容。 近10 年來,這幾方面都發(fā)生了根本的變化。計算機科學專業(yè)的生源在2000 年后受到挑戰(zhàn)。機器人硬件價格大幅下降,特別是面向服務的軟件技術(shù)、云計算和可視化編程技術(shù)使機器人的編程應用在大學一年級甚至高中教學中成為可能。計算機教育專家和計算機工程師攜手合作,開發(fā)了多種可視化的教育編程平臺,使沒有計算機知識和編程基礎的高中生和大學低年級的學生能夠很快學會計算機應用編程。例如,美國MIT開發(fā)的Scratch以及卡內(nèi)基·梅隆大學開發(fā)的Alice動畫和編程平臺能讓學生把他們的故事變成電影和游戲。MIT的App Inventor能讓學生很快學會手機App編程。 樂高的NXT 2.0和EV3機器人編程平臺采取了軌道式積木編程模式,簡單易學,適合中小學的興趣教學。然而,NXT 2.0和EV3只能用于編程樂高機器人,而樂高機器人在中國價格昂貴,限制了它的廣泛應用。 Intel最新開發(fā)的物聯(lián)網(wǎng)服務編排層(IoT Services Orchestration Layer)在Linux操作系統(tǒng)上用可視化的語言編程物聯(lián)網(wǎng)設備,可以讀寫連接于物聯(lián)網(wǎng)控制板上的設備。 微軟的機器人開發(fā)工作室(MRDS)的VPL(Visual Programming Language,可視化程序設計語言)可用于編程和控制樂高NXT機器人和多種機器人,包括iRobot、Fischertechnik、LEGO Mindstorms NXT、Parallax robots和微軟的仿真機器人等。MRDS VPL可以用于編程從簡單到復雜的各種應用,廣泛用于高中和大學教學中。從2006年發(fā)布至今,MRDS VPL建立了一個巨大的用戶社區(qū)。遺憾的是,在微軟的重構(gòu)過程中,MRDS VPL項目被終止。盡管微軟繼續(xù)支持MRDS VPL的免費下載,但MRDS VPL不再支持新的機器人平臺,例如,MRDS VPL不支持取代樂高NXT的EV3機器人。 為了讓MRDS VPL的用戶社區(qū)能夠繼續(xù)他們的機器人程序開發(fā),基于對工作流和可視化語言多年的研究和開發(fā),亞利桑那州立大學(ASU)于2015年發(fā)布了ASU VIPLE機器人開發(fā)平臺,該平臺由陳以農(nóng)博士領(lǐng)導的物聯(lián)網(wǎng)及機器人教育實驗室開發(fā)。陳以農(nóng)博士于2003年和2005年受微軟資助,參與了MRDS VPL的早期研究。從2006年微軟發(fā)布起,ASU一直使用MRDS VPL作為計算機導論課實驗工具。當微軟終止MRDS VPL項目后,ASU物聯(lián)網(wǎng)及機器人教育實驗室以MRDS VPL功能和編程模式為設計說明,自主開發(fā)了VIPLE平臺。VIPLE有以下特點: 繼承了MRDS VPL的屬性和編程模式,具有MRDS VPL編程經(jīng)歷的教師和學生可以直接使用VIPLE。VPL的教學資料也能為VIPLE平臺所用。 擴展了MRDS VPL支持的機器人平臺,例如,VIPLE可以編程樂高的EV3機器人。使用MRDS VPL編程樂高NXT機器人的學?梢灾苯由壍紼V3。 在VIPLE程序與機器人之間采用了面向服務的標準通信接口JSON和開源的機器人中間件,可讓通用機器人平臺接入。 開發(fā)了以Linux為操作系統(tǒng)的VIPLE中間件并以Intel Edison的機器人作為默認平臺和套件。VIPLE中間件已經(jīng)移植到其他機器人平臺。Galileo和Edison的機器人價格不到樂高EV3的一半,從而可使基于VIPLE和Intel機器人的教學能夠推廣到更多學校。 除了MRDS VPL的機器人編程功能外,VIPLE還支持通用的服務計算。VIPLE支持C#源代碼模塊的插入,也可以調(diào)用Web服務來完成VIPLE庫程序中沒有的功能。 ASU VIPLE支持設計思維和使用可視化編程。開發(fā)者只需繪制應用程序的流程圖(規(guī)格設計)而無須編寫文本代碼。開發(fā)環(huán)境中的編譯工具能夠把流程圖直接轉(zhuǎn)換成可執(zhí)行的程序,從而使軟件開發(fā)變得更容易、更快速。整個軟件的開發(fā)過程就是一個簡單的拖放過程,即把代表服務的模塊拖放到流程圖的設計平面,然后用連線把它們連接起來。這個簡單的過程可以使沒有程序設計經(jīng)驗的人在幾分鐘內(nèi)創(chuàng)建自己的機器人應用程序。經(jīng)過一個學期的學習和動手實踐后,學生可以編出較為復雜的智能程序,使機器人能探索未知迷宮并走出迷宮。 ASU VIPLE可用作機器人導論、計算機導論、通信導論或工程導論等課程的實驗工具。 下面通過幾個程序案例來展示VIPLE編程的簡單性和實用性,特別是與計算機導論的相關(guān)性和對計算機導論課程實驗的支持。 案例1:ASU VIPLE實現(xiàn)的計數(shù)器該計數(shù)器程序從0計到10,并用語音輸出服務讀出所生成的數(shù)字:The number is 0,1,2,3,4,5,6,7,8,9,10。 案例2:車庫門遙控器下圖的有限狀態(tài)機描述了一個單鍵遙控器。當車庫門處于關(guān)閉狀態(tài)時,按下遙控鍵將使車庫門開啟。當車庫門處于開啟狀態(tài)時,按下遙控鍵將使車庫門關(guān)閉。當車庫門處于開啟或關(guān)閉過程中時,按下遙控鍵將使車庫門停止運動,再按下遙控鍵將使車庫門繼續(xù)向之前的方向運行。 上圖的有限狀態(tài)機可用下圖的ASU VIPLE程序?qū)崿F(xiàn)。所使用的單鍵是控制鍵Ctrl。 案例3:遙控Intel機器人以下VIPLE程序可以實現(xiàn)用計算機鍵盤(方向鍵)來遙控Intel機器人的移動,空格鍵是停止移動。 案例4:迷宮機器人編程以下程序展示了迷宮機器人編程過程。該機器人具有一個測距傳感器,根據(jù)前方、左方和右方的距離來決定下一步的走向。 與通常的介紹原理的教材不同,本書是一本介紹原理并實現(xiàn)原理的教材。學懂一個原理后,學生還必須把該原理應用到實踐中。比如,當學懂了運算器的工作原理后,學生必須用VPL 編寫一個運算器,并測試實現(xiàn)的運算器能否正確完成運算任務。當設計了一個迷宮漫游算法后,學生必須把該算法編程到機器人中,測試機器人能否在迷宮中不迷路。 所以,我們的教材不但必須保證原理的正確,還必須保證正確的原理能被學生在給定的時間內(nèi)實現(xiàn)。為此,我們必須驗證每一個實驗和每一個練習的正確性和時間要求。編寫這樣的教材和講授這樣的課程,會花費更多的精力和時間,但是我們堅信這樣的教材和這樣的課程是學生想要學的,是學生能學透和記住的,這樣才能培養(yǎng)出真正有知識和能力的學生。正是這樣的教學理念,使我們走到一起,聯(lián)手編寫了本書。 本教材的第1版于2013年出版,本教材的第2版在第1版的基礎上做了重大的改進。首先,主要的編程軟件從微軟的MRDS VPL更新到ASU VIPLE (Visual IoT/Robotics Programming Language Environment)。支持的機器人平臺也從樂高增加到多個其他平臺,包括Intel Edison和Galileo平臺、ARM pcDuino平臺、TI的平臺。VIPLE還有三個內(nèi)建仿真平臺:Unity模擬器平臺、Web 2D模擬器平臺和Web 3D模擬器平臺。ASU VIPLE可以在中文和英文菜單之間隨時切換。 由于工作量巨大,還有許多老師和學生參與了編寫和校驗工作,在此表示衷心的感謝。本教材基于自主開發(fā)的軟件平臺,許多學生參與了開發(fā)工作。 Garrett Drown開發(fā)了第1版的eRobotics的可視化編程語言;Calvin Cheng為VIPLE的早期開發(fā)提供幫助,并在EV3 API的開發(fā)上做出了貢獻;Gennaro De Luca負責VIPLE的主要開發(fā)工作;Tara De Vries對VIPLE開發(fā)中的服務集成做出了貢獻;Megan Plachecki、John Robertson和Sami Mian在JSON的接口設計、Edison機器人的中間件實現(xiàn)以及機器人的硬件實現(xiàn)方面做出了貢獻;Matthew De Rosa開發(fā)了第1版VIPLE Unity模擬器;Yufeng Ouyang 和Kaiyi Huang等開發(fā)了第2版的Unity模擬器;Adam Lew、Joshua Owens、Ankit Patel、Harshil Patel、Peter Tueller和Spencer Rodewald在Web 2D模擬器開發(fā)中做出了貢獻; Alexandra Porter、David Orellana、Matthew Miller 開發(fā)了Web 3D 模擬器。 如何開設一門受學生歡迎的計算機入門課程是一個值得持續(xù)探索的課題,我們也在進一步的嘗試和不斷完善中。因此,本書中難免有疏漏和不當之處,歡迎各位同行和讀者批評指正。 作者201
陳以農(nóng),亞利桑那州立大學計算機系高級講師。機器人程序主任、軟件實驗室科學家。編寫過多本教材。
推薦序
前 言 教學建議 第1章 職業(yè)發(fā)展機會和團隊建設 1 1.1計算機科學和工程的課程體系及職業(yè)發(fā)展 1 1.1.1計算機科學和工程的課程體系 1 1.1.2 計算機就業(yè)形勢分析 2 1.1.3 計算機不同領(lǐng)域的職業(yè)機會 5 1.2 團隊建設 6 1.2.1 合作模式 6 1.2.2 團隊組建 6 第2章機器人開發(fā)環(huán)境和VIPLE入門 7 2.1 工作流和可視化編程 7 2.2 VIPLE IoT/機器人開發(fā)環(huán)境 12 2.2.1 VIPLE的工程設計過程 12 2.2.2 VIPLE的活動和服務 13 2.3 VIPLE的使用 18 2.3.1創(chuàng)建程序顯示“Hello World” 19 2.3.2 最喜歡的電影 20 2.3.3使用或并和If活動創(chuàng)建條件循環(huán) 21 2.3.4 使用While循環(huán) 24 2.3.5 使用全局變量創(chuàng)建一個活動 25 2.3.6 創(chuàng)建Counter活動 27 2.3.7 建立一個2-1多路選擇器 28 第3章 邏輯設計與計算機組成 31 3.1仿真——設計過程中的關(guān)鍵步驟 31 3.2 計算機系統(tǒng) 32 3.2.1 計算機系統(tǒng)的類型 32 3.2.2 計算機系統(tǒng)的組成 33 3.3在VIPLE中創(chuàng)建計算機系統(tǒng)部件 39 3.3.1 創(chuàng)建邏輯與門 39 3.3.2 創(chuàng)建一個1位全加器 41 3.3.3 創(chuàng)建一個2-1多路選擇器 42 3.3.4 創(chuàng)建一個4-1多路選擇器 42 3.3.5 創(chuàng)建一個1位ALU 43 3.3.6 自動測試 44 第4章事件驅(qū)動編程和有限狀態(tài)機 46 4.1 引言 46 4.2 事件驅(qū)動編程 46 4.3 有限狀態(tài)機 48 4.4用ASU VIPLE來解決事件驅(qū)動問題 51 4.4.1 創(chuàng)建一個事件驅(qū)動計數(shù)器 52 4.4.2 實現(xiàn)一個自動售貨機 52 4.4.3 用事件來實現(xiàn)自動售貨機 52 4.4.4 車庫門控制器 53 4.4.5 奇偶校驗 54 4.4.6 并行計算 55 4.4.7 線控的模擬 55 第5章模擬環(huán)境下的機器人以及迷宮導航 58 5.1 VIPLE機器服務 58 5.2 VIPLE支持的機器人平臺 60 5.3 穿越迷宮的算法 62 5.4使用有限狀態(tài)機的迷宮導航算法 63 5.5在VIPLE模擬器中實現(xiàn)自治迷宮導航算法 66 5.5.1 理解迷宮算法 66 5.5.2 學習沿墻算法 67 5.5.3編程Web機器人使之繞右墻走 67 5.5.4使用兩距離局部最優(yōu)算法遍歷迷宮 68 5.5.5理解Unity模擬器和VIPLE程序 68 5.5.6 實現(xiàn)VIPLE框圖 69 5.5.7實現(xiàn)兩距離局部最優(yōu)算法的活動 69 5.5.8兩距離局部最優(yōu)算法的Main框圖 70 5.5.9 Web 2D模擬器 71 5.5.10配置VIPLE以使用Web模擬器 72 5.5.11在Web模擬器中實現(xiàn)沿墻算法的Main框圖 73 5.5.12在Web模擬器中實現(xiàn)沿墻算法所涉及的活動 73 5.5.13在Web模擬器中實現(xiàn)兩距離局部最優(yōu)算法的Main框圖 75 5.5.14在Web 2D模擬器中實現(xiàn)兩距離局部最優(yōu)算法所涉及的活動 76 5.5.15 Web 3D模擬器 76 第6章 機器人硬件組成 77 6.1 VIPLE計算與通信模型 77 6.2 機器人硬件總體結(jié)構(gòu) 79 6.3 主控板 79 6.3.1 Intel Galileo開發(fā)板 80 6.3.2 Intel Edison模塊 81 6.3.3 Arduino/Genuino 101 82 6.3.4 TI CC3200 LaunchPad 83 6.3.5 專用機器人主控模塊 84 6.4 傳感器模塊 84 6.4.1 超聲波傳感器 85 6.4.2 紅外傳感器 85 6.4.3 光傳感器/顏色傳感器 86 6.5 舵機 87 6.6 組裝伽利略機器人 90 6.7愛迪生機器人硬件和軟件的安裝 97 6.7.1 愛迪生機器人的硬件安裝 97 6.7.2 愛迪生機器人的軟件安裝 101 第7章 Intel機器人編程 109 7.1 采用沿墻算法的迷宮導航 109 7.1.1 沿墻迷宮導航(Main框圖的第一部分) 109 7.1.2 沿墻迷宮導航(Main框圖的第二部分) 110 7.1.3 Init活動 110 7.1.4 Left1和Right1活動 110 7.1.5 Right90和Left90活動 111 7.1.6 Backward和Forward活動 111 7.1.7 ResetState活動 112 7.2 采用局部最優(yōu)算法的迷宮導航 112 7.2.1 用兩距離算法解決迷宮問題 112 7.2.2 在VIPLE里控制Intel機器人 114 7.2.3 在VIPLE程序里實現(xiàn)活動 114 7.2.4 使用一個簡化的有限狀態(tài)機 115 7.3 使用事件驅(qū)動編程的迷宮導航 115 7.3.1 使用事件驅(qū)動編程的Left90活動 116 7.3.2 使用事件驅(qū)動編程的Left1和Backward活動 116 7.3.3 基于事件驅(qū)動活動的Main框圖 116 7.4 使用光傳感器實現(xiàn)基本相撲算法 117 第8章 樂高EV3機器人編程 118 8.1 準備知識 118 8.1.1 從EV3 Brick得到傳感器讀數(shù) 118 8.1.2 藍牙連接 118 8.1.3 通過程序得到傳感器讀數(shù) 119 8.1.4 通過藍牙或者Wi-Fi將機器人連接到VIPLE 119 8.2 遠程控制EV3機器人 121 8.2.1 在VIPLE中通過連線驅(qū)動機器人 121 8.2.2 改進驅(qū)動體驗 122 8.3 使用VIPLE的循跡和相撲機器人程序 122 8.3.1 安裝一個顏色傳感器 122 8.3.2 循跡 122 8.3.3 使用光傳感器實現(xiàn)基本相撲算法 123 8.3.4 使用光傳感器和接觸傳感器的相撲算法 124 8.4 使用VIPLE的EV3沿墻程序 124 8.4.1 沿墻迷宮導航(Main框圖) 124 8.4.2 編寫Init活動 125 8.4.3 編寫Left1活動 126 8.4.4 編寫Right90活動 126 8.4.5 編寫B(tài)ackward活動 126 8.4.6 編寫ResetState活動 126 8.4.7 編寫Forward活動 127 8.4.8 在沿墻算法里配置傳感器 127 8.5 使用事件驅(qū)動編程的沿墻算法 127 8.5.1 使用事件驅(qū)動編程的Left90活動 128 8.5.2 基于事件驅(qū)動活動的Main框圖 128 8.6 采用局部最優(yōu)試探算法的迷宮導航 129 8.6.1 實現(xiàn)局部最優(yōu)算法的Main框圖 129 8.6.2 實現(xiàn)SensorRight90 130 第9章機器人現(xiàn)場測試和機器人比賽準備 131 9.1 準備工作 131 9.2 實驗作業(yè) 131 9.2.1 討論和會議紀要 131 9.2.2 尋寶比賽 131 9.2.3 迷宮導航比賽的實踐 132 9.2.4 相撲機器人比賽的實踐 132 9.2.5 完成會議紀要 132 第10章 機器人比賽 133 10.1 尋寶 133 10.2 自治迷宮遍歷 133 10.3 相撲機器人 134 第11章服務計算與Web應用的開發(fā) 135 11.1 并行處理技術(shù) 135 11.2 文本語言編程的基本概念 136 11.3 面向服務的架構(gòu)的基本概念 140 11.4 Visual Studio編程環(huán)境 144 11.5 實驗內(nèi)容 145 11.5.1VIPLE中的并行和面向服務計算 145 11.5.2開始使用Visual Studio開發(fā)環(huán)境和C#進行編程 146 11.5.3 創(chuàng)建你自己的Web瀏覽器 150 11.5.4 創(chuàng)建一個Web應用程序 151 11.5.5創(chuàng)建一個在線自動售貨機 154 11.5.6使用加密/解密服務建立一個安全的應用程序 157 第12章Android手機App的開發(fā) 161 12.1 預備知識 161 12.2 Android手機編程 162 12.2.1 Hello World 163 12.2.2 Magic 8 Ball 164 12.2.3 Paint Pic 165 12.2.4 摩爾泥游戲 165 12.2.5 股票報價 165 12.2.6 股票走勢 165 12.2.7 射盤子游戲 167 12.2.8 射擊多個盤子 170 12.2.9 打磚塊游戲 172 12.2.10 使用App Inventor編程NXT Robot 177 12.2.11 猜數(shù)游戲 181 12.2.12 簡單的側(cè)滑板游戲 183 12.2.13 記憶游戲 186 第13章 演講文稿設計 197 13.1 演講前的準備 197 13.1.1 組織演講稿的技術(shù)內(nèi)容 197 13.1.2 演示幻燈片設計 198 13.1.3用Excel求解模型和創(chuàng)建圖表 199 13.1.4演示幻燈片的評價和評分標準 200 13.2 演講實踐前的測驗 200 13.3 演講內(nèi)容設計與實踐 201 13.3.1 截屏和圖片的編輯 201 13.3.2 插入視頻 201 13.3.3使用Excel求解模型和創(chuàng)建圖表 202 13.3.4 復制和特殊粘貼 203 13.3.5正式會議中的會議紀要和幻燈片設計 203 13.3.6 創(chuàng)建PPT幻燈片 204 13.3.7 幻燈片制作的分工 204 第14章 演講和演講評分 205 附錄 機器人課程設計項目和比賽規(guī)則 206
你還可能感興趣
我要評論
|