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