关于我们
书单推荐
新书推荐
|
计算机科学与工程导论
本书以培养学生对计算机科学与工程专业的兴趣为宗旨,以培养问题解决能力为目标,从具体到抽象,将计算机科学的基本原理和动手实践有机结合,通过图形化的编程语言、机器人实验、手机应用和Web开发等工具及案例,使学生了解基本的程序设计、计算机原理、软件工程等计算机知识,并把整门课组织成了一个完整的工程项目。
计算机工业一直引导着世界工业的发展,也是其他行业前进的动力源。计算机科学和计算机工程专业是计算机工业以及相关产业发展的源泉,也一直是全世界最有价值的专业之一。然而,2000 年的网络泡沫使计算机工业受到重创,也使计算机科学及相关专业的学位价值第一次受到质疑。计算机科学和计算机工程专业的生源也受到挑战,甚至出现了一场世界范围内的计算机科学生源危机。然而,2000年的网络泡沫的影响是短暂的,计算机工业很快恢复并创造出更高的价值。例如,亚马逊的市值在2000 年从其峰值107 美元/ 股一度跌到7美元/ 股。今天,亚马逊的市值已经远远超过2000 年的107 美元/ 股的峰值,并发展成为一家云计算服务的主要提供商。Google更是从一家网络公司发展成为世界最大的公司之一,其业务包含互联网、云计算、移动计算、智能手表、汽车等行业。
然而,计算机工业的恢复并没有消除计算机专业的生源危机。以美国亚利桑那州立大学(ASU)为例。2002 年前,ASU 每年有200 名新生进入计算机科学专业。到2004 年,就只有100 名新生入学。美国其他大学的情况也与之类似。2008 年,美国计算机协会(ACM)发布的计算机科学教学大纲报告(http://www.acm.org/ education/curricula/ComputerScience2008.pdf)正式定义2000 年之后计算机科学进入生源危机,必须采取有效措施来解决这一危机。ACM 在长达108 页的报告中用了一整章来阐述这一危机的解决方案。 ACM 的报告指出,网络泡沫的影响只是计算机科学专业进入生源危机的导火索,致使计算机科学生源持续危机的真正原因是陈旧的教学方法和内容。计算机科学专业课程,特别是计算机入门课程的教学方法和内容必须使学生感兴趣,想挑战,还要能激发学生的创造性。ACM 报告建议从三方面来改进教学方法和内容。 第一,应用领域。计算机科学的教学内容必须更紧密地与应用相结合。 第二,课程设置。计算机科学的教学必须增加学生感兴趣的课程,例如,游戏编程、多媒体计算、机器人、移动计算。 第三,教学方法。教学过程必须生动有趣,以激发学生的学习兴趣,听课的同时必须动手实践,内容有挑战性但必须基于学生的接受能力,教学必须与就业机会相结合。 在ACM 大纲的指导下,很多大学开始在计算机的课程中增加学生感兴趣的内容。机器人的引入最为广泛。 为什么基于机器人的计算机科学入门课程没有在10 年、20 年或30 年前发生呢?有多方面的原因: 第一,计算机科学专业的生源一直很好,计算机教育主要注重内容和系统化,没有太多考虑学生的兴趣。 第二,机器人硬件价格高,无法用于大班课程。 第三,机器人涉及硬件和软件,编程复杂,不宜作为入门课程的内容。 近10 年来,这几方面都发生了根本的变化。计算机科学专业的生源在2000 年后受到挑战。机器人硬件价格大幅下降,特别是面向服务的软件技术、云计算和可视化编程技术使机器人的编程应用在大学一年级甚至高中教学中成为可能。计算机教育专家和计算机工程师携手合作,开发了多种可视化的教育编程平台,使没有计算机知识和编程基础的高中生和大学低年级的学生能够很快学会计算机应用编程。例如,美国MIT开发的Scratch以及卡内基·梅隆大学开发的Alice动画和编程平台能让学生把他们的故事变成电影和游戏。MIT的App Inventor能让学生很快学会手机App编程。 乐高的NXT 2.0和EV3机器人编程平台采取了轨道式积木编程模式,简单易学,适合中小学的兴趣教学。然而,NXT 2.0和EV3只能用于编程乐高机器人,而乐高机器人在中国价格昂贵,限制了它的广泛应用。 Intel最新开发的物联网服务编排层(IoT Services Orchestration Layer)在Linux操作系统上用可视化的语言编程物联网设备,可以读写连接于物联网控制板上的设备。 微软的机器人开发工作室(MRDS)的VPL(Visual Programming Language,可视化程序设计语言)可用于编程和控制乐高NXT机器人和多种机器人,包括iRobot、Fischertechnik、LEGO Mindstorms NXT、Parallax robots和微软的仿真机器人等。MRDS VPL可以用于编程从简单到复杂的各种应用,广泛用于高中和大学教学中。从2006年发布至今,MRDS VPL建立了一个巨大的用户社区。遗憾的是,在微软的重构过程中,MRDS VPL项目被终止。尽管微软继续支持MRDS VPL的免费下载,但MRDS VPL不再支持新的机器人平台,例如,MRDS VPL不支持取代乐高NXT的EV3机器人。 为了让MRDS VPL的用户社区能够继续他们的机器人程序开发,基于对工作流和可视化语言多年的研究和开发,亚利桑那州立大学(ASU)于2015年发布了ASU VIPLE机器人开发平台,该平台由陈以农博士领导的物联网及机器人教育实验室开发。陈以农博士于2003年和2005年受微软资助,参与了MRDS VPL的早期研究。从2006年微软发布起,ASU一直使用MRDS VPL作为计算机导论课实验工具。当微软终止MRDS VPL项目后,ASU物联网及机器人教育实验室以MRDS VPL功能和编程模式为设计说明,自主开发了VIPLE平台。VIPLE有以下特点: 继承了MRDS VPL的属性和编程模式,具有MRDS VPL编程经历的教师和学生可以直接使用VIPLE。VPL的教学资料也能为VIPLE平台所用。 扩展了MRDS VPL支持的机器人平台,例如,VIPLE可以编程乐高的EV3机器人。使用MRDS VPL编程乐高NXT机器人的学校可以直接升级到EV3。 在VIPLE程序与机器人之间采用了面向服务的标准通信接口JSON和开源的机器人中间件,可让通用机器人平台接入。 开发了以Linux为操作系统的VIPLE中间件并以Intel Edison的机器人作为默认平台和套件。VIPLE中间件已经移植到其他机器人平台。Galileo和Edison的机器人价格不到乐高EV3的一半,从而可使基于VIPLE和Intel机器人的教学能够推广到更多学校。 除了MRDS VPL的机器人编程功能外,VIPLE还支持通用的服务计算。VIPLE支持C#源代码模块的插入,也可以调用Web服务来完成VIPLE库程序中没有的功能。 ASU VIPLE支持设计思维和使用可视化编程。开发者只需绘制应用程序的流程图(规格设计)而无须编写文本代码。开发环境中的编译工具能够把流程图直接转换成可执行的程序,从而使软件开发变得更容易、更快速。整个软件的开发过程就是一个简单的拖放过程,即把代表服务的模块拖放到流程图的设计平面,然后用连线把它们连接起来。这个简单的过程可以使没有程序设计经验的人在几分钟内创建自己的机器人应用程序。经过一个学期的学习和动手实践后,学生可以编出较为复杂的智能程序,使机器人能探索未知迷宫并走出迷宫。 ASU VIPLE可用作机器人导论、计算机导论、通信导论或工程导论等课程的实验工具。 下面通过几个程序案例来展示VIPLE编程的简单性和实用性,特别是与计算机导论的相关性和对计算机导论课程实验的支持。 案例1:ASU VIPLE实现的计数器该计数器程序从0计到10,并用语音输出服务读出所生成的数字:The number is 0,1,2,3,4,5,6,7,8,9,10。 案例2:车库门遥控器下图的有限状态机描述了一个单键遥控器。当车库门处于关闭状态时,按下遥控键将使车库门开启。当车库门处于开启状态时,按下遥控键将使车库门关闭。当车库门处于开启或关闭过程中时,按下遥控键将使车库门停止运动,再按下遥控键将使车库门继续向之前的方向运行。 上图的有限状态机可用下图的ASU VIPLE程序实现。所使用的单键是控制键Ctrl。 案例3:遥控Intel机器人以下VIPLE程序可以实现用计算机键盘(方向键)来遥控Intel机器人的移动,空格键是停止移动。 案例4:迷宫机器人编程以下程序展示了迷宫机器人编程过程。该机器人具有一个测距传感器,根据前方、左方和右方的距离来决定下一步的走向。 与通常的介绍原理的教材不同,本书是一本介绍原理并实现原理的教材。学懂一个原理后,学生还必须把该原理应用到实践中。比如,当学懂了运算器的工作原理后,学生必须用VPL 编写一个运算器,并测试实现的运算器能否正确完成运算任务。当设计了一个迷宫漫游算法后,学生必须把该算法编程到机器人中,测试机器人能否在迷宫中不迷路。 所以,我们的教材不但必须保证原理的正确,还必须保证正确的原理能被学生在给定的时间内实现。为此,我们必须验证每一个实验和每一个练习的正确性和时间要求。编写这样的教材和讲授这样的课程,会花费更多的精力和时间,但是我们坚信这样的教材和这样的课程是学生想要学的,是学生能学透和记住的,这样才能培养出真正有知识和能力的学生。正是这样的教学理念,使我们走到一起,联手编写了本书。 本教材的第1版于2013年出版,本教材的第2版在第1版的基础上做了重大的改进。首先,主要的编程软件从微软的MRDS VPL更新到ASU VIPLE (Visual IoT/Robotics Programming Language Environment)。支持的机器人平台也从乐高增加到多个其他平台,包括Intel Edison和Galileo平台、ARM pcDuino平台、TI的平台。VIPLE还有三个内建仿真平台:Unity模拟器平台、Web 2D模拟器平台和Web 3D模拟器平台。ASU VIPLE可以在中文和英文菜单之间随时切换。 由于工作量巨大,还有许多老师和学生参与了编写和校验工作,在此表示衷心的感谢。本教材基于自主开发的软件平台,许多学生参与了开发工作。 Garrett Drown开发了第1版的eRobotics的可视化编程语言;Calvin Cheng为VIPLE的早期开发提供帮助,并在EV3 API的开发上做出了贡献;Gennaro De Luca负责VIPLE的主要开发工作;Tara De Vries对VIPLE开发中的服务集成做出了贡献;Megan Plachecki、John Robertson和Sami Mian在JSON的接口设计、Edison机器人的中间件实现以及机器人的硬件实现方面做出了贡献;Matthew De Rosa开发了第1版VIPLE Unity模拟器;Yufeng Ouyang 和Kaiyi Huang等开发了第2版的Unity模拟器;Adam Lew、Joshua Owens、Ankit Patel、Harshil Patel、Peter Tueller和Spencer Rodewald在Web 2D模拟器开发中做出了贡献; Alexandra Porter、David Orellana、Matthew Miller 开发了Web 3D 模拟器。 如何开设一门受学生欢迎的计算机入门课程是一个值得持续探索的课题,我们也在进一步的尝试和不断完善中。因此,本书中难免有疏漏和不当之处,欢迎各位同行和读者批评指正。 作者201
陈以农,亚利桑那州立大学计算机系高级讲师。机器人程序主任、软件实验室科学家。编写过多本教材。
推荐序
前 言 教学建议 第1章 职业发展机会和团队建设 1 1.1计算机科学和工程的课程体系及职业发展 1 1.1.1计算机科学和工程的课程体系 1 1.1.2 计算机就业形势分析 2 1.1.3 计算机不同领域的职业机会 5 1.2 团队建设 6 1.2.1 合作模式 6 1.2.2 团队组建 6 第2章机器人开发环境和VIPLE入门 7 2.1 工作流和可视化编程 7 2.2 VIPLE IoT/机器人开发环境 12 2.2.1 VIPLE的工程设计过程 12 2.2.2 VIPLE的活动和服务 13 2.3 VIPLE的使用 18 2.3.1创建程序显示“Hello World” 19 2.3.2 最喜欢的电影 20 2.3.3使用或并和If活动创建条件循环 21 2.3.4 使用While循环 24 2.3.5 使用全局变量创建一个活动 25 2.3.6 创建Counter活动 27 2.3.7 建立一个2-1多路选择器 28 第3章 逻辑设计与计算机组成 31 3.1仿真——设计过程中的关键步骤 31 3.2 计算机系统 32 3.2.1 计算机系统的类型 32 3.2.2 计算机系统的组成 33 3.3在VIPLE中创建计算机系统部件 39 3.3.1 创建逻辑与门 39 3.3.2 创建一个1位全加器 41 3.3.3 创建一个2-1多路选择器 42 3.3.4 创建一个4-1多路选择器 42 3.3.5 创建一个1位ALU 43 3.3.6 自动测试 44 第4章事件驱动编程和有限状态机 46 4.1 引言 46 4.2 事件驱动编程 46 4.3 有限状态机 48 4.4用ASU VIPLE来解决事件驱动问题 51 4.4.1 创建一个事件驱动计数器 52 4.4.2 实现一个自动售货机 52 4.4.3 用事件来实现自动售货机 52 4.4.4 车库门控制器 53 4.4.5 奇偶校验 54 4.4.6 并行计算 55 4.4.7 线控的模拟 55 第5章模拟环境下的机器人以及迷宫导航 58 5.1 VIPLE机器服务 58 5.2 VIPLE支持的机器人平台 60 5.3 穿越迷宫的算法 62 5.4使用有限状态机的迷宫导航算法 63 5.5在VIPLE模拟器中实现自治迷宫导航算法 66 5.5.1 理解迷宫算法 66 5.5.2 学习沿墙算法 67 5.5.3编程Web机器人使之绕右墙走 67 5.5.4使用两距离局部最优算法遍历迷宫 68 5.5.5理解Unity模拟器和VIPLE程序 68 5.5.6 实现VIPLE框图 69 5.5.7实现两距离局部最优算法的活动 69 5.5.8两距离局部最优算法的Main框图 70 5.5.9 Web 2D模拟器 71 5.5.10配置VIPLE以使用Web模拟器 72 5.5.11在Web模拟器中实现沿墙算法的Main框图 73 5.5.12在Web模拟器中实现沿墙算法所涉及的活动 73 5.5.13在Web模拟器中实现两距离局部最优算法的Main框图 75 5.5.14在Web 2D模拟器中实现两距离局部最优算法所涉及的活动 76 5.5.15 Web 3D模拟器 76 第6章 机器人硬件组成 77 6.1 VIPLE计算与通信模型 77 6.2 机器人硬件总体结构 79 6.3 主控板 79 6.3.1 Intel Galileo开发板 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 采用局部最优算法的迷宫导航 112 7.2.1 用两距离算法解决迷宫问题 112 7.2.2 在VIPLE里控制Intel机器人 114 7.2.3 在VIPLE程序里实现活动 114 7.2.4 使用一个简化的有限状态机 115 7.3 使用事件驱动编程的迷宫导航 115 7.3.1 使用事件驱动编程的Left90活动 116 7.3.2 使用事件驱动编程的Left1和Backward活动 116 7.3.3 基于事件驱动活动的Main框图 116 7.4 使用光传感器实现基本相扑算法 117 第8章 乐高EV3机器人编程 118 8.1 准备知识 118 8.1.1 从EV3 Brick得到传感器读数 118 8.1.2 蓝牙连接 118 8.1.3 通过程序得到传感器读数 119 8.1.4 通过蓝牙或者Wi-Fi将机器人连接到VIPLE 119 8.2 远程控制EV3机器人 121 8.2.1 在VIPLE中通过连线驱动机器人 121 8.2.2 改进驱动体验 122 8.3 使用VIPLE的循迹和相扑机器人程序 122 8.3.1 安装一个颜色传感器 122 8.3.2 循迹 122 8.3.3 使用光传感器实现基本相扑算法 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 编写Backward活动 126 8.4.6 编写ResetState活动 126 8.4.7 编写Forward活动 127 8.4.8 在沿墙算法里配置传感器 127 8.5 使用事件驱动编程的沿墙算法 127 8.5.1 使用事件驱动编程的Left90活动 128 8.5.2 基于事件驱动活动的Main框图 128 8.6 采用局部最优试探算法的迷宫导航 129 8.6.1 实现局部最优算法的Main框图 129 8.6.2 实现SensorRight90 130 第9章机器人现场测试和机器人比赛准备 131 9.1 准备工作 131 9.2 实验作业 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应用的开发 135 11.1 并行处理技术 135 11.2 文本语言编程的基本概念 136 11.3 面向服务的架构的基本概念 140 11.4 Visual Studio编程环境 144 11.5 实验内容 145 11.5.1VIPLE中的并行和面向服务计算 145 11.5.2开始使用Visual Studio开发环境和C#进行编程 146 11.5.3 创建你自己的Web浏览器 150 11.5.4 创建一个Web应用程序 151 11.5.5创建一个在线自动售货机 154 11.5.6使用加密/解密服务建立一个安全的应用程序 157 第12章Android手机App的开发 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 猜数游戏 181 12.2.12 简单的侧滑板游戏 183 12.2.13 记忆游戏 186 第13章 演讲文稿设计 197 13.1 演讲前的准备 197 13.1.1 组织演讲稿的技术内容 197 13.1.2 演示幻灯片设计 198 13.1.3用Excel求解模型和创建图表 199 13.1.4演示幻灯片的评价和评分标准 200 13.2 演讲实践前的测验 200 13.3 演讲内容设计与实践 201 13.3.1 截屏和图片的编辑 201 13.3.2 插入视频 201 13.3.3使用Excel求解模型和创建图表 202 13.3.4 复制和特殊粘贴 203 13.3.5正式会议中的会议纪要和幻灯片设计 203 13.3.6 创建PPT幻灯片 204 13.3.7 幻灯片制作的分工 204 第14章 演讲和演讲评分 205 附录 机器人课程设计项目和比赛规则 206
你还可能感兴趣
我要评论
|