2026-06-28 15:04:55 +08:00
|
|
|
|
# 运行与部署说明
|
|
|
|
|
|
|
|
|
|
|
|
## 1. 依赖
|
|
|
|
|
|
|
|
|
|
|
|
所有 Tutorial 插件引用 `D:\MDCS\Release`:
|
|
|
|
|
|
|
|
|
|
|
|
| 组件 | 路径 |
|
|
|
|
|
|
|------|------|
|
|
|
|
|
|
| Medulla | `Release\Medulla\` |
|
|
|
|
|
|
| Clumsy | `Release\Clumsy\ClumsyLite.exe` |
|
|
|
|
|
|
| CommonUsage | `Release\CommonUsage.dll` |
|
|
|
|
|
|
| MDCSToolBox | `Release\MDCSToolBox.dll`(由 `Products\mdcstoolbox` 编译 PostBuild 输出) |
|
|
|
|
|
|
|
|
|
|
|
|
首次使用前编译 MDCSToolBox:
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
|
dotnet build D:\MDCS\Source\Products\mdcstoolbox\MDCSToolBox.csproj -c Release
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 2. 编译 Tutorial
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
|
cd D:\MDCS\Source\Tutorial
|
|
|
|
|
|
dotnet build Tutorial.sln
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
输出:
|
|
|
|
|
|
|
|
|
|
|
|
- M 插件 → `build\Medulla\plugins\`
|
|
|
|
|
|
- C 插件 → `build\Clumsy\` 与 `build\Clumsy_AGV2\`(PostBuild 复制运行时)
|
2026-06-28 23:12:23 +08:00
|
|
|
|
- S 插件 → `build\Simple\plugins\`(PostBuild 复制 SimpleComposer 宿主到 `build\Simple\`)
|
|
|
|
|
|
|
|
|
|
|
|
MultiWheelS 为旧式 net48 项目,需用 MSBuild 单独编译:
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
|
msbuild D:\MDCS\Source\Tutorial\MultiWheel\MultiWheelS\MultiWheelS.csproj /p:Configuration=Debug
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
或在 Visual Studio 中打开 `Tutorial.sln` 编译 `MultiWheelS` 项目。
|
2026-06-28 15:04:55 +08:00
|
|
|
|
|
|
|
|
|
|
## 3. 目录结构
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
|
Tutorial/
|
|
|
|
|
|
DiffWheel/DiffWheelM/ DiffWheel/DiffWheelC/
|
2026-06-28 23:12:23 +08:00
|
|
|
|
MultiWheel/MultiWheelM/ MultiWheel/MultiWheelC/ MultiWheel/MultiWheelS/
|
2026-06-28 15:04:55 +08:00
|
|
|
|
deploy/ # 配置模板(入库)
|
|
|
|
|
|
build/ # 运行目录(gitignore)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 4. 单车验证(多舵轮)
|
|
|
|
|
|
|
|
|
|
|
|
1. 启动 Playground(若使用仿真)
|
|
|
|
|
|
2. 启动 Detour(`DetourLite`,`detour.json` 中 `shareObjectTag=Multi1`,端口 4321)
|
|
|
|
|
|
3. `build\Medulla\start_medulla_agv1.bat`
|
|
|
|
|
|
4. 使用 `deploy\start_clumsy_agv1.bat` 或手动复制:
|
|
|
|
|
|
- `deploy\chassis.json` → `build\Clumsy\`
|
|
|
|
|
|
- `deploy\clumsy_agv1\clumsy.json` → `build\Clumsy\clumsy.json`
|
|
|
|
|
|
- `deploy\clumsy_agv1\clumsyconsole.json` → `build\Clumsy\clumsyconsole.json`
|
|
|
|
|
|
5. 在 `build\Clumsy\` 运行 `ClumsyLite.exe`
|
|
|
|
|
|
|
|
|
|
|
|
## 5. 双车手动联动(同机)
|
|
|
|
|
|
|
|
|
|
|
|
| 配置项 | AGV1(主车) | AGV2(从车) |
|
|
|
|
|
|
|--------|-------------|-------------|
|
|
|
|
|
|
| Medulla | `build\Medulla\` tag `Multi1`,web API **8007** | `build\Medulla_AGV2\` tag `Multi2`,web API **8108** |
|
|
|
|
|
|
| Detour | `detour.json` tag `Multi1`,HTTP **4321** / Web **4322** | `Detour_AGV2\detour.json` tag `Multi2`,HTTP **4421** / Web **4422** |
|
|
|
|
|
|
| `clumsyconsole.json` | `soTag=Multi1`, `port=8008`, `detourPort=4321` | `soTag=Multi2`, `port=8009`, `detourPort=4421` |
|
|
|
|
|
|
| `clumsy.json` msConf | `MultiVehicleMasterEndpoint="/"`, `CarNum=1` | `MultiVehicleMasterEndpoint="127.0.0.1:8008"`, `CarNum=2` |
|
|
|
|
|
|
|
|
|
|
|
|
**tag 一致性**:Detour `shareObjectTag` = Clumsy `soTag` = Medulla `SetShareObjectTag`(见 `startup.iocmd`)。
|
|
|
|
|
|
|
|
|
|
|
|
1. 启动 Playground + 两台 Detour + 两台 Medulla + 两台 ClumsyLite(工作目录 `build\Clumsy` / `build\Clumsy_AGV2`),或使用 `DetourLite\bin\Debug\net8.0\start_all_sim.bat` 一键启动全部 7 个进程
|
|
|
|
|
|
2. 主车 Medulla 遥控器按 **F** 开启「车队联动」
|
|
|
|
|
|
3. 用摇杆驱动:Y=纵向,X=编队转向
|
|
|
|
|
|
|
|
|
|
|
|
## 6. 双车自动联动
|
|
|
|
|
|
|
|
|
|
|
|
1. 完成上一节双车启动
|
2026-06-29 15:59:28 +08:00
|
|
|
|
2. 可选:`MultiVehicleSyncUseDetour=true` 开启**车队内姿态纠正**(SLAM 逐车 `PosBias*` 补偿)。注意它**不影响**整车队姿态计算——自动模式无论该开关如何,主车都用 Detour 反推车队中心,无有效定位时会阻塞停车(详见 `MultiVehicleConfig.md` §5)
|
2026-06-28 23:12:23 +08:00
|
|
|
|
3. 通过 Simple 调度触发自动联动(推荐):
|
|
|
|
|
|
- 编译 `MultiWheelS`(见第 2 节),确认 `build\Simple\plugins\MultiWheelS.dll` 存在
|
|
|
|
|
|
- 在 `build\Simple\` 运行 `SimpleComposer.exe`(自动加载 `./plugins`)
|
|
|
|
|
|
- 添加车型 **「多车联动AGV」**(`MultiVehicleCar`,`MultiVehicleSync=true`)
|
|
|
|
|
|
- 主车设置 `cport:8008`、从车 `cport:8009`(可用 `SetCPort` 或 `conf` 字段)
|
|
|
|
|
|
- 在该车上规划路径 → 编译为 `agv.BasicGo(..., multiVehicleSync:true)` → 主车 `ChassisController` 开启 `MultiVehicleAutoEnabled`,`PilotDefinition` 50ms 循环广播并驱动车队
|
|
|
|
|
|
4. 自动联动机制已知问题见 [MultiVehicleAutoSyncReview.md](./MultiVehicleAutoSyncReview.md)
|
2026-06-28 15:04:55 +08:00
|
|
|
|
|
|
|
|
|
|
## 7. 差速示例
|
|
|
|
|
|
|
|
|
|
|
|
使用 `deploy\clumsy_diff\clumsy.json`,工作目录 `build\Clumsy_diff\`。
|
|
|
|
|
|
|
|
|
|
|
|
## 8. 配置文件说明
|
|
|
|
|
|
|
|
|
|
|
|
| 文件 | 作用 |
|
|
|
|
|
|
|------|------|
|
|
|
|
|
|
| `detour.json` | `shareObjectTag`、`guru.DetourPort`、雷达 layout |
|
|
|
|
|
|
| `clumsyconsole.json` | `soTag`、`port`、`allowMultiple`、`detourHost`/`detourPort` |
|
|
|
|
|
|
| `clumsy.json` | `msConf` → `PilotConfig`(含 `TestCarSyncDistance`、主车端点) |
|
|
|
|
|
|
| `chassis.json` | 四轮舵轮几何 |
|
|
|
|
|
|
| `startup.iocmd` | `SetShareObjectTag Multi1/Multi2` |
|
|
|
|
|
|
|
2026-06-28 23:12:23 +08:00
|
|
|
|
详细算法见 [MultiVehicleSync.md](./MultiVehicleSync.md),修复清单见 [BugFixes.md](./BugFixes.md),自动联动机制问题分析见 [MultiVehicleAutoSyncReview.md](./MultiVehicleAutoSyncReview.md)。
|