import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire"; import { CommandResult } from "./VehicleCommon"; export declare const protobufPackage = ""; /** * A single position target for a vehicle in a guided / navigation mode. * Vehicle-agnostic: maps onto MAVLink SET_POSITION_TARGET_GLOBAL_INT for * the mavlink2keelson connector, but the same interface fits any vehicle * connector that accepts a WGS84 position target. */ export interface NavigationTarget { timestamp: Date | undefined; /** WGS84 latitude / longitude in degrees. */ latitude: number; longitude: number; /** * Altitude above mean sea level in meters. Omit for surface vehicles * that operate at sea level by definition. */ altitudeMslM?: number | undefined; /** * Desired cruise speed for the leg in meters per second. Omit to let * the vehicle use its configured default. */ groundSpeedMps?: number | undefined; /** * Target heading at arrival, degrees clockwise from true north. Omit * to let the vehicle pick its own arrival heading. */ yawDeg?: number | undefined; } /** * SET_POSITION_TARGET_GLOBAL_INT has no MAVLink-level acknowledgement * (https://mavlink.io/en/messages/common.html); ArduPilot silently * drops invalid targets (e.g. geofence violations) without a NAK or * STATUSTEXT. The connector therefore briefly polls * POSITION_TARGET_GLOBAL_INT after sending: if the autopilot's * commanded target matches what we sent within a small tolerance, * the result is ACCEPTED; otherwise NOT_OBSERVABLE (we cannot tell * "silently rejected" from "stream wasn't running"). When * `ground_speed_mps` is set the optional MAV_CMD_DO_CHANGE_SPEED * COMMAND_ACK is folded into `detail`. */ export interface NavigationTargetResponse { result: CommandResult; rawAutopilotResult: number; detail: string; } /** * Set the vehicle's cruise (leg) speed in meters per second. Applied to * the active waypoint / GUIDED-mode navigation. Maps onto MAVLink * MAV_CMD_DO_CHANGE_SPEED for the mavlink2keelson connector. */ export interface SetCruiseSpeedRequest { timestamp: Date | undefined; speedMps: number; } export interface SetCruiseSpeedResponse { result: CommandResult; rawAutopilotResult: number; detail: string; } export declare const NavigationTarget: MessageFns; export declare const NavigationTargetResponse: MessageFns; export declare const SetCruiseSpeedRequest: MessageFns; export declare const SetCruiseSpeedResponse: MessageFns; export interface VehicleNavigation { /** * Commission the vehicle to navigate to a single target. Caller is * responsible for ensuring the vehicle is in an appropriate mode first * (e.g. GUIDED for ArduPilot Rover). */ set_navigation_target(request: NavigationTarget): Promise; /** Change cruise (leg) speed for the active navigation. */ set_cruise_speed(request: SetCruiseSpeedRequest): Promise; } export declare const VehicleNavigationServiceName = "VehicleNavigation"; export declare class VehicleNavigationClientImpl implements VehicleNavigation { private readonly rpc; private readonly service; constructor(rpc: Rpc, opts?: { service?: string; }); set_navigation_target(request: NavigationTarget): Promise; set_cruise_speed(request: SetCruiseSpeedRequest): Promise; } interface Rpc { request(service: string, method: string, data: Uint8Array): Promise; } type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; export type DeepPartial = T extends Builtin ? T : T extends globalThis.Array ? globalThis.Array> : T extends ReadonlyArray ? ReadonlyArray> : T extends {} ? { [K in keyof T]?: DeepPartial; } : Partial; type KeysOfUnion = T extends T ? keyof T : never; export type Exact = P extends Builtin ? P : P & { [K in keyof P]: Exact; } & { [K in Exclude>]: never; }; export interface MessageFns { encode(message: T, writer?: BinaryWriter): BinaryWriter; decode(input: BinaryReader | Uint8Array, length?: number): T; fromJSON(object: any): T; toJSON(message: T): unknown; create, I>>(base?: I): T; fromPartial, I>>(object: I): T; } export {};