模拟特定的用户界面元素

WPILib扩展了机器人仿真功能,以引入图形用户界面(GUI)组件。 这使团队可以轻松地可视化其机器人的输入和输出。

备注

模拟 GUI 在许多方面与:ref:Glass <docs/software/dashboards/glass/introduction:Introduction to Glass> 非常相似。下面的一些页面将链接到 Glass 部分,这些部分描述了两种 GUI 的共同元素。

运行GUI

通过 VS Code 运行模拟

您只需通过**运行模拟**命令面板选项启动GUI。

Picking Sim GUI simulation extension

And the Sim GUI option should popup in a new dialog and will be selected by default. Press Ok. This will now launch the Simulation GUI!

模拟GUI

使用GUI

学习布局

有标签的模拟GUI

默认情况下,模拟GUI 上会显示以下项目:

  1. 机器人状态-这是机器人的当前状态或“模式”。 你可以单击标签来更改模式,就像在普通Driver Station上一样。

  2. 计时 - 显示机器人计时器的值并允许操纵计时。

  3. 系统操纵杆-这是当前连接到系统的操纵杆列表。

  4. FMS - This is used for simulating many of the common FMS systems.

  5. NetworkTables - 显示已发布到 NetworkTables 的数据。

  6. 操纵杆-这是可以直接从机器人代码中拉出的操纵杆。

  7. 其他设备 - 这包括不属于任何其他类别的设备,例如部件套件中包含的 ADXRS450 陀螺仪或支持模拟的第三方设备。

可以从硬件菜单添加以下项目,但默认情况下不显示。

  1. Addressable LEDs - 这显示了由“AddressableLED”类控制的 LED。

  2. 模拟输入-包括通常使用roboRIO上的** ANALOG IN **连接器的任何设备,例如任何基于模拟的陀螺仪。

  3. ** DIO -(Digital Input Output 数字输入输出)这包括使用roboRIO上的 DIO **连接器的所有设备。

  4. ** Encoders **-这将显示扩展或使用Encoder类的所有实例化设备。

  5. PDPs - 显示配电面板对象。

  6. PWM Outputs - This is a list of instantiated PWM devices. This will appear as many devices as you instantiate in robot code, as well as their outputs.

  7. 继电器-这包括任何继电器设备。 这包括VEX Spike继电器。

  8. 螺线管-这是“已连接”螺线管的列表。当你创建电磁对象并推动输出时,此处显示这些。

将系统操纵杆添加到操纵杆

要从系统操纵杆列表中添加操纵杆,只需在“系统操纵杆”菜单下单击并拖动显示的操纵杆到“操纵杆”菜单。

将操纵杆从系统操纵杆拖动到操纵杆

备注

FRC | reg | Driver Station对连接的游戏手柄进行特殊映射,并且WPILib仿真器默认不会“映射”这些手柄。 您可以通过按“操纵杆”菜单下的“映射手柄”开关来打开此行为。

将键盘用作操纵杆

您可以通过单击并拖动键盘项目之一(例如键盘 0)来将键盘添加到系统操纵杆列表中,就像上面的操纵杆一样。要编辑键盘设置,请转到菜单栏中的 DS 项,然后选择键盘 0 设置。这允许您控制哪个键盘按钮控制哪个轴。这是如何使键盘类似于 Xbox 控制器(使用轴 1 和 4)上的分体式街机驱动器的常见示例:

如何配置键盘使其类似于 Xbox 控制器。

修改ADXRS450输入

使用ADXRS450对象是测试基于陀螺仪的输出的绝佳方法。 这将显示在“其他设备”菜单中。 然后会显示一个下拉菜单,其中显示了各种选项,例如“ Connected”,“ Angle”和“ Rate”。 所有这些值都是可以更改的值,并且是你的机器人代码并可以即时使用。

../../../../_images/sim-gui-using-gyro.png

根据机器人代码确定模拟

如果在运行机器人仿真时供应商库无法编译,则可以使用“ RobotBase.isReal()”包装它们的内容,这将返回“布尔值”。

TalonSRX motorLeft;
TalonSRX motorRight;

public Robot() {
 if (RobotBase.isReal()) {
   motorLeft = new TalonSRX(0);
   motorRight = new TalonSRX(1);
 }
}

备注

在C ++中,重新分配值类型需要移动或复制分配。 除非使用指针而不是值类型,否则既不支持SIM又缺少移动或副本分配运算符的供应商类无法通过条件分配解决。

更改视图设置

“视图”菜单项包含可以自定义的“缩放”和“样式”设置。 “缩放”选项决定了应用程序中文本的大小,而“样式”选项则允许您在“标准”,“亮”和“暗”模式之间进行选择.

深色样式设置的例子如下:

../../../../_images/glass-dark-mode.png

清除申请数据

模拟 GUI 的应用程序数据,包括小部件大小和位置以及小部件的其他自定义信息,都存储在“imgui.ini”文件中。该文件存储在运行模拟的项目目录的根目录中。

imgui.ini 配置文件可以简单地删除以将模拟 GUI 恢复到“干净的状态”。