首页 > 学院 > 开发设计 > 正文

FTC软件系统学习笔记 3.第一个OpMode

2019-11-09 16:13:59
字体:
来源:转载
供稿:网友

“API文档是个好东西,Youtube也是个好东西”


最近我在墙外漫游的时候,发现了很多个版本的FTC操作模式写法,这里为大家介绍一种在2017标准下最好写也是最常见的写法。

搭建基本框架

首先,让我们在TeamCode->java->org.firstinspires.ftc.teamcode文件夹底下创建一个java class,按照自己的喜好取名,推荐单词首字母大写,如:TutorialOpMode(不要有空格)

这里写图片描述

创建之后,你会看到文件中只有一行类的声明,啥也没有。接下来就需要继承一个官方提供的操作类来进行下面编写。只需要在public class TutorialOpMode 后面加上extends LinearOpMode即可,此时你会看见这一行有出现了红色的下划线,不要着急,再接着按alt + enter选择implement后确定即可。

这里写图片描述

出现这种情况是因为在继承LinearOpMode类时同时继承了它所有的接口和抽象方法,而接口和抽象方法是必须要在子类中实现(定义)的。

理论上,此时你的代码已经可以编译运行并安装在安卓手机上了,但你的Driver Station上并不会出现任何可选的操作模式。

接下来,在代码的全局区域加上一句,name是操作模式在Driver Station上面的名字,group则是分类。

@TeleOp(name = "TutorialOpMode", group = "Tutorial")

注意没有分号。在出现自动补齐选项的时候尽量使用自动补齐,这样可以避免很多重复的代码和手动导入包。这里以“@”开头的语句称为Annotation,TeleOp就是FTC包中定义的一个Annotation,所以需要导入包。

这里写图片描述

此时你可以安装到手机上,并查看Driver Station了,在TeleOp一栏下拉即可看到这个操作模式。

接下来,写上如下的代码:

这里写图片描述

我们来逐行解释代码:

DcMotor motor1 = null;

声明一个马达,以便在接下来的程序中操作。注意不要将声明放到任何函数中。当然你也可以声明和定义一步到位,但从代码重用的角度考虑,不建议这样做。

motor1 = hardwareMap.dcMotor.get("motor1"); motor1.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);

hardwareMap即从硬件列表中匹配该马达,get()中的字符串即你在RobotController上定义的马达名字。除马达外,其他设备也基本上按照该方法获取,这与FRC通过串口编号进行获取有所不同。setMode()将马达设置为停转模式,并重置马达。

waitForStart();

这一句从字面意思来理解也就是等待操作开始,也就是说,在你按下手机屏幕上的start按钮之前,程序只会执行到这里,按下按钮后,这句话以下的语句才会执行。你可以将这句语句理解为分水岭,上面的为初始化,下面的为操作。

motor1.setMode(DcMotor.RunMode.RUN_USING_ENCODER); while(opModeIsActive()) { motor1.setPower(0.5); idle(); }

将马达设置为使用编码器工作,opModeIsActive()即检验是否处于操作阶段,在操作阶段期间,这个while循环内的语句会重复执行。 setPower函数可设置马达的速度,传入值为[-1.0,1.0]之间的一个浮点数,负数表示倒转。 idle()等同于Thread.yield(),即使当前线程进入可执行状态,以同步其他线程。

接下来你就可以将App安装到手机上,并配置好一切硬件和两台手机,并欣赏马达的转动了。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表