描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302464105丛书名: STEM教育丛书
注。这款产品不仅可以参与众多的比赛项目,更重要的是它适合在学校开设系统的课程,适合中小学生入门使用。
本书选用适合中学生使用的ROBOTC软件,引导学生学习如何控制VEX IQ机器人。全书以学生活动项目为主
线,通过完成一系列有趣的项目,使学生掌握编程的基本知识。
本书力图拓宽学生的视野,将学科知识与项目活动相结合,从而成为中小学生STEM教育课程的一种尝试与探索。
本书可作为中学生创客课程、机器人课程教材,也可作为各种培训机构的教学参考用书。
目
录
第1课
初识ROBOTC 1
第2课
顺序结构 7
第3课
变量与函数 12
第4课
循环结构 17
第5课
选择结构if语句 30
第6课
选择结构switch 语句 48
第7课
自定义函数 55
第8课
全局变量与中断 59
第9课
多任务 62
第10课
数据采集与记录 70
第11课
遥控程序 73
第12课 ROBOTC的机器人虚拟世界 78
附录A ROBOTC常用指令 87
附录B 制作一个VEX IQ标准底盘小车 89
参考文献 96
ROBOTC软件由卡内基梅隆大学机器人学院(Carnegie Mellon Robotics Academy)开发,它源于C语言,拥有丰富的程序编写与调试功能,在中学生机器人比赛中有十分广泛的应用,LEGO、VEX、Arduino等类型的机器人都可采用这一软件。
学习ROBOTC,可以使我们以机器人为平台掌握文本编程软件的使用,获得C语言的编程能力。从控制机器人的角度来说,ROBOTC比以往任何图形化编程软件有更多的优势,它拥有编写和调试文本程序的所有功能,具备完整的文字编辑菜单、C语言的数组边界检查等功能;具有丰富的运算符与数据结构,执行效率高,编写程序更加简捷,占用空间小,可以在机器人系统中存储更多的程序。在调试方面,用ROBOTC编写的程序控制机器人会更加准确,并具有实时调试功能,为机器人的多任务、多媒体等新特性方面提供了良好的支持。
笔者在2013年首次将这一款软件介绍给中国学生,卡内基梅隆大学机器人学院院长Robin Shoop曾为笔者所著《ROBOTC与机器人程序设计》(2013年由清华大学出版社出版)一书题写序言。他认为:“计算机科学是一种创新语言,所有创新者都需要用运算的方式去思考,如果我们想要指导学生如何创新地具有全球竞争力,那么教他们计算机科学就是我们的使命。”
几年来,通过众多教师的努力,国内学习和使用ROBOTC软件的学生大量增加。通过这一软件的学习,学生们不仅掌握了机器人的程序设计,而且以此作为深入学习的基础,为今后的发展开拓了广阔的空间。
博思公司为本书的编写提供了所用的各种设备和软件,胡海洋、张国庆、于啸、李志辉、郭伟俊、李继东等参与了本书的编写工作。“VEX中国”为本书的编写提供了诸多支持,在此表示衷心的感谢。
由于笔者水平所限,书中难免存在疏漏和不足,恳请广大读者批评指正。
郑剑春
2016年12月
在控制机器人的软件中,除了图形化编程软件之外,普遍使用的软件就是ROBOTC了。这一软件在机器人比赛中有广泛的应用,如乐高、VEX等类型机器人都可采用这一软件。ROBOTC源于C语言,学习ROBOTC,可以以机器人为平台,掌握文本编程软件的使用,获得C语言的编程能力。通过这一软件的学习,不仅可以掌握机器人的程序设计,而且可以此作为深入学习的基础,为学生打开一片学习的空间,让学生在兴趣与探索中获得知识。
一、ROBOTC的默认编程界面
ROBOTC的编程界面如图1-1所示。
图1-1 编程界面
ROBOTC的编程界面非常简洁,图1-1中左上部为函数窗口,右上部和下部分别为代码编辑窗口和错误显示窗口。可以在代码编辑窗口中编写所需程序;函数窗口可以显示各种ROBOTC指令,方便编程时调用;错误显示窗口用于在编译下载程序时检查可能出现的错误并显示出来。当然,如果熟悉所需的各种命令,无须函数窗口的提示,也可以将其关闭。
用ROBOTC玩VEX IQ
2
需要提醒的是,ROBOTC提供了智能菜单功能,即在代码编辑窗口编写代码时,系统会自动给出相应函数的完整拼写以方便输入。同时也可从左侧函数窗口中拖曳指令到右侧的代码编辑窗口来编写代码。
二、设置与安装
ROBOTC软件可以用于不同的机器人编程,既可以是实体机器人,也可以是虚拟机器人,因此在使用前必须对这一软件进行相应的设置,以适应所用的机器人产品与控制方式。
1.选择机器人产品
本书介绍的是VEX IQ机器人,所以选择Robot→Platform Type→VEX Robotics菜单命令,然后选择VEX IQ,如图1-2所示。
图1-2 设置机器人种类
2.设置编译对象
由于所选用的是实体VEX IQ产品,所以选择Robot→Compiler Target菜单命令,然后选择编译目标为Physical Robot,如图1-3所示。
3.设置控制模式
Robot程序的控制模式可以是自动模式,也可以是遥控模式。如果只想编写一个自动程序,可以设置控制模式为自动模式,如图1-4所示。
第1课 初识ROBOTC
3
图1-3 选择编译对象 图1-4 设置控制模式
4.安装固件
固件相当于机器人的操作系统,它能让计算机跟机器人进行交互。不同的编程软件通常会要求机器人装载不同的固件,因此如果首次使用ROBOTC就必须下载固件,以保证机器人下载并运行安装程序。安装固件的方法:将机器人打开并通过USB线与计算机相连,依次选择Robot→Download Firmware→Standard File(VEX_IQ_1052.bin)菜单命令,或直接单击即可。
三、大图标工具栏
如果没有见到图1-5所示的工具栏,可以选择View→Toolbars→Big Iron Toolbars菜单命令,即可出现大图标工具栏。
图1-5 大图标工具栏
表1-1所列为编写程序控制机器人常用的工具及其功能。
表1-1 ROBOTC常用工具及其功能
新建文件
保存文件
电机与传感器设置
编译程序
打开文件
文件格式
固件下载
下载到机器人
四、机器人的个程序
新建文件的操作方法:执行File→New→New File菜单命令。按此方法操作后,代码编辑窗口中会出现以下指令:
task main ( )
{
}
这是每一个程序的固定格式。每一个程序中必须有且只有一个main()函数,它表示程序执行的入口,下面大括号内的部分是程序的主体,而“{”“}”则分别代表了程序的开始和结束。
1.机器人电机与传感器设置
使用电机、传感器就必须先将所用的电机、传感器与VEX IQ控制器的端口连接,并通过设置使机器人知道所用传感器类型与连接方式,这样才能在程序中调用有关传感器的检测数值,并控制电机的运动,使机器人具备感知外界信息和执行各种指令的能力。下面首先设置机器人的电机以及传感器等内容。电机设置如表1-2所示。
表1-2 电机设置
端口
名称
类型
描述
motor1
Left
VEX IQ Motor
左侧
motor6
Right
VEX IQ Motor
右侧
打开Robot下拉菜单选择Motors and Sensors Setup命令,如图1-6所示。
图1-6 Robot下拉菜单
或直接单击也可以设置电机和传感器。电机和传感器设置窗口如图1-7所示。
图1-7 设置电机与传感器
在设置对话框中还有其他一些选项设置,在今后的学习中会逐步用到,这里就不再介绍了。根据机器人电机的连线方式,设置好图1-7所示选项后,编辑窗口会出现以下代码:
#pragma config (Motor, motor1, Left, tmotorVexIQ, PIDControl, driveLeft, encoder)
#pragma config (Motor, motor6, Right, tmotorVexIQ, PIDControl, reversed, driveRight, encoder)
//*!!Code automatically generated by ‘ROBOTC’ configuration wizard!!*//
这部分称为编译预处理,以符号“#”开头的行称为编译预处理行,如本例中的
#pragma config (Motor, motor1, Left , tmotorVexIQ, PIDControl, driveLeft, encoder)
指示编译器在对程序进行预处理时,将执行此程序时的有关电机的信息内容嵌入程序中。
“//”后文字为注释内容,直到换行为止;在“/*”与“*/”之间的内容也是注释。注释是程序员对程序的阅读者所做的说明,它可以大大提高程序的可读性。一个完整的ROBOTC程序包含注释、编译预处理和程序主体。ROBOTC软件目前尚不支持中文注释。
2.机器人运动指令
在代码编辑窗口中,在“{”“}”之间输入以下指令:
motor[motor1]=50;
motor[motor6]=50;
sleep(5000);
完成的程序如下:
task main ()
{
motor[motor1]=50;
motor[motor6]=50;
sleep(5000);
}
motor[motor1]=50表示连接1端口的电机以50能量的速度转动,其中参数可以在–100~ 100内进行设置,其值越大说明输出功率越大;sleep(5000)表示转动持续5s。每一行结束都使用符号“;”换行。电机转动的角度以电机角度指向为正,如图1-8所示。
3. 运行程序
现在可以下载并运行程序了。测试程序,可以看到机器人以50能量向前运动5s后停止。
4. 总结
这里学习的机器人控制指令有以下两条。
(1)电机运动:motor[电机]=能量。
(2)持续时间:sleep(时间)。
通过设置不同的电机能量,可以控制电机的运转方向,与持续时间指令相配合就可以控制小车的直行、后退、左转、右转等运动了。
5. 拓展训练
场地设置如图1-9所示,尺寸大小可以根据实际情况进行调整。编写一段程序让机器人运动,并准确停止在终点(机器人任一部分接触终点场地)。
图1-9 机器人运动场地
图1-8 电机角度
第2课 顺 序 结 构
为提高程序设计的质量和效率,程序编写通常采用结构化的程序设计方法。结构化程序由若干个基本结构组成,每一结构包括一条或若干条语句。有3种基本结构,即顺序结构、循环结构和选择结构。
顺序结构程序的执行是从条可执行语句开始,一条语句接一条语句地依次执行,直到程序结束语句为止。注意顺序结构程序中的任何一条可执行语句,在程序运行过程中,都必须运行一次,而且也只能运行一次。这样的程序结构简单、直观、易于理解。顺序执行是程序执行的基本规则。在进行顺序结构程序设计时,也要结合程序流程图,设计好各语句的前后顺序。顺序结构如图2-1所示。
1.顺序结构的特点
在程序执行中,先执行A语句,再执行B语句,两者是顺序执行的关系。
在ROBOTC程序设计中,顺序结构是一类简单的结构,这种结构的程序是按“从上到下”的顺序依次执行语句的,中间既没有调转性的语句,也没有循环语句。
在顺序程序设计中,用到的典型语句是赋值语句、输入/输出语句以及其他计算语句,如加、减、乘、除算术运算等。下面用例子说明顺序结构程序设计的特点。
例2-1 制作一个走矩形的机器人,如图2-2所示,在屏幕上显示所走矩形的面积。
图2-1 顺序结构图2-2 机器人走矩形
用ROBOTC玩VEX IQ
8
(1)电机设置如表2-1所示。
表2-1 电机设置
端口
名称
类型
描述
motor1
Left
VEX IQ Motor
左侧
motor6
Right
VEX IQ Motor
右侧
(2)算法分析。
这一任务可以按第1课所讲的机器人运动指令“motor[电机]=能量”与持续时间“sleep(时间)”配合使用,但是运动的速度与电池的能量有关,而能量随时都在发生变化,所以使用时间进行控制并不准确。本课使用对电机角度进行控制的指令来实现这一任务。首先设计一个行走_转弯程序,代码如下:
#pragma config(Motor, motor1, Letf, tmotorVexIQ, PIDControl, driveLeft, encoder)
#pragma config(Motor, motor6, Right, tmotorVexIQ, PIDControl, reversed, driveRight, encoder)
//*!!Code automatically generated by ‘ROBOTC’ configuration wizard!!*//
task main ( )
{
resetMotorEncoder(motor1);
resetMotorEncoder(motor6);
moveMotorTarget(motor1, 1800, 75);
moveMotorTarget(motor6,1800, 75);
waitUntilMotorStop(motor1);
waitUntilMotorStop(motor6);
moveMotorTarget(motor1, -270, 75);
moveMotorTarget(motor6,270, 75);
waitUntilMotorStop(motor1);
waitUntilMotorStop(motor6);
}
其中:
① resetMotorEncoder(电机)为重置电机角度指令。
② moveMotorTarget(电机, 转动角度, 能量)为电机转动角度指令。
③ waitUntilMotorStop(电机)为电机停止转动指令。
将以上程序下载并测试,观察机器人是否可以直行并转弯90°。如果有误差,可调
第2课 顺序结构
9
试有关参数。如果要机器人完成走矩形的任务,就要在场地上重复上述指令4次才能返回初始点。
从图2-3可以看出车轮移动距离与车轮转动角度的关系。
图2-3 车轮移动距离与转动角度的关系
角度:1800(程序中所设电机转动角度),轮子半径:63.7/2mm
s=1800×31.85×3.14/360=500.045(mm)
(3)参考程序。
#pragma config(Motor, motor1,Left,tmotorVexIQ, PIDControl, driveLeft, encoder)
#pragma config(Motor, motor6,Right,tmotorVexIQ, PIDControl, reversed, driveRight, encoder)
//*!!Code automatically generated by ‘ROBOTC’ configuration wizard!!*//
task main ()
{
resetMotorEncoder(motor1);
resetMotorEncoder(motor6);
moveMotorTarget(motor1, 1800, 75);
moveMotorTarget(motor6,1800, 75);
waitUntilMotorStop(motor1);
waitUntilMotorStop(motor6);
moveMotorTarget(motor1, -270, 75);
moveMotorTarget(motor6,270, 75);
waitUntilMotorStop(motor1);
waitUntilMotorStop(motor6);
moveMotorTarget(motor1, 1800, 75);
moveMotorTarget(motor6,1800, 75);
waitUntilMotorStop(motor1);
waitUntilMotorStop(motor6);
moveMotorTarget(motor1, -270, 75);
moveMotorTarget(motor6,270, 75);
waitUntilMotorStop(motor1);
waitUntilMotorStop(motor6);
moveMotorTarget(motor1, 1800, 75);
moveMotorTarget(motor6,1800, 75);
waitUntilMotorStop(motor1);
waitUntilMotorStop(motor6);
moveMotorTarget(motor1, -270, 75);
moveMotorTarget(motor6,270, 75);
waitUntilMotorStop(motor1);
waitUntilMotorStop(motor6);
moveMotorTarget(motor1, 1800, 75);
moveMotorTarget(motor6,1800, 75);
waitUntilMotorStop(motor1);
waitUntilMotorStop(motor6);
moveMotorTarget(motor1, -270, 75);
moveMotorTarget(motor6,270, 75);
waitUntilMotorStop(motor1);
waitUntilMotorStop(motor6);
displayTextLine(3, “the S is: %d”, 1800*32*3.14/360);
sleep(5000);
}
其中屏幕显示语句:“displayTextLine(行号,”文本 %d”, 整型变量);”,可用于反馈程序运行状态。
(4)运行程序。
程序运行,观察显示结果与实际面积是否一致。
2.本课总结
请填写表2-2所列指令。
表2-2 本课所学指令
重置电机角度指令
电机转动角度指令
持续直到结束转动指令
屏幕显示指令
评论
还没有评论。