> For the complete documentation index, see [llms.txt](https://droneforge.gitbook.io/droneforge-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://droneforge.gitbook.io/droneforge-docs/nimbusos-sdk/python-api/examples/waypoints.md).

# Waypoints

The current SDK publishes relative waypoints through the autonomy request API. The helper method is `client.publish_relative_waypoint(...)`.

Relative waypoint offsets are in the drone body frame:

| Field     | Positive movement | Negative movement |
| --------- | ----------------- | ----------------- |
| `forward` | Forward           | Backward          |
| `right`   | Right             | Left              |
| `down`    | Down              | Up                |

Going up requires a negative `down` value.

The simplest way to send a relative waypoint in the SDK is:

```python
client.publish_relative_waypoint(
    mode="override",
    forward=1.0,
    right=0.0,
    down=0.0,
    threshold_m=0.25,
    hold_time_s=0.0,
)
```

Use `mode="override"` to replace the active waypoint. Use `mode="queue"` to append after the active waypoint.

`threshold_m` is the distance from the target that counts as reached. `hold_time_s` is how long NimbusOS should hold after reaching the waypoint.

Waypoint path speed is configured separately:

```python
client.publish_waypoint_speed(0.45)
```

The accepted speed range is `0.05` to `0.75` meters per second.

Example combining [Arming](/droneforge-docs/nimbusos-sdk/python-api/examples/arming.md), [Takeoff](/droneforge-docs/nimbusos-sdk/python-api/examples/takeoff.md), a waypoint, and a [Landing](/droneforge-docs/nimbusos-sdk/python-api/examples/landing.md) request:

```python
from __future__ import annotations

import sys
import time

from nimbusos_sdk import NimbusClient

ARM_WAIT_S = 3.0
TAKEOFF_WAIT_S = 10.0
WAYPOINT_SPEED_MPS = 0.45


def main() -> None:
    with NimbusClient() as client:
        print("Publishing arm", flush=True)
        client.publish_arm_state(True)

        time.sleep(ARM_WAIT_S)
        print("Publishing takeoff", flush=True)
        client.publish_autonomy_request("takeoff")

        print(f"Waiting {TAKEOFF_WAIT_S:.0f} seconds", flush=True)
        time.sleep(TAKEOFF_WAIT_S)

        print(f"Publishing waypoint speed: {WAYPOINT_SPEED_MPS:.2f} m/s", flush=True)
        client.publish_waypoint_speed(WAYPOINT_SPEED_MPS)

        print("Publishing waypoint: 1.0 meters forward", flush=True)
        client.publish_relative_waypoint(
            mode="override",
            forward=1.0,
            right=0.0,
            down=0.0,
            threshold_m=0.25,
            hold_time_s=0.0,
        )

        print("Publishing land", flush=True)
        client.publish_autonomy_request("land")


if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("\nStopped by Ctrl+C", flush=True)
        sys.exit(130)
```

The command-line equivalents are:

```bash
nimbusos-arm
nimbusos-autonomy-request takeoff
nimbusos-waypoint-speed 0.45
nimbusos-autonomy-request relative_waypoint --mode override --forward 1.0 --right 0.0 --down 0.0 --threshold 0.25 --hold-time 0.0
nimbusos-autonomy-request land
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://droneforge.gitbook.io/droneforge-docs/nimbusos-sdk/python-api/examples/waypoints.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
