PX4 Cloud Integration

PX4 is a first-class UTMOS vendor adapter, peer to DJI. PX4 is not a DJI compatibility layer and is not written into the DJI command catalog.
Real PX4 downlink remains disabled by default. The PX4 edge agent must keep PX4_COMMAND_MODE=disabled unless guarded downlink is explicitly authorized and safety-reviewed.

Command Direction

command.accepted only means the cloud authenticated, authorized, idempotency-checked, and persisted the command. It does not mean PX4 executed it.

PX4 Command Coverage

Command familyCountResponse modelPage
Generated MAV_CMD flow178COMMAND_ACKPX4 Command Catalog
Parameter read1PARAM_VALUE / PARAM_ERRORpx4.parameter.read
Named parameter set1873PARAM_VALUE / PARAM_ERRORParameter set catalog
Non-exposed MAV_CMD_DO_SET_PARAMETER1Not applicableReplaced by named parameter set commands

command.accepted

Subject:
tenant.<tenant_id>.command.accepted
Payload example:
{
  "event_id": "uuid",
  "event_type": "command.accepted",
  "command_id": "uuid",
  "tenant_id": "tenant_local",
  "client_id": "client_001",
  "vendor": "px4",
  "device_id": "px4-real-1",
  "command_type": "nav_takeoff",
  "timeout_seconds": 30,
  "accepted_at": "2026-06-08T10:15:30Z",
  "request_id": "req_001",
  "payload": {
    "latitude": 473566000,
    "longitude": 85432100,
    "altitude": 30
  }
}

command.completed

Subject:
tenant.<tenant_id>.command.completed
PX4 statusadapter_statuspublic_status
rejected_by_agentREJECTED_BY_ADAPTERFAILED
sent_to_px4SENT_TO_DEVICEDELIVERED
ack_acceptedSENT_TO_DEVICESUCCEEDED
ack_temporarily_rejectedSENT_TO_DEVICEFAILED
ack_deniedSENT_TO_DEVICEFAILED
ack_unsupportedSENT_TO_DEVICEUNSUPPORTED
ack_timeoutRESPONSE_TIMEOUTTIMED_OUT
parameter_value_confirmedSENT_TO_DEVICESUCCEEDED
parameter_errorSENT_TO_DEVICEFAILED
parameter_response_mismatchRECEIVEDUNKNOWN
parameter_timeoutRESPONSE_TIMEOUTTIMED_OUT
transport_failedTRANSPORT_FAILEDFAILED
UTMOS stores the raw adapter result and appends command lifecycle events. Query APIs return the aggregate status, so integrators do not need to consume NATS directly. PX4 terminal events also carry display-ready response fields:
FieldDescription
human_summaryHuman-readable result, for example PX4 已确认 COM_RC_IN_MODE 设置为 MAVLink only。
hardware_responseTyped PX4 hardware response payload, for example COMMAND_ACK, PARAM_VALUE, PARAM_ERROR, MISSION_ACK, FILE_TRANSFER_PROTOCOL, or TIMESYNC.
source_evidenceLocal PX4/MAVLink source evidence defining the response semantics.
UTMOS persists these fields on the adapter result and returns them from Open API and Console command records. Cloud consumers do not need to parse COMMAND_ACK.result, PARAM_VALUE.param_type, PARAM_ERROR.error, or delegated protocol ACK/NACK payloads directly.

command.problem

Subject:
tenant.<tenant_id>.command.problem
The agent publishes this only for command boundary diagnostics that cannot safely become a command-scoped command.completed event, such as malformed accepted-command JSON. UTMOS projects the raw problem payload into the PX4 device recent-event view so Console operators can inspect the problem_code, problem, detail, and source_subject. The PX4 edge agent publishes:
iot.uplink.px4.telemetry.observed
iot.uplink.px4.state.vehicle
DataPolicy
High-rate telemetryDo not write to PostgreSQL primary fact tables
Latest stateStore as reconstructable current-state projection
Historical analysisReserved for ClickHouse telemetry-history feature
Runtime metricsExposed through Prometheus metrics