# Dynamics in Body Frame

{% hint style="info" %}
Related C++ Header in the Auterion SDK:`<auterion_sdk/control/control.hpp>`
{% endhint %}

Body Frame Dynamics Mode allows you to control a Multicopter by supplying acceleration and velocity setpoints to the controller in the vehicle's body frame.

## Set up mode

In order to prepare your flight mode to accept `BodyFrameDynamicsSetpoint`, you need to supply the `auterion::multicopter::BodyFrameDynamicsSetpoint::Config` object to your mode constructor like so:

```cpp
auterion::Mode my_mode(sdk, "My Mode", {
    auterion::multicopter::BodyFrameDynamicsSetpoint::Config{}
});
```

## Create setpoints

`BodyFrameDynamicsSetpoint` setpoints take velocity, acceleration, heading and heading rate as arguments. The acceleration and velocity values, if specified together, should be kinematically consistent.

To create a setpoint, you can use the builder pattern like so:

```cpp
auto setpoint = auterion::multicopter::BodyFrameDynamicsSetpoint{}
    .withHorizontalAcceleration({a_x, a_y})
    .withVerticalAcceleration(a_z)
    .withHorizontalVelocity({v_x, v_y})
    .withVerticalVelocity(v_z)
    .withHeading(h)
    .withHeadingRate(h_r);
```

Also any subset of these values is permitted. In order to make the drone follow your setpoints, return these setpoints in the `onUpdateSetpoint` callback method of your mode.
