为子系统编写代码
添加代码以创建实际工作子系统非常简单。对于不使用反馈的简单子系统,结果证明非常简单。在本节中,我们将看一个 Claw 子系统的示例。 Claw 子系统还有一个限位开关来确定物体是否在抓地力中。
爪子系统的RobotBuilder表示

机械臂末端的爪子是一个由单个 VictorSPX 电机控制器控制的子系统。我们希望电机做三件事,打开,关闭和停止移动。这是子系统的责任。打开和关闭的时间将在本教程后面的指令处讨论到。我们还将定义一个方法来判断爪子是否正在抓取物体。
添加子系统功能
11// ROBOTBUILDER TYPE: Subsystem.
12
13package frc.robot.subsystems;
14
15
16import frc.robot.commands.*;
17import edu.wpi.first.wpilibj.livewindow.LiveWindow;
18import edu.wpi.first.wpilibj2.command.SubsystemBase;
19
20// BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=IMPORTS
21import edu.wpi.first.wpilibj.DigitalInput;
22import edu.wpi.first.wpilibj.motorcontrol.PWMVictorSPX;
23
24 // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=IMPORTS
25
26
27/**
28 *
29 */
30public class Claw extends SubsystemBase {
31 // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTANTS
32
33 // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTANTS
34
35 // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=DECLARATIONS
36private PWMVictorSPX motor;
37private DigitalInput limitswitch;
38
39 // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=DECLARATIONS
40
41 /**
42 *
43 */
44 public Claw() {
45 // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTRUCTORS
46motor = new PWMVictorSPX(4);
47 addChild("motor",motor);
48 motor.setInverted(false);
49
50limitswitch = new DigitalInput(4);
51 addChild("limit switch", limitswitch);
52
53
54
55 // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTRUCTORS
56 }
57
58 @Override
59 public void periodic() {
60 // This method will be called once per scheduler run
61
62 }
63
64 @Override
65 public void simulationPeriodic() {
66 // This method will be called once per scheduler run when in simulation
67
68 }
69
70 // Put methods for controlling this subsystem
71 // here. Call these from Commands.
72
73 public void open() {
74 motor.set(1.0);
75 }
76
77 public void close() {
78 motor.set(-1.0);
79 }
80
81 public void stop() {
82 motor.set(0.0);
83 }
84
85 public boolean isGripping() {
86 return limitswitch.get();
87 }
88
89}
11// ROBOTBUILDER TYPE: Subsystem.
12
13// BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=INCLUDES
14#include "subsystems/Claw.h"
15#include <frc/smartdashboard/SmartDashboard.h>
16
17 // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=INCLUDES
18
19Claw::Claw(){
20 SetName("Claw");
21 // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=DECLARATIONS
22 SetSubsystem("Claw");
23
24 AddChild("limit switch", &m_limitswitch);
25
26
27 AddChild("motor", &m_motor);
28 m_motor.SetInverted(false);
29
30
31 // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=DECLARATIONS
32}
33
34void Claw::Periodic() {
35 // Put code here to be run every loop
36
37}
38
39void Claw::SimulationPeriodic() {
40 // This method will be called once per scheduler run when in simulation
41
42}
43
44// BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CMDPIDGETTERS
45
46 // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CMDPIDGETTERS
47
48
49// Put methods for controlling this subsystem
50// here. Call these from Commands.
51
52void Claw::Open() {
53 m_motor.Set(1.0);
54}
55
56void Claw::Close() {
57 m_motor.Set(-1.0);
58}
59
60void Claw::Stop() {
61 m_motor.Set(0.0);
62}
63
64bool Claw::IsGripping() {
65 return m_limitswitch.Get();
66}
将方法添加到 claw.java 或 claw.cpp 将打开,关闭和停止爪子移动并获取爪子限位开关。这些将由实际操作爪子的命令使用。
请注意,名为“motor”和“limitswitch”的成员变量是由 RobotBuilder 创建的,因此可以在整个子系统中使用。每个拖入的调色板项目都有一个成员变量,其名称在 RobotBuilder 中给出。
将方法声明添加到头文件(仅C ++)
11// ROBOTBUILDER TYPE: Subsystem.
12#pragma once
13
14// BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=INCLUDES
15#include <frc2/command/SubsystemBase.h>
16#include <frc/DigitalInput.h>
17#include <frc/motorcontrol/PWMVictorSPX.h>
18
19 // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=INCLUDES
20
21/**
22 *
23 *
24 * @author ExampleAuthor
25 */
26class Claw: public frc2::SubsystemBase {
27private:
28 // It's desirable that everything possible is private except
29 // for methods that implement subsystem capabilities
30 // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=DECLARATIONS
31frc::DigitalInput m_limitswitch{4};
32frc::PWMVictorSPX m_motor{4};
33
34 // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=DECLARATIONS
35public:
36Claw();
37
38 void Periodic() override;
39 void SimulationPeriodic() override;
40 void Open();
41 void Close();
42 void Stop();
43 bool IsGripping();
44
45 // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CMDPIDGETTERS
46
47 // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CMDPIDGETTERS
48 // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTANTS
49
50 // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTANTS
51
52
53};
除了将方法添加到类实现文件“Claw.cpp”之外,还需要将方法的声明添加到头文件“Claw.h”中。必须添加的那些声明显示在此处。
要将行为添加到爪子子系统以处理打开和关闭,您需要 define commands。