添加自定义组件

RobotBuilder在创建仅将WPILib用于电机,控制器和传感器的机器人程序时效果很好。但是对于使用自定义类的团队,RobotBuilder对这些类没有任何支持,因此需要采取一些步骤才能在RobotBuilder中使用它们

自定义组件结构

../../../../../_images/custom-components-1.png

所有自定义组件都放在~/ wpilib / YYYY / Robotbuilder / extensions中,其中〜是Windows上的C:Users Public,而YYYY是FRC | reg |年。

自定义组件需要七个文件和一个文件夹。该文件夹包含描述组件及其导出方式的文件。该名称应与组件名称相同(例如,奇异果驱动器控制器Kiwi drive controller的名称应为“ Kiwi Drive”,六电动机驱动器控制器six-motor drive controller的名称应为“ Robot Drive 6”,等等)这些文件应具有与此处显示的名称和扩展名相同的名称和扩展名。其他文件可以与这七个文件一起放在文件夹中,但是七个文件必须存在,以便RobotBuilder识别自定义组件。

PaletteDescription.yaml

../../../../../_images/custom-components-2.png

逐行:

  • !Component:表明新组件的开始

  • name:组件的名称。这就是调色板/树中将显示的内容-也应与包含文件夹的名称相同

  • type:组件的类型(稍后将对此进行深入说明)

  • supports:可以支持的每种类型的组件数量的图像。 RobotBuilder中的电动机控制器都是PID输出,因此kiwi驱动器可以支持三个PID输出。如果某个组件不支持任何东西(例如传感器或电机控制器),则请忽略此行

  • help:短字符串,当这些组件之一被鼠标停留在之上时会给出有用的信息

  • properties:此组件的属性列表。在此kiwi驱动器示例中,有三个非常相似的属性,每个电动机一个。 ChildSelectionProperty允许用户从正在编辑的子组件的子组件中选择给定类型的组件(因此,在这里,它们将显示一个下拉列表,要求输入已添加到Kiwi驱动器的PID输出-即电动机控制器)

RobotBuilder支持的组件类型(区分大小写):

  • 指令

  • 子系统

  • PID输出(电机控制器)

  • PIDSource(实现PIDSource的传感器,例如模拟电位器,编码器)

  • 传感器(无法执行PIDSource的传感器,例如限位开关)

  • 控制器(机器人驱动器,PID控制器等)

  • 执行器(不是电动机的输出,例如电磁阀,伺服)

  • 操作杆

  • 操纵杆按钮

属性

与自定义组件相关的属性:

  • StringProperty:在组件需要字符串时使用,例如组件名称

  • BooleanProperty:当组件需要布尔值时使用在SmartDashboard上放置一个按钮

  • DoubleProperty:在组件需要数字值使用,例如, PID常数选择属性

  • ChildSelectionProperty:当您需要选择子组件时使用,例如RobotDrive中的电机控制器

  • TypeSelectionProperty:当您需要从程序中的任何位置选择给定类型的任何组件时使用,例如PID指令的输入和输出

每个属性的字段所述:

../../../../../_images/custom-components-3.png

Validators.yaml

../../../../../_images/custom-components-4.png

您可能已经在PaletteDescription.yaml中每个电动机属性的验证器条目中注意到“ KiwiDriveValidator”。它不是内置的验证器,因此必须在Validators.yaml中定义。这个示例验证器非常简单-只需确保每个命名字段的值都与其他字段的不同。

内置验证器和验证器类型

../../../../../_images/custom-components-5.png

内置验证器非常有用(特别是用于端口/通道的UniqueValidators),但是有时需要自定义验证器,如上一步

  • DistinctValidator:确保每个给定字段的值都是唯一的

  • ExistsValidator:确保已使用此验证器为属性设置一个值

  • UniqueValidator:确保该属性的值在给定字段中是全局唯一

  • ListValidator:确保列表属性中的所有值均有效

C ++ 输出.yaml

../../../../../_images/custom-components-6.png

文件的逐行细分:

  • Kiwi驱动器:要导出的组件的名称。这与在PaletteDescription.yaml中设置的名称相同,也和包含此文件的文件夹的名称相同。

  • 默认值:提供一些默认值,包括该组件所需的包含值,类的名称,构造模板等。默认情况下,CustomComponent向使用该组件的每个生成的文件中添加“ Custom / $ {ClassName} .h”的包含项(例如“ RobotDrive.h”将具有“ #include“ Custom / KiwiDrive.h``文件的顶部)

  • ClassName:您要添加的自定义类的名称。

  • 构造:有关如何构造组件的说明。变量将被其值替换(“ $ {ClassName}”将被替换为“ Kiwi驱动器”),然后将对宏进行求值(例如,“#变量($ Name)”可能会替换为“ drivebaseKiwiDrive”)。

这个例子要求一个带有构造函数的Kiwi驱动器类型

KiwiDrive(SpeedController, SpeedController, SpeedController)

如果您的团队使用Java,则此文件可以为空。

Java 导出.yaml

../../../../../_images/custom-components-7.png

与C ++导出文件非常相似;唯一的区别应该是施工线。施工线要求一个带有构造函数的KiwiDrive类型

KiwiDrive(SpeedController, SpeedController, SpeedController)

如果您的团队使用C ++,则此文件可以为空。

使用宏和变量

宏是RobotBuilder用来将变量转换为文本的简单函数,这些文本将插入生成的代码中。它们始终以“#”符号开头,并且语法类似于函数:<macro_name>(arg0,arg1,arg2,...)”。您可能需要使用的唯一宏是``#variable(component_name)

“ #variable”接受一个字符串,通常是在某个地方定义的变量(即“名称”是给RobotBuilder中的组件命名的名称,例如“手臂电机”),然后将其转换为在中定义的变量的名称。生成的代码。例如,#variable(“ Arm Motor”)``产生字符串“ ArmMotor

通过在变量名称前放置一个美元符号(“ $”)来引用变量,可以将其可选地放在花括号内,以方便地将变量与文件中的其他文本区分开。解析文件后,将美元符号,变量名和花括号替换为变量的值(例如,将“ $ {ClassName}”替换为“ KiwiDrive”)。

变量可以是组件属性(例如,在kiwi驱动器示例中为“ Motor 1”,“ Motor 2”,“ Motor 3”)或以下之一:

  1. Short_Name:在RobotBuilder的编辑器面板中为组件指定的名称

  2. Name:组件的全名。如果组件在子系统中,则这是在子系统名称后附加的简称

  3. Export:应在其中创建该组件的文件名。对于执行器,控制器和传感器等组件,应为“ RobotMap”;或对于如操作手柄及其他自定义OI组件时,应为“OI”。请注意,“ CustomComponent”默认值将导出到RobotMap。

  4. Import:要使用此组件需要包含或导入的文件。

  5. Declaration:类似于构造的指令,用于声明此组件类型的变量。默认情况下,此设置为“无”

  6. Construction:有关如何创建此组件的新实例的说明

  7. LiveWindow:有关如何将此组件添加到LiveWindow的说明

  8. Extra:有关任何其他功能或方法的指令,要求此组件正常运行,例如需要设置编码类型的编码器。

  9. Prototype(仅针对C ++):在声明组件的文件中创建的函数的原型,通常是OI类中的吸气剂

  10. Function:要在声明组件的文件中创建的函数,通常是OI类中的吸气剂

  11. PID:如果有组件,则是一个获取组件的PID输出的指令(例如“#variable($ Short_Name)-> PIDGet()”)

  12. ClassName:组件代表的类的名称(例如“ Kiwi驱动器”或“ 操作杆”)

如果您的变量名称中带有空格(例如“ Motor 1”,“ Right Front Motor”等),则在导出文件中使用空格时,需要用下划线替换空格。

help.html

../../../../../_images/custom-components-8.png

一个HTML文件,提供有关组件的信息。最好使它尽可能详细,尽管如果这一个(或多个)程序员对组件足够熟悉,或者它很简单以至于在详细描述中没什么用处时,这个是肯定没有必要的。

config.txt

../../../../../_images/custom-components-9.png

一个配置文件,用于保存有关组件的其他信息。当前,只有调色板的该部分可以放入组件。

面板的各部分(区分大小写):

  • Subsystems 子系统

  • Controllers 控制器

  • Sensors 感测器

  • Actuators 执行器

  • Pneumatics 气动式

  • OI

  • Commands 指令

icon.png

显示在选用板和帮助页面中的图标。这应该是64x64的.png文件。

It should use the color scheme and general style of the section it’s in to avoid visual clutter, but this is entirely optional. Photoshop .psd files of the icons and backgrounds are in src/main/icons/icons and png files of the icons and backgrounds are in src/main/resources/icons.