#robot #vex #simulator #pros #interface #v5 #hardware

pros-simulator

无需真实VEX V5硬件即可运行PROS机器人代码

9个版本 (4个重大更新)

0.5.0 2024年1月5日
0.4.0 2023年12月21日
0.3.0 2023年12月9日
0.2.2 2023年11月28日
0.1.2 2023年10月17日

#164 in 机器人


用于 pros-simulator-server

MIT 许可证

93KB
2K SLoC

PROS模拟器

无需真实VEX V5硬件即可运行PROS机器人代码。

CI Status MIT License Crates.io

安装

cargo add pros-simulator

或作为基于JSON的服务器可执行文件

cargo install pros-simulator-server

概述

这个Rust包是一个基于WebAssembly的运行时,用于模拟VEX V5机器人代码,无需任何特殊硬件。这是在家编程、调试程序和快速迭代代码设计的最佳方式。

此运行时实现了PROS C接口的一部分,允许现有的基于PROS的程序在模拟器中运行,而无需进行侵入性修改。对pros-simulator的支持直接集成到pros包中,因此使用它的程序将与该模拟器兼容,无需额外工作。

用法

PROS模拟器以库的形式提供,也可以作为受LSP协议启发的JSON服务器提供,非常适合集成到其他程序中(请参阅发布页面以获取预制的二进制文件)。此项目包含模拟器的核心,负责加载和运行用户生成的机器人代码,并需要一个自定义接口(如GUI或TUI)才能使用。提供了一些示例接口,如下面的基于TUI的示例。

TUI接口

TUI interface

要构建示例模拟器程序,您需要一个nightly Rust工具链和安装了was32-unknown-unknown目标。在example目录中,运行以下命令进行构建:

cargo pros build -s

然后,在项目根目录中,运行以下命令启动TUI:

cargo run --example tui ./example/target/wasm32-unknown-unknown/debug/example.wasm

模拟器(及其TUI接口)支持在机器人代码中使用断点!尝试在VS Code中打开此项目并按F5开始调试示例程序。

特性概述

  • 并发多任务:启动任务并管理它们。
  • LLEMU:将消息打印到V5 LCD显示屏。
  • 串行连接:将消息打印到调试终端。
  • 互斥锁:同步任务。
  • 任务本地存储:管理针对每个任务特定的全局变量。
  • 定时器:使程序休眠并获取已过时间。
  • 中止消息:在任何恐慌或中止(包括段错误)时获取堆栈跟踪和错误消息。
  • 控制器:使用任何SDL兼容的有线或蓝牙控制器控制模拟机器人。
  • 竞赛状态:控制模拟机器人的自主/操作/禁用状态。
  • 电机:模拟VEX智能电机。
  • 传感器:模拟V5兼容的传感器。
  • 物理:物理模拟和模拟机器人的图形表示。

机器人代码API参考

请参阅PROS文档以获取签名和文档。除非另有说明,API为1:1。

  • LLEMU(遗留LCD模拟器) C API

    • lcd_clear
    • lcd_clear_line
    • lcd_initialize
    • lcd_is_initialized
    • lcd_print
    • lcd_read_buttons
    • lcd_register_btn0_cb
    • lcd_register_btn1_cb
    • lcd_register_btn2_cb
    • lcd_set_text
    • lcd_shutdown
    • lcd_set_background_color
    • lcd_set_text_color
  • 杂项 C API

    • battery_get_capacity
    • battery_get_current
    • battery_get_temperature
    • battery_get_voltage
    • competition_get_status
    • competition_is_autonomous
    • competition_is_connected
    • competition_is_disabled
    • controller_clear
    • controller_clear_line
    • controller_get_analog
    • controller_get_battery_capacity
    • controller_get_battery_level(返回值始终等于容量)
    • controller_get_digital
    • controller_get_digital_new_press
    • controller_is_connected
    • controller_print
    • controller_rumble
    • controller_set_text
    • usd_is_installed
  • 实时操作系统设施 C API

    • delay
    • millis
    • micros
    • mutex_create
    • mutex_delete
    • mutex_give
    • mutex_take
    • task_create
    • task_delay
    • task_delay_until
    • task_delete
    • task_get_by_name
    • task_get_count
    • task_get_current
    • task_get_name
    • task_get_priority
    • task_get_state
    • task_notify
    • task_notify_clear
    • task_notify_ext
    • task_notify_take
    • task_join
    • task_resume
    • task_set_priority
    • task_suspend
    • rtos_suspend_all
    • rtos_resume_all
    • pvTaskGetThreadLocalStoragePointer
    • vTaskSetThreadLocalStoragePointer
    • xTaskAbortDelay
  • 通用I/O API

    未记录的/内部PROS函数,用于支持杂项I/O,如errno、调试终端和恐慌。

    • _errno:返回当前任务的errno值的可变指针。
    • sim_abort(*const char) -> !:仅模拟器API,用于带错误消息的中止。
    • sim_log_backtrace() -> ():将堆栈跟踪打印到调试终端的模拟器特定函数。
    • puts:写入调试终端(来自官方PROS CLI的pros terminal命令)
    • exit:干净地关闭

依赖关系

~29-43MB
~635K SLoC