Cartesian and geodetic (GPS) coordinate frames in the shared navigation MQTT contract, and how drivers declare which they support.
Incremental convention. Cartesian payloads remain fully compatible. The
geodetic form is implemented by the DJI Wayline driver; other drivers opt in
by declaring their navigation capabilities.
The command topic, action_id, commands (goto, path, stop, pause, and
resume), and status lifecycle are shared. What differs by asset is the
coordinate representation:
Ground robots normally navigate in a Cartesian map frame, in metres.
GPS-native vehicles, such as a DJI aircraft executing a Wayline mission,
navigate using latitude, longitude, and altitude.
The coordinate representation must therefore be explicit in the command
payload. A driver must never infer it from the robot model or from the numeric
values.
New navigation payloads include a coordinate_frame object with a required
kind. The coordinate values themselves do not contain unit suffixes: their
units are declared once by the frame.
For geodetic, latitude and longitude use standard GPS/WGS84 decimal degrees.
For the first DJI implementation, altitude is measured relative to the takeoff
point. orientation.heading is clockwise from true north (0 = north,
90 = east). yaw remains accepted as a legacy input alias during migration,
but the backend publishes the canonical orientation object.
A DJI driver expands a geodetic goto into an internal two-point Wayline: its
current GPS position followed by the requested target. It must reject the
command when its current GPS position is unavailable.
Existing Cartesian clients and drivers remain compatible. During migration, a
payload without coordinate_frame is treated as the legacy Cartesian
representation and follows the existing frame-transform behaviour.Drivers declare the coordinate kinds they support. A driver must reject a
command whose coordinate_frame.kind it does not support and publish a
failed response on navigate/status using the received action_id.A geodetic payload must never be passed through a Cartesian navigation-anchor
transform. Conversely, a Cartesian payload must not be treated as GPS merely
because it targets a GPS-capable vehicle.
capabilities.navigation.orientation tells clients which target-orientation
members a hardware profile can actually command, and which are owned by the
provider. For the DJI Mini 4 Pro Wayline profile:
This is a static hardware profile, not an availability result. The separate
Wayline probe reports whether the connected aircraft/firmware is currently
READY, NOT_SUPPORTED, or INCONCLUSIVE. A UI should expose only the
commandable fields; the driver remains the final validation boundary.
Implementing this convention requires coordinated changes to the backend
navigation schema and service, driver capability metadata, and each supporting
driver. Workflow authoring is intentionally separate: a future workflow node
can select a coordinate representation based on the target driver’s declared
capabilities while continuing to use the same navigation topic and action
lifecycle.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Cyberwave Docs","colors":{"primary":"#00b5dd","light":"#33cfef","dark":"#0091b1"},"logo":{"light":"https://mintcdn.com/cyberwave/gDyqTt86aQ59dugY/images/cyberwave-logo-black.svg?fit=max\u0026auto=format\u0026n=gDyqTt86aQ59dugY\u0026q=85\u0026s=7af7130ac16b7bc13166a3d9f431cdf5","dark":"https://mintcdn.com/cyberwave/gDyqTt86aQ59dugY/images/cyberwave-logo-white.svg?fit=max\u0026auto=format\u0026n=gDyqTt86aQ59dugY\u0026q=85\u0026s=7befe341f16cadf8b7a4acb4ba0d294a"},"favicon":"https://mintcdn.com/cyberwave/gDyqTt86aQ59dugY/favicon.svg?fit=max\u0026auto=format\u0026n=gDyqTt86aQ59dugY\u0026q=85\u0026s=20eaaf30d7f090c5eb2628572ee4eb20","navbar":{"links":[{"href":"https://cyberwave.com/blog","label":"Blog"},{"href":"https://cyberwave.com/contact-us","label":"Contact"},{"href":"https://status.cyberwave.com","label":"Status"}]},"footer":{"socials":{"x":"https://x.com/cyberwave_com","linkedin":"https://www.linkedin.com/company/cyberwave-com","youtube":"https://www.youtube.com/channel/UCmw6EQ1nJj7sqjkITm2wjCw"},"links":[{"header":"Resources","items":[{"label":"Status","href":"https://status.cyberwave.com"},{"label":"Changelog","href":"https://docs.cyberwave.com/changelog"},{"label":"Discord","href":"https://discord.gg/dfGhNrawyF"},{"label":"GitHub","href":"https://github.com/cyberwave-os"}]}]},"integrations":{"posthog":{"apiKey":"phc_JswM4a2VwYGkjsKr7xVYwdiX6BDSDKDXc25fkvApnhZ","apiHost":"https://eu.i.posthog.com"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"cyberwave","hasAudioNarration":false,"actualSubdomain":"cyberwave","customDomains":["docs.cyberwave.com"],"gitSource":{"type":"github","owner":"cyberwave-os","repo":"docs-mintlify","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae050f854afc9d90cc53677","collectionId":"22afd2b6-8e15-49ed-a5ef-3c6e267cd079","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae050f854afc9d90cc53677"},"entitlements":{},"buildId":"6ae050f854afc9d90cc53677","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"API","count":241},{"language":"default","tag":"APIs","count":241},{"language":"default","tag":"REST (generated)","count":235},{"language":"default","tag":"Models","count":229},{"language":"default","tag":"Docs","count":114},{"language":"default","tag":"Reference","count":56},{"language":"default","tag":"Connect hardware","count":28},{"language":"default","tag":"Simulate \u0026 test","count":27},{"language":"default","tag":"Build with AI","count":26},{"language":"default","tag":"Workflow nodes","count":26}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#sidebar a[href=\"/sdks/cpp-sdk\"]{pointer-events:none;opacity:.5;cursor:default}"},{"filePath":"images/src/_base.css","content":":root{--cyan:#00b5dd;--cyan-2:#33cfef;--cyan-3:#5fdaf3;--ink:#04212b;--text:#e6f4f8;--muted:#9ab4bd;--dim:#6f8b96;--line:#24363e;--panel:#101c22;--card:#15252d;--card-line:#2c434d}*{box-sizing:border-box;margin:0}body,html{background:0 0}body{font-family:\"Inter\",ui-sans-serif,system-ui,sans-serif;color:var(--text);-webkit-font-smoothing:antialiased}.label{font-size:12px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--dim)}"}],"page":{"pagePath":"feature-reference/edge/drivers/navigation-coordinate-convention","slug":"/feature-reference/edge/drivers/navigation-coordinate-convention","pageMetadata":{"title":"Navigation coordinate convention","description":"Cartesian and geodetic (GPS) coordinate frames in the shared navigation MQTT contract, and how drivers declare which they support.","icon":"compass","href":"/feature-reference/edge/drivers/navigation-coordinate-convention"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Cartesian and geodetic (GPS) coordinate frames in the shared navigation MQTT contract, and how drivers declare which they support.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Incremental convention.`}),` Cartesian payloads remain fully compatible. The\ngeodetic form is implemented by the DJI Wayline driver; other drivers opt in\nby declaring their navigation capabilities.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`goal`,children:`Goal`}),`\n`,_jsx(_components.p,{children:`Cyberwave uses one navigation lifecycle for every autonomous asset:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`cyberwave/twin/{twin_uuid}/navigate/command`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`cyberwave/twin/{twin_uuid}/navigate/status`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`The command topic, `,_jsx(_components.code,{children:`action_id`}),`, commands (`,_jsx(_components.code,{children:`goto`}),`, `,_jsx(_components.code,{children:`path`}),`, `,_jsx(_components.code,{children:`stop`}),`, `,_jsx(_components.code,{children:`pause`}),`, and\n`,_jsx(_components.code,{children:`resume`}),`), and status lifecycle are shared. What differs by asset is the\ncoordinate representation:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Ground robots normally navigate in a Cartesian `,_jsx(_components.code,{children:`map`}),` frame, in metres.`]}),`\n`,_jsx(_components.li,{children:`GPS-native vehicles, such as a DJI aircraft executing a Wayline mission,\nnavigate using latitude, longitude, and altitude.`}),`\n`]}),`\n`,_jsx(_components.p,{children:`The coordinate representation must therefore be explicit in the command\npayload. A driver must never infer it from the robot model or from the numeric\nvalues.`}),`\n`,_jsxs(Heading,{level:`2`,id:`proposed-coordinate_frame`,children:[`Proposed `,_jsx(_components.code,{children:`coordinate_frame`})]}),`\n`,_jsxs(_components.p,{children:[`New navigation payloads include a `,_jsx(_components.code,{children:`coordinate_frame`}),` object with a required\n`,_jsx(_components.code,{children:`kind`}),`. The coordinate values themselves do not contain unit suffixes: their\nunits are declared once by the frame.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:_jsx(_components.code,{children:`kind`})}),_jsx(_components.th,{children:`Position field`}),_jsx(_components.th,{children:`Required frame fields`}),_jsx(_components.th,{children:`Intended assets`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`cartesian`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`position: { x, y, z }`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`frame_id`}),`, `,_jsx(_components.code,{children:`linear_units: \"m\"`})]}),_jsx(_components.td,{children:`Nav2 / ground robots`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`geodetic`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`geodetic_position: { latitude, longitude, altitude }`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`horizontal_units: \"deg\"`}),`, `,_jsx(_components.code,{children:`vertical_units: \"m\"`}),`, `,_jsx(_components.code,{children:`altitude_reference`})]}),_jsx(_components.td,{children:`GPS mission vehicles`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`coordinate_frame`}),` is the single source of truth for units. Do not mix it with\nfield names such as `,_jsx(_components.code,{children:`latitude_deg`}),` or `,_jsx(_components.code,{children:`altitude_m`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`cartesian-waypoint-example`,children:`Cartesian waypoint example`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`16`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`16`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"command\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"path\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"action_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"navigation-action-uuid\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"coordinate_frame\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"kind\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"cartesian\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"frame_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"map\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"linear_units\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"m\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"yaw_units\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"deg\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"waypoints\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"position\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"x\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2.0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"y\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`4.5`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"z\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0.0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"yaw\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`90.0`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`frame_id`}),` identifies the local coordinate frame. The existing navigation\nanchor transform applies only to this representation.`]}),`\n`,_jsx(Heading,{level:`3`,id:`geodetic-waypoint-example`,children:`Geodetic waypoint example`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`22`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`22`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"command\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"path\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"action_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"navigation-action-uuid\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"coordinate_frame\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"kind\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"geodetic\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"horizontal_units\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"deg\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"vertical_units\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"m\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"altitude_reference\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"relative_to_takeoff\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"yaw_units\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"deg\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"yaw_reference\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"true_north\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"waypoints\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"geodetic_position\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"latitude\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`47.3769`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"longitude\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`8.5417`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"altitude\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`30.0`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"orientation\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"heading\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`90.0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`For `,_jsx(_components.code,{children:`geodetic`}),`, latitude and longitude use standard GPS/WGS84 decimal degrees.\nFor the first DJI implementation, altitude is measured relative to the takeoff\npoint. `,_jsx(_components.code,{children:`orientation.heading`}),` is clockwise from true north (`,_jsx(_components.code,{children:`0`}),` = north,\n`,_jsx(_components.code,{children:`90`}),` = east). `,_jsx(_components.code,{children:`yaw`}),` remains accepted as a legacy input alias during migration,\nbut the backend publishes the canonical `,_jsx(_components.code,{children:`orientation`}),` object.`]}),`\n`,_jsxs(Heading,{level:`3`,id:`single-target-goto`,children:[`Single-target `,_jsx(_components.code,{children:`goto`})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`goto`}),` always means “reach one target”. Cartesian drivers receive the target\nin `,_jsx(_components.code,{children:`position`}),`; geodetic drivers receive it in `,_jsx(_components.code,{children:`geodetic_position`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`18`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`18`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"command\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"goto\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"action_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"navigation-action-uuid\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"coordinate_frame\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"kind\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"geodetic\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"horizontal_units\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"deg\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"vertical_units\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"m\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"altitude_reference\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"relative_to_takeoff\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"yaw_units\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"deg\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"yaw_reference\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"true_north\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"geodetic_position\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"latitude\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`47.3769`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"longitude\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`8.5417`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"altitude\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`30.0`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"orientation\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"heading\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`90.0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`A DJI driver expands a geodetic `,_jsx(_components.code,{children:`goto`}),` into an internal two-point Wayline: its\ncurrent GPS position followed by the requested target. It must reject the\ncommand when its current GPS position is unavailable.`]}),`\n`,_jsx(Heading,{level:`2`,id:`compatibility-and-driver-behaviour`,children:`Compatibility and driver behaviour`}),`\n`,_jsxs(_components.p,{children:[`Existing Cartesian clients and drivers remain compatible. During migration, a\npayload without `,_jsx(_components.code,{children:`coordinate_frame`}),` is treated as the legacy Cartesian\nrepresentation and follows the existing frame-transform behaviour.`]}),`\n`,_jsxs(_components.p,{children:[`Drivers declare the coordinate kinds they support. A driver must reject a\ncommand whose `,_jsx(_components.code,{children:`coordinate_frame.kind`}),` it does not support and publish a\n`,_jsx(_components.code,{children:`failed`}),` response on `,_jsx(_components.code,{children:`navigate/status`}),` using the received `,_jsx(_components.code,{children:`action_id`}),`.`]}),`\n`,_jsx(_components.p,{children:`A geodetic payload must never be passed through a Cartesian navigation-anchor\ntransform. Conversely, a Cartesian payload must not be treated as GPS merely\nbecause it targets a GPS-capable vehicle.`}),`\n`,_jsx(Heading,{level:`2`,id:`orientation-capabilities`,children:`Orientation capabilities`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`capabilities.navigation.orientation`}),` tells clients which target-orientation\nmembers a hardware profile can actually command, and which are owned by the\nprovider. For the DJI Mini 4 Pro Wayline profile:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"coordinate_frames\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"geodetic\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"orientation\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"commandable\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"heading\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"provider_managed\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"roll\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"pitch\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"heading_reference\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"true_north\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"requires_runtime_wayline_probe\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`This is a static hardware profile, not an availability result. The separate\nWayline probe reports whether the connected aircraft/firmware is currently\n`,_jsx(_components.code,{children:`READY`}),`, `,_jsx(_components.code,{children:`NOT_SUPPORTED`}),`, or `,_jsx(_components.code,{children:`INCONCLUSIVE`}),`. A UI should expose only the\ncommandable fields; the driver remains the final validation boundary.`]}),`\n`,_jsx(Heading,{level:`2`,id:`implementation-scope`,children:`Implementation scope`}),`\n`,_jsx(_components.p,{children:`Implementing this convention requires coordinated changes to the backend\nnavigation schema and service, driver capability metadata, and each supporting\ndriver. Workflow authoring is intentionally separate: a future workflow node\ncan select a coordinate representation based on the target driver’s declared\ncapabilities while continuing to use the same navigation topic and action\nlifecycle.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Navigation coordinate convention","description":"Cartesian and geodetic (GPS) coordinate frames in the shared navigation MQTT contract, and how drivers declare which they support.","icon":"compass","href":"/feature-reference/edge/drivers/navigation-coordinate-convention"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Goal","slug":"goal","depth":2,"children":[]},{"title":"Proposed coordinate_frame","slug":"proposed-coordinate_frame","depth":2,"children":[{"title":"Cartesian waypoint example","slug":"cartesian-waypoint-example","depth":3,"children":[]},{"title":"Geodetic waypoint example","slug":"geodetic-waypoint-example","depth":3,"children":[]},{"title":"Single-target goto","slug":"single-target-goto","depth":3,"children":[]}]},{"title":"Compatibility and driver behaviour","slug":"compatibility-and-driver-behaviour","depth":2,"children":[]},{"title":"Orientation capabilities","slug":"orientation-capabilities","depth":2,"children":[]},{"title":"Implementation scope","slug":"implementation-scope","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"cyberwave","siteName":"Cyberwave Docs","title":"Navigation coordinate convention - Cyberwave Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-28T09:00:07.091Z","originalFileLocation":"feature-reference/edge/drivers/navigation-coordinate-convention.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Cartesian and geodetic (GPS) coordinate frames in the shared navigation MQTT contract, and how drivers declare which they support.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Cyberwave Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Navigation coordinate convention - Cyberwave Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Cartesian and geodetic (GPS) coordinate frames in the shared navigation MQTT contract, and how drivers declare which they support.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Cyberwave Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.cyberwave.com/feature-reference/edge/drivers/navigation-coordinate-convention\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://cyberwave.mintlify.app/_mintlify/api/og/v2?division=Driver+SDK\u0026amp;title=Navigation+coordinate+convention\u0026amp;description=Cartesian+and+geodetic+%28GPS%29+coordinate+frames+in+the+shared+navigation+MQTT+contract%2C+and+how+drivers+declare+which+they+support.\u0026amp;theme=12d727da36e7435c02131a6b\u0026amp;signature=0532424e8a4349bd1507f90d237276a3df47e21360a4f758307e3900fbe5ec5e\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Navigation coordinate convention - Cyberwave Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Cartesian and geodetic (GPS) coordinate frames in the shared navigation MQTT contract, and how drivers declare which they support.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://cyberwave.mintlify.app/_mintlify/api/og/v2?division=Driver+SDK\u0026amp;title=Navigation+coordinate+convention\u0026amp;description=Cartesian+and+geodetic+%28GPS%29+coordinate+frames+in+the+shared+navigation+MQTT+contract%2C+and+how+drivers+declare+which+they+support.\u0026amp;theme=12d727da36e7435c02131a6b\u0026amp;signature=0532424e8a4349bd1507f90d237276a3df47e21360a4f758307e3900fbe5ec5e\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Cyberwave Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#00b5dd\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.cyberwave.com/feature-reference/edge/drivers/navigation-coordinate-convention\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/feature-reference/edge/drivers/navigation-coordinate-convention.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.cyberwave.com/#organization\",\"name\":\"Cyberwave Docs\",\"url\":\"https://docs.cyberwave.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/cyberwave/gDyqTt86aQ59dugY/images/cyberwave-logo-black.svg?fit=max\u0026auto=format\u0026n=gDyqTt86aQ59dugY\u0026q=85\u0026s=7af7130ac16b7bc13166a3d9f431cdf5\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.cyberwave.com#website\",\"name\":\"Cyberwave Docs\",\"url\":\"https://docs.cyberwave.com\",\"publisher\":{\"@id\":\"https://docs.cyberwave.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.cyberwave.com/feature-reference/edge/drivers/navigation-coordinate-convention#webpage\",\"url\":\"https://docs.cyberwave.com/feature-reference/edge/drivers/navigation-coordinate-convention\",\"name\":\"Navigation coordinate convention\",\"description\":\"Cartesian and geodetic (GPS) coordinate frames in the shared navigation MQTT contract, and how drivers declare which they support.\",\"dateModified\":\"2026-09-28T09:00:07.091Z\",\"isPartOf\":{\"@id\":\"https://docs.cyberwave.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.cyberwave.com/feature-reference/edge/drivers/navigation-coordinate-convention#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.cyberwave.com/feature-reference/edge/drivers/navigation-coordinate-convention#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Driver SDK\",\"item\":\"https://docs.cyberwave.com/feature-reference/edge/drivers/base-driver-class\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Navigation coordinate convention\",\"item\":\"https://docs.cyberwave.com/feature-reference/edge/drivers/navigation-coordinate-convention\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.cyberwave.com/feature-reference/edge/drivers/navigation-coordinate-convention#article\",\"headline\":\"Navigation coordinate convention\",\"name\":\"Navigation coordinate convention\",\"description\":\"Cartesian and geodetic (GPS) coordinate frames in the shared navigation MQTT contract, and how drivers declare which they support.\",\"url\":\"https://docs.cyberwave.com/feature-reference/edge/drivers/navigation-coordinate-convention\",\"mainEntityOfPage\":{\"@id\":\"https://docs.cyberwave.com/feature-reference/edge/drivers/navigation-coordinate-convention#webpage\"},\"dateModified\":\"2026-09-28T09:00:07.091Z\",\"publisher\":{\"@id\":\"https://docs.cyberwave.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.cyberwave.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Cyberwave Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Cyberwave Docs","nav":{"global":null,"tabs":[{"tab":"Docs","pages":[{"title":"Docs","href":"/overview"}]},{"tab":"Tutorials","pages":[{"title":"Tutorials","href":"/tutorials"}]},{"tab":"Reference","groups":[{"group":"SDKs \u0026 CLI","icon":"code","pages":[{"title":"Python SDK","icon":"python","href":"/overview/tools/python-sdk"},{"title":"cw.models (Python)","icon":"brain","href":"/overview/tools/models/overview"},{"title":"CLI reference","sidebarTitle":"CLI","icon":"terminal","href":"/overview/tools/cli"},{"title":"C++ SDK","icon":"https://mintlify.s3.us-west-1.amazonaws.com/cyberwave/images/cplusplus.svg","tag":"Coming Soon","href":"/overview/tools/cpp-sdk"}]},{"group":"MCP \u0026 agent skill","icon":"plug","pages":[{"title":"MCP server","icon":"plug","href":"/overview/tools/mcp-server"},{"title":"Cyberwave agent skill","icon":"sparkles","href":"/overview/tools/claude-skill"}]},{"group":"Workflow nodes","icon":"diagram-project","pages":[{"title":"Workflow nodes","icon":"shapes","href":"/overview/features/workflow-nodes"},{"group":"Triggers \u0026 sources","icon":"bolt","pages":[{"title":"MQTT trigger and Send MQTT","icon":"bolt","href":"/feature-reference/workflows/mqtt-trigger"},{"title":"Audio Track","icon":"microphone","href":"/feature-reference/workflows/audio-track/overview"},{"title":"Twin node","icon":"clone","href":"/feature-reference/workflows/twin"},{"title":"Get Pose node","icon":"location-crosshairs","href":"/feature-reference/workflows/get-pose"}]},{"group":"AI \u0026 perception","icon":"eye","pages":[{"title":"Audio Assistant","icon":"volume-high","href":"/feature-reference/workflows/audio-assistant/overview"},{"title":"Voice Assistant (VA)","icon":"microphone","href":"/feature-reference/workflows/audio-assistant/voice-assistant"},{"title":"Sound Security Guard (SSG)","icon":"siren-on","href":"/feature-reference/workflows/audio-assistant/sound-security-guard"},{"title":"Audio assistant technical reference","icon":"book","href":"/feature-reference/workflows/audio-assistant/technical-reference"},{"title":"Wake Word Engine","icon":"microphone","href":"/feature-reference/workflows/wake-word-engine/overview"},{"title":"Barcode Reader node","icon":"barcode","href":"/feature-reference/workflows/barcode-reader"},{"title":"Object Pose node","icon":"cube","href":"/feature-reference/workflows/object-pose"}]},{"group":"Transform \u0026 logic","icon":"shuffle","pages":[{"title":"Fuzzy Matcher node","icon":"spell-check","href":"/feature-reference/workflows/fuzzy-matcher"},{"title":"Anonymize node","icon":"user-secret","href":"/feature-reference/workflows/anonymize-image"},{"title":"Annotate \u0026 anonymize nodes","icon":"user-shield","href":"/feature-reference/workflows/workers/filter-frame"},{"title":"Create Attachment","icon":"paperclip","href":"/feature-reference/workflows/create-attachment"},{"title":"Timed Condition node","icon":"hourglass-half","href":"/feature-reference/workflows/timed-condition"},{"title":"Spatial Filter node","icon":"draw-polygon","href":"/feature-reference/workflows/spatial-filter"},{"title":"Loop node","icon":"repeat","href":"/feature-reference/workflows/loop"},{"title":"Timer node","icon":"stopwatch","href":"/feature-reference/workflows/timer"}]},{"group":"Actuation","icon":"hand","pages":[{"title":"Virtual Controller node","icon":"gamepad","href":"/feature-reference/workflows/virtual-controller"},{"title":"Send Controller Command node","icon":"paper-plane","href":"/feature-reference/workflows/send-controller-command"},{"title":"Send Pose node","icon":"person-walking-arrow-right","href":"/feature-reference/workflows/send-pose"},{"title":"Send Depth node","icon":"ruler-vertical","href":"/feature-reference/workflows/send-depth"},{"title":"Recorder node","icon":"circle-dot","href":"/feature-reference/workflows/recorder"},{"title":"Online Controller Lifecycle node","icon":"arrows-spin","href":"/feature-reference/workflows/online-controller-lifecycle"}]}]},{"group":"Driver SDK","icon":"gears","pages":[{"title":"BaseDriver (Python SDK)","icon":"cubes","href":"/feature-reference/edge/drivers/base-driver-class"},{"title":"BaseROS2Driver (ROS 2)","icon":"cubes-stacked","href":"/feature-reference/edge/drivers/ros2-base-driver"},{"title":"Driver mixins and capabilities","icon":"puzzle-piece","href":"/feature-reference/edge/drivers/driver-mixins"},{"title":"Joint motion shaping","icon":"wave-square","href":"/feature-reference/edge/drivers/joint-motion-shaping"},{"title":"Data wire format","icon":"file-code","href":"/feature-reference/edge/drivers/data-wire-format"},{"title":"Data fusion primitives","icon":"object-ungroup","href":"/feature-reference/edge/drivers/data-fusion"},{"title":"Synchronized multi-channel hooks","description":"Approximate time synchronizer that fires a callback when samples from all listed channels arrive within a configurable tolerance.","icon":"clock","href":"/feature-reference/edge/drivers/data-synchronized-hooks"},{"title":"Navigation coordinate convention","icon":"compass","href":"/feature-reference/edge/drivers/navigation-coordinate-convention"}]},{"group":"Edge internals","icon":"microchip","pages":[{"title":"Edge Bench","sidebarTitle":"Benchmark","description":"Measure Zenoh SDK hot-path performance on an edge device and compare against a per-device baseline.","icon":"gauge-high","href":"/feature-reference/workflows/workers/bench"},{"title":"Model cache","icon":"database","href":"/feature-reference/workflows/workers/model-cache"},{"title":"Camera driver: V4L2 backend requirement","icon":"video","href":"/feature-reference/edge/drivers/camera-v4l2-backend"},{"title":"Camera driver: hardware H.264 encoding","icon":"film","href":"/feature-reference/edge/drivers/camera-hardware-h264-encoding"},{"title":"Wake Word — models \u0026 compile","icon":"cloud-arrow-down","href":"/feature-reference/workflows/wake-word-engine/models-and-compile"}]},{"group":"Asset \u0026 config files","icon":"file-code","pages":[{"title":"cyberwave.yml manifest","icon":"file-lines","href":"/feature-reference/manifest"},{"title":"Asset and driver spec","sidebarTitle":"Asset and driver spec","icon":"file-code","href":"/feature-reference/catalog/upload-asset"},{"title":"Asset schema variants","icon":"shapes","href":"/feature-reference/asset-schema-variants"},{"title":"Unified slug system","icon":"link","href":"/feature-reference/concepts/slug-system"}]},{"group":"Accounts \u0026 access","icon":"key","pages":[{"title":"API tokens","icon":"key","href":"/feature-reference/api-tokens"},{"title":"Credits \u0026 billing","icon":"credit-card","href":"/billing/credits"}]},{"group":"Architecture \u0026 glossary","icon":"sitemap","pages":[{"title":"Architecture","icon":"rocket","href":"/feature-reference/architecture/architecture"},{"title":"Data model","icon":"sitemap","href":"/feature-reference/architecture/core-data-hierarchy"},{"title":"Glossary","icon":"book-open","href":"/feature-reference/architecture/key-concepts"}]},{"group":"Help","icon":"life-ring","pages":[{"title":"Troubleshooting","icon":"screwdriver-wrench","href":"/support/troubleshooting"},{"title":"Support","icon":"life-ring","href":"/support/index"}]}]},{"tab":"API","pages":[{"title":"API","href":"/api-reference/overview"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"title":"Navigation coordinate convention - Cyberwave Docs","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":[],"chunks":[]}