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 机器人
93KB
2K SLoC
PROS模拟器
无需真实VEX V5硬件即可运行PROS机器人代码。
安装
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接口

要构建示例模拟器程序,您需要一个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