Files
ParkingRobot/README.md
T

8.3 KiB
Raw Blame History

MyParking 停车机器人

简体中文 | English

重写说明

本仓库是停车机器人控制软件的重写版本。当前不以一次性恢复全部旧功能为目标,而是按以下顺序重新建立可验证、可维护的能力:

  1. 先实现单台停车机器人小车的基本功能;
  2. 在单车闭环稳定后逐步增加停车作业功能;
  3. 再优化轨迹跟踪方法及其稳定性;
  4. 最后评估并实现多车通信、编队与协同控制。

当前处于第 1 阶段,开发重点是单车基本功能。 PilotConfig.cs 中由 #if false 包围的钻车、夹抱和多车参数仅作为历史代码或设计参考,不参与当前编译,也不表示相关功能已经可用。

项目简介

MyParking 是一个面向多轮停车机器人底盘的 C# 控制工程。仓库包含上层运动控制插件 ClumsyPilot 和下层硬件适配插件 MedullaAdapter,用于建立从单车运动指令到 MCU 串口桥、CAN/串口端口的基础链路。

当前代码已经包含单车终点直线跟踪、前进/后退测试、PID 原地旋转、停止保护,以及 MCU 串口桥的托管封装和初始化流程。完整停车作业所需的驱动器协议、反馈解析、安全报警、夹抱执行和感知流程仍待实现或接入。

当前范围

范围 状态 说明
单车几何控制器 已接入 根据公共配置创建 MultiWheelGeometricController
单车终点跟踪 已实现基础版本 使用直线路径,可测试前进和后退,到达或退出时发送零速度
单车原地旋转 已实现基础版本 读取定位朝向并通过 PID 输出角速度,到位后停车
MCU 串口桥 已封装 支持打开、复位、状态/版本查询、端口配置、IO、串口与 CAN 收发/回调
MCU 初始化 已实现基础流程 默认使用 COM4、1 路 CAN 和 3 路串口配置
驱动反馈与安全链路 待实现 驱动协议、轮速/舵角反馈、电池、急停和报警例程目前没有实际逻辑
停车作业功能 待实现 钻车、轮胎识别、夹抱等旧参数当前被条件编译禁用
多车能力 暂不实施 多车参数当前被条件编译禁用,待单车及跟踪能力稳定后再设计

软件结构

上层 Clumsy 运行环境
        │
        ▼
ClumsyPilot:单车动作、轨迹跟踪、测试入口
        │ 底盘速度指令
        ▼
Medulla 运行环境 / MedullaAdapter
        │ P/Invoke
        ▼
mcu_serial_bridge.dll → MCU → CAN / Serial / Digital IO

两个工程均生成类库,仓库中没有独立的可执行入口:

  • ClumsyPilot:上层单车运动控制,目标框架为 .NET Standard 2.0
  • MedullaAdapter:下层 MCU 和底盘适配,目标框架为 .NET 8.0。

目录说明

MyParking/
├── ParkingRobot.sln                 # Visual Studio 解决方案
├── ClumsyPilot/
│   ├── AGV.cs                       # 上层 AGV 接口
│   ├── ChassisController.cs         # 单车几何控制器配置
│   ├── Movements.cs                 # 终点跟踪、等待、原地旋转动作
│   ├── MovementTests.cs             # Clumsy 环境中的人工动作测试
│   ├── PilotConfig.cs               # 当前单车配置及禁用的历史/预研配置
│   ├── PilotDefinition.cs           # 车型尺寸和车号定义
│   └── ref/                          # 上层框架引用程序集
└── MedullaAdapter/
    ├── DiverCartDefinition.cs       # 车型 IO、监控字段及 MCU 初始化
    ├── MCUSerialBridgeCLR.cs        # 原生 MCU 串口桥的 C# 封装
    ├── MCUSerialBridgeError.cs      # 错误码与诊断说明
    ├── AlarmRoutine.cs              # 安全报警例程占位
    ├── MCURoutine.cs                # MCU IO/反馈例程占位
    ├── MotorRoutine.cs              # 电机控制例程占位
    ├── Remote.cs                    # 遥控例程占位
    └── ref/                          # 下层框架引用程序集

开发环境与依赖

  • Windows 开发/运行环境;当前硬件接入使用 COM 端口和原生 DLL;
  • Visual Studio 2022,或能够构建 .NET 8.0 与 .NET Standard 2.0 项目的 .NET SDK
  • NuGet 包:Newtonsoft.Json 13.0.3System.Numerics.Vectors 4.6.1
  • ClumsyPilot/refMedullaAdapter/ref 中的内部框架程序集;
  • 实机运行所需的 mcu_serial_bridge.dll;该文件当前未包含在仓库中;
  • 能够加载 ClumsyPilot.dllMedullaAdapter.dll 的 Clumsy/Medulla 宿主环境;宿主程序和部署配置当前未包含在仓库中。

仓库中未发现 ROS/ROS 2、Docker 或独立仿真启动配置。

编译

在仓库根目录执行:

dotnet restore ParkingRobot.sln
dotnet build ParkingRobot.sln -c Debug

主要输出位置:

ClumsyPilot/build/Clumsy/ClumsyPilot.dll
MedullaAdapter/build/Medulla/plugins/MedullaAdapter.dll

当前源码已通过解决方案编译。现有警告为 DiverCartDefinition.TransmitterLastTime 尚未赋值,不影响程序集生成。

运行与配置

本仓库只生成插件类库,不能通过 dotnet run 独立启动。需要由匹配版本的 Clumsy/Medulla 宿主加载上述程序集。具体宿主版本、目录复制方式、配置文件位置和启动命令尚未随仓库提供,待补充。

当前能够从代码确认的 MCU 默认初始化参数如下:

参数 默认值
MCU 端口 COM4
MCU 连接波特率 1000000
CAN 通道 1 路,500000 bit/s,重试时间 10 ms
串口通道 3 路,9600 bit/s,接收帧时间 10 ms

实机启动前应在宿主参数界面或对应配置中确认端口和硬件参数。首次调试建议架空驱动轮或使用安全测试区域,并准备可靠的急停手段;当前安全报警与急停反馈逻辑尚未完成,不能将软件停车作为唯一安全措施。

单车功能验证

MovementTests.cs 向 Clumsy 测试界面注册了以下人工测试:

  • 测试终点跟踪动作-前进:选取起点和终点后执行前向直线跟踪;
  • 测试终点跟踪动作-后退:以 180° 车身方向偏置执行后退跟踪;
  • 底盘旋转测试:输入世界坐标系目标角度后执行 PID 原地旋转。

这些是宿主环境内的动作测试,并非 dotnet test 自动化测试。实机验证前需要先确认定位数据、底盘速度接口、舵轮方向、速度单位和急停链路。

开发路线

阶段 1:单车基本功能(当前)

  • 打通上层动作、底盘控制、Medulla 适配和 MCU 通信链路;
  • 完成单车启停、直线前进/后退、原地旋转和停止保护;
  • 补齐驱动器命令、轮速与舵角反馈、IO、电池、急停和报警处理;
  • 建立可重复的仿真/台架/实车验证方法。

阶段 2:增加停车作业功能

  • 在单车基础控制稳定后,逐项接入遥控、感知、钻车、夹抱和退出车辆等功能;
  • 每项功能分别完成参数定义、异常处理和实车验证,不直接启用旧的禁用代码。

阶段 3:优化跟踪方法

  • 根据单车测试数据改进路径跟踪、速度规划、转向控制和到位判定;
  • 完善曲线、倒车、低速近目标等工况,并补充可复现的回归测试;
  • 在安全性、稳定性和可诊断性达到要求后冻结单车接口。

阶段 4:考虑多车场景

  • 在单车接口稳定的前提下设计车辆身份、通信、心跳、超时和失联降级;
  • 再实现编队、同步动作、车间位姿校正和多车安全策略;
  • 多车预研参数需要重新评审,不以当前 #if false 代码作为完成依据。

参与开发

  1. 修改前确认所属阶段,当前提交优先服务于单车基本功能;
  2. 保持 ClumsyPilotMedullaAdapter 的职责边界,避免在上层动作中直接实现硬件协议;
  3. 新增硬件参数时注明单位、默认值、适用车型和安全范围;
  4. 提交前至少执行 dotnet build ParkingRobot.sln,并记录宿主测试或实车测试条件;
  5. 分支、代码评审和发布流程待项目团队补充。

许可证

仓库中暂未提供许可证文件。使用和分发范围请遵循公司内部规定。