33 lines
1.3 KiB
Python
33 lines
1.3 KiB
Python
"""控制指令发送抽象(语义接口,对应 C++ ICommandTransport + 网关门面)。
|
|
|
|
C++ 版的 ICommandTransport 是字节流传输抽象(Send(bytes)),MAVLink 编码
|
|
在网关内完成;Python 版采用 MAVSDK 语义映射后,"传输"被抽象为设定点级
|
|
指令发送。本 Protocol 仅声明门面接口,供胶水层依赖注入与 mock 测试。
|
|
|
|
异常约定:实现不得向外抛传输层异常,失败一律返回 False(网关已捕获)。
|
|
"""
|
|
|
|
from typing import Optional, Protocol, runtime_checkable
|
|
|
|
from .types import ControlOutput
|
|
|
|
|
|
@runtime_checkable
|
|
class CommandSender(Protocol):
|
|
async def start(self) -> bool:
|
|
"""进入 offboard 模式。失败返回 False。"""
|
|
...
|
|
|
|
async def send_velocity_heading(self, output: ControlOutput,
|
|
time_boot_ms: Optional[int] = None) -> bool:
|
|
"""发送速度+航向意图(ControlMode.VELOCITY_HEADING)。失败返回 False。"""
|
|
...
|
|
|
|
async def send_brake_hover(self, time_boot_ms: Optional[int] = None) -> bool:
|
|
"""发送零速刹车/悬停意图(ControlMode.BRAKE_HOVER)。失败返回 False。"""
|
|
...
|
|
|
|
async def stop(self) -> None:
|
|
"""退出 offboard 模式(结束时调用)。"""
|
|
...
|