Metadata-Version: 2.4
Name: pi-swarmgcs
Version: 0.2.1
Summary: 基于 Cesium 的无人设备地面控制站 — WebSocket 服务器、协议插件、前端面板
Author: pi-lab
License: MIT
Keywords: cesium,drone,gcs,mavlink,uav
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3.10
Classifier: Topic :: Scientific/Engineering
Requires-Python: >=3.10
Requires-Dist: fastapi>=0.118.0
Requires-Dist: uvicorn[standard]>=0.30.0
Requires-Dist: websockets>=14.0
Provides-Extra: all
Requires-Dist: build>=1.5; extra == 'all'
Requires-Dist: future; extra == 'all'
Requires-Dist: mavproxy; extra == 'all'
Requires-Dist: pi-uav-protocol>=0.2.0; extra == 'all'
Requires-Dist: pymavlink; extra == 'all'
Requires-Dist: pytest-asyncio>=0.21; extra == 'all'
Requires-Dist: pytest>=7; extra == 'all'
Requires-Dist: ruff>=0.1; extra == 'all'
Requires-Dist: tyro>=0.8; extra == 'all'
Provides-Extra: cloud-proxy
Requires-Dist: aiohttp; extra == 'cloud-proxy'
Requires-Dist: aiortc; extra == 'cloud-proxy'
Requires-Dist: av; extra == 'cloud-proxy'
Requires-Dist: filterpy; extra == 'cloud-proxy'
Requires-Dist: numpy; extra == 'cloud-proxy'
Requires-Dist: opencv-python; extra == 'cloud-proxy'
Requires-Dist: requests; extra == 'cloud-proxy'
Requires-Dist: scipy; extra == 'cloud-proxy'
Requires-Dist: torch; extra == 'cloud-proxy'
Requires-Dist: ultralytics; extra == 'cloud-proxy'
Provides-Extra: dev
Requires-Dist: build>=1.5; extra == 'dev'
Requires-Dist: future; extra == 'dev'
Requires-Dist: mavproxy; extra == 'dev'
Requires-Dist: pi-uav-protocol>=0.2.0; extra == 'dev'
Requires-Dist: pymavlink; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.21; extra == 'dev'
Requires-Dist: pytest>=7; extra == 'dev'
Requires-Dist: ruff>=0.1; extra == 'dev'
Requires-Dist: tyro>=0.8; extra == 'dev'
Provides-Extra: mavlink
Requires-Dist: future; extra == 'mavlink'
Requires-Dist: mavproxy; extra == 'mavlink'
Requires-Dist: pymavlink; extra == 'mavlink'
Requires-Dist: tyro>=0.8; extra == 'mavlink'
Provides-Extra: pi-uav
Requires-Dist: pi-uav-protocol>=0.2.0; extra == 'pi-uav'
Description-Content-Type: text/markdown

# PI-SwarmGCS

基于Cesium的无人设备管理、控制，能够显示无人设备的各种信息，完成控制，任务管理，地图显示等。

![cover image](docs/images/Cesium_GCS.png)

## 安装、使用

建议使用conda
```bash
# 首次创建环境
conda create -n pi-uav python=3.11
# 激活环境
conda activate pi-uav
```

下载代码：

```bash
git clone --recurse-submodules git@gitee.com:pi-lab/pi-swarmgcs.git
```


如果下载的时候没有加 `--recurse-submodules`，可以在普通的clone后执行：
```
git clone git@gitee.com:pi-lab/pi-swarmgcs.git
git submodule update --init --recursive
```

安装Python到本地conda环境, 方便开发
```bash
pip install -e ".[all]"

cd thirdparty/pi-uav-protocol
pip install -e ".[all]"
```


> 打包说明：本项目已改为标准 Python 包（`src/pi_swarmgcs/` 布局）。安装后可直接用
> `pi-swarmgcs` 命令启动。前端资源（Cesium 库、css、js、index.html、示例 mission）
> 随包分发；**场景数据**（3D 模型 `models/`、3DGS 点云 `3dgs_data/`、3D Tiles
> `MS-3Dtiles/`、`*.pt` 权重等体积较大，不进包）需自备，通过 `--data-dir` 指向。

本程序运行起来需要一些场景数据文件，可从服务器上的
`/home/a409/users/songziheng/cesium_gcs/data` 拷贝到本地某个数据目录（如 `./data`），
启动时用 `--data-dir` 指向它。


首先在 `scripts/pi-mavlink-tools/apm_sim.py` 有apm仿真器

可以执行这个指令仿真两台无人机

```bash
python scripts/pi-mavlink-tools/apm_sim.py --UAV_N 2
```

如果报错是apm文件需要授权输入这个指令：

```bash
chmod +x ~/scripts/pi-mavlink-tools/apm/arducopter
```
注意目录替换成自己的

然后启动服务器（pip 安装后用 `pi-swarmgcs` 命令；开发态也可 `python -m pi_swarmgcs`）：

```bash
# 在数据目录所在位置启动（-d 指向场景数据目录）
pi-swarmgcs -c data/config.json -d ./data
```

启动完成之后在服务器控制台输入
```
load apm_protocol
```
会加载apm仿真的无人机到UI界面上

![APM仿真器UI](docs/images/01_apm_sim_ui.png)

在浏览器输入`http://localhost:8100` 就能看到对应的无人机了

![浏览器无人机视图](docs/images/02_uav_browser_view.png)


第二部分：

大语言模型控制服务启动：
参照`thirdparty/llm_auto_control_v2/README.md`里的说明对环境进行安装。注：主要是安装本地语音大模型的环境，还有python必须是py3.10

```bash
python thirdparty/llm_auto_control_v2/experiment/web_apm_ui_main.py
```

等待语音模型加载成功即可。
![LLM控制服务加载](docs/images/03_llm_control_loading.png)


效果展示：

![效果展示](docs/images/04_effect_demo.png)

大语言模型控制的通用接口适配了 PX4、AirSim、PI-MAVLink、APM 等各个平台的控制及语音控制功能，详见 [airsim-lib](https://gitee.com/pi-lab/airsim-lib)。



## 关于git submodule



增加submodule

```bash
cd thirdparty
git submodule add -b master git@gitee.com:pi-lab/pi-uav-protocol.git pi-uav-protocol
```



在更新submodule的内容后，需要注意branch是否是master，如果不是，则需要先切换到 master 然后在提交

```bash
cd thirdparty/pi-uav-protocol
git baranch
git add -A
git commit -m "commit message"

# 如果当前的分支不是master，分支是一个数字，那么先创建一个临时分支
git checkout -b test

# 切换到master分支，然后合并临时分支
git checkout master
git merge test

# 提交到submodule的仓库
git push origin master
```



等各个submodule都提交了之后，再提交 pi-swarmgcs 到仓库

```bash
# 先确认一下当前项目做了那些改变，如果有些不需要提交的东西，可以把不提交的内容放到 .gitignore 里面

git add -A
git commit -m "commit message"
git push origin master
```

关于 git submodule 更详细的用法可以可以参考  [git submodule用法说明](https://gitee.com/pi-lab/learn_programming/tree/master/6_tools/git#5-git-submodule)



## References
- https://gitee.com/pi-lab/pi-uav-protocol 无人设备统一协议
- https://gitee.com/pi-lab/PI-Metaverse 新一代集无人机操控、任务控制、数据处理、结果展示和态势感知为一体的软件系统
- https://gitee.com/pi-lab/pi-mavlink 集群无人机控制程序
- https://gitee.com/pi-lab/cesium_viz Cesium可视化程序，本项目前身的项目
