添加自定义组件

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文件。

它应该使用该部分的配色方案和常规样式,以避免视觉混乱,但这是完全可选的。图标和背景的Photoshop``.psd’’文件位于``src / main / icons / icons <https://github.com/wpilibsuite/RobotBuilder/tree/master/src/main/icons/icons>`_中,图标和背景的png文件位于``src / main / resources / icons <https://github.com/wpilibsuite/RobotBuilder/tree/master/src/main/resources/icons>`_中。