#virtual #controller #uwb #tcp-socket #client-connection #command-line #virtualization

bin+lib pica

皮卡是一个实现 FiRa UCI 规范的虚拟 UWB 控制器

2 个版本

0.1.7 2024 年 1 月 25 日
0.1.3 2023 年 10 月 16 日
0.0.0 2020 年 6 月 30 日

#32模拟器

Apache-2.0

410KB
9K SLoC

Python 5.5K SLoC // 0.0% comments Rust 3K SLoC // 0.1% comments JavaScript 509 SLoC // 0.1% comments

Crate Build workflow

皮卡

皮卡是一个实现 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 empty scene

命令行

有一个命令行工具可以触发一些操作,例如创建锚点。在终端中运行 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