Files
ParkingRobot/docs/architecture.md
T

7.1 KiB
Raw Blame History

系统架构

解决方案与依赖边界

ParkingRobot.sln 包含三个项目:

项目 目标框架 职责
CommonUsage-MultiVehicleSync/commonusage/CommonUsage.csproj netstandard2.0 通用底盘、轮子模型、SendMotion/SendXYThSpeed和四轮几何解算
MedullaAdapter/MedullaAdapter.csproj net8.0 Medulla M层插件、MCU/CAN/串口/IO、遥控、报警和硬件反馈
MultiWheelC/MultiWheelC.csproj netstandard2.0 Clumsy C层插件、动作、控制器、轨迹、状态估计、实验记录

Shared/ 没有独立项目:MultiWheelC 链接全部 Shared/**/*.csMedullaAdapter 只链接其需要的模型、数学、校验和底盘适配文件。CommonUsage 是独立底盘库,不反向依赖 Shared、M层或C层。来源:三个 .csproj

Clumsy宿主
  └─ MultiWheelC
      ├─ Trajectory / StateEstimation / Control / Movements
      ├─ Shared
      └─ CommonUsage.dll

Medulla宿主
  └─ MedullaAdapter
      ├─ Shared(链接的必要文件)
      ├─ CommonUsage.dll
      └─ mcu_serial_bridge.dll → MCU → CAN / Serial / IO

目录职责

路径 当前职责
MultiWheelC/Configuration/ 停车控制、状态估计、原地自转和完成条件的车辆级运行参数
MultiWheelC/Trajectory/ 弧长参数化轨迹、插值、投影和进度窗口;LegacyTrackAdapter.cs 目前仅占位
MultiWheelC/StateEstimation/ Detour位姿校验/差分速度、轮组反馈速度组合与低通滤波
MultiWheelC/Control/Abstractions/ 横向、纵向控制器接口与周期输入/输出模型
MultiWheelC/Control/Lateral/ 当前默认 StanleyLateralController
MultiWheelC/Control/Longitudinal/ 当前默认 PidLongitudinalController
MultiWheelC/Control/Allocation/ 横纵结果组合、GCP限幅及GCP与刚体速度的转换
MultiWheelC/Control/Execution/ 单周期编排、终点策略、命令执行和耗时诊断
MultiWheelC/Movements/ 舵轮准备、轨迹跟踪、原地自转和组合动作计划
MultiWheelC/Experiments/ Clumsy宿主人工测试、测试轨迹工厂和CSV记录
MultiWheelC/Old/ 保留的旧实现;不能仅因仍参与编译就视为新版流程依赖
Shared/ M/C共享的SI数据模型、坐标变换、数值校验和底盘适配
MedullaAdapter/ 车型定义、LadderLogic、MCU桥、CAN/串口、遥控、诊断
CommonUsage-MultiVehicleSync/commonusage/Chassis/ 实际轮子模型、GCP/ICR求解、舵角/轮速分配和机械约束
data_process/ 离线实验数据处理;日常代码任务不扫描其中的实验日志
参考文档/ 参数样例和历史设计资料;不等同于运行时配置

入口与宿主生命周期

C层

  • PilotDefinition : MultiWheelPilotDefinition<PilotConfig, PilotDefinition> 是Clumsy车型定义和M/C IO边界。
  • PilotDefinition.Conf 是动作读取运行配置的统一入口;PilotConfig 字段提供元数据和默认值。
  • [MovementTest] 类型由宿主发现并执行,例如 NewControllerStraight4mTestNewControllerReverseStraight4mTestNewControllerCrab45Straight4mTestTestRotateAngleCompositeStopTurnGoTest
  • MovementDefinition.Get()IEnumerable<bool> 形式协作执行:true 表示继续,结束动作时返回/产生 false 或退出枚举。具体宿主调度细节来自外部程序集,仓库内不可完全确认。

M层

  • DiverCartDefinition : MultiWheelCartDefinition 是Medulla车型定义。
  • CommunicationInit() 打开并配置MCU桥。
  • [UseLadderLogic] 注册 AlarmRoutine50ms)、MotorRoutine50ms)和 MCURoutine(20ms);这些是声明的扫描间隔,不能直接等同于实测稳定周期。
  • [UseManualController] 注册 Remote

新版轨迹跟踪调用链

MovementTest / MotionPlanExecutor
  → TrajectoryTrackingMovement.Get()
  → PrepareWheelsForward(DirectionRadians=β)
  → MultiWheelChassisAdapter.ActivateMotionFrame(β)
  → ParkingVehicleStateProviderFactory.Create()
  → ParkingGeometricController.Start()/ExecuteCycle()
      → IVehicleStateProvider.TryGetState()
      → TrajectoryProjector.Project()
      → ILateralController.Compute()
      → ILongitudinalController.ComputeSpeedMetersPerSecond()
      → GcpCommandAllocator.Allocate()
      → GcpCommandExecutor.Execute()
      → GcpKinematics.ToBodyTwist()
      → MultiWheelChassisAdapter.SendBodyTwist()
      → MultiWheelChassis.SendMotion()
      → 四个真实舵轮角度和速度

TrajectoryTrackingMovement 默认从 PilotDefinition.Conf 读取车辆级参数,同时保留少量动作级覆盖字段;横向控制器可通过 LateralControllerFactory 替换,纵向控制器当前固定创建为 PidLongitudinalController

状态数据流

DetourInterface.getCartLocation()
  → DetourVehicleStateProvider
      ├─ 位姿单位转换、重复帧处理、跳变/预测残差校验
      └─ VelocityEstimator2DDetour差分Vx/Vy/Omega

MultiWheelChassis.GetCarSpeed(true)
  → WheelFeedbackVehicleStateProvider
      ├─ Vx、Vy分别使用同一时间常数低通滤波
      ├─ 覆盖Detour线速度
      └─ 保留Detour位姿和Omega

  → VehicleState(世界位姿、世界Twist、车体Twist
  → ParkingGeometricController

运动坐标系与四轮解算数据流

MultiWheelChassisAdapter 对外只接收真实车体系 Twist2D。滚动动作开始前先固定运动方向β:

  1. ActivateMotionFrame(β) 调用 MultiWheelChassis.SetOriginBias(0,0,-β)
  2. 车体线速度通过 R(-β) 表达到运动坐标系。
  3. 运动系中以 ±ControlPointRadius 作为虚拟前后GCP,计算GCP方向。
  4. MultiWheelChassis.SendMotion 由两个GCP方向求瞬时旋转中心ICR。
  5. 每个真实轮子的 PhysicalPosition 被旋转成运动系 Position,再由ICR分别求切线角和速度半径比例。
  6. sTh - sw.ZeroDirection 把运动系方向转成真实舵轮机械命令;距离和速度大小不因坐标旋转改变。

关键位置:Shared/Chassis/MultiWheelChassisAdapter.csMultiWheelChassis.cs::SetOriginBiasSendMotionCalculateAxes

动作组织

  • PrepareWheelsForward:停车、下发任意固定方向β并等待稳定;名称保留“Forward”,但功能已支持非零方向。
  • TrajectoryTrackingMovement:准备运动系、创建控制器、周期执行、失败停车,可选完成后回正。
  • MultiWheelRotateInPlace:准备自转舵角、交接到XYTh解算、世界航向PID、完成后回正。
  • MotionPlanExecutor:开始运动前预检全部段,顺序执行 TrackMotionPlanSegmentRotateInPlaceMotionPlanSegment,共享状态源。

构建与打包

build-and-package.ps1 顺序构建 CommonUsage、M层和C层,将新 CommonUsage.dll 复制到 ref/,最后生成 output/Moutput/C。两个部署包必须使用同一份 CommonUsage.dll。构建产物目录不作为知识来源,也不直接编辑。