2 个版本
0.1.7 | 2024 年 1 月 25 日 |
---|---|
0.1.3 | 2023 年 10 月 16 日 |
0.0.0 |
|
#32 在 模拟器
410KB
9K SLoC
皮卡
皮卡是一个实现 FiRa UCI 规范的虚拟 UWB 控制器。它被设计用于测试 UWB 距离测量能力。皮卡支持以下功能
- 皮卡保持一个三维场景的内部表示。
- 皮卡允许多个客户端通过 TCP 套接字连接。每个新的连接都会启动一个附加的 UWB 子系统。连接的主机可以相互交互,就像它们存在于一个单一的三维场景中一样。
- 皮卡通过一个网络服务器实现了友好的 GUI。
- 皮卡提供了 HTTP 命令,可以直接与场景交互,如创建和销毁虚拟锚点。
构建和运行
$> git clone https://github.com/google/pica.git
$> cd pica/
$> cargo run
您应该看到以下输出
Pica: Listening on: 7000
Pica: Web server started on http://0.0.0.0:3000
现在您可以在 http://0.0.0.0:3000
打开网络界面,并在 http://0.0.0.0:3000/openapi
打开 HTTP 命令文档。场景应该是空的,看起来像这样
命令行
有一个命令行工具可以触发一些操作,例如创建锚点。在终端中运行 pica,然后打开一个新的终端并执行
$> cd pica/
$> python3 scripts/console.py
如果您按 Enter
,控制台将列出所有可用的命令
device_reset Reset the UWBS.
get_device_info Retrieve the device information like (UCI version and other vendor specific info).
get_caps_info Get the capability of the UWBS.
session_init Initialize the session
session_deinit Deinitialize the session
session_set_app_config set APP Configuration Parameters for the requested UWB session.
session_get_app_config retrieve the current APP Configuration Parameters of the requested UWB session.
session_get_count Retrieve number of UWB sessions in the UWBS.
session_get_state Query the current state of the UWB session.
range_start start a UWB session.
range_stop Stop a UWB session.
get_ranging_count Get the number of times ranging has been attempted during the ranging session..
pica_create_anchor Create a Pica anchor
pica_destroy_anchor Destroy a Pica anchor
pica_get_state Return the internal Pica state
pica_init_uci_device Initialize an uci device
pica_set_position Set the position of a Device
如果您想创建一个虚拟锚点
$> cd pica/ && python3 scripts/console.py # If the console is not started yet
$> --> pica_create_anchor 00:00 # pica_create_anchor <mac_address>
$> --> pica_create_anchor 00:01 # Create another one
架构
- 设备 为连接的主机创建的 UWB 子系统。
- 会话 连接的主机打开的 UWB 距离测量会话。
- 锚点 响应连接的主机距离测量请求的虚拟 UWB 主机。
┌────────────────────┐
│ Web │
│ │
└─────┬─────────▲────┘
│ │ HTTP localhost:3000
┌────────────────────▼─────────┴───────┐
│ │
│ Pica │
│ │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │Anchor1 │ │Device1 │ │Device2 │ │
│ ├────────┤ │ │ │ │ │
│ │Anchor2 │ ├────────┤ ├────────┤ │
│ ├────────┤ │Session1│ │Session1│ │
│ │... │ ├────────┤ ├────────┤ │
│ │ │ │Session2│ │Session2│ │
│ └────────┘ └──▲──┬──┘ └──▲──┬──┘ │
│ │ │ │ │ │
└─────────────────┼──┼────────┼──┼─────┘
│ │ │ │ TCP localhost:7000
┌──┴──▼──┐ ┌──┴──▼──┐
│Client1 │ │Client2 │
│ │ │ │
├────────┤ ├────────┤
│VirtIO │ │ │
├────────┤ │ │
│UWB HAL │ │ │
├────────┤ │Python │
│Cuttle │ │console │
│fish │ │ │
└────────┘ └────────┘
HTTP 命令
皮卡还实现了 HTTP 命令,文档可在 http://0.0.0.0:3000/openapi
找到。HTTP 命令集允许用户与皮卡交互并修改其场景。
测试
设置您的 python 环境
python3 -m venv venv
source venv/bin/activate
pip install pytest
pip install pytest_asyncio
pip install -e py/pica/
然后运行测试
pytest --log-cli-level=DEBUG -v
测试位于 ./tests/
依赖项
~8–17MB
~255K SLoC