This page has deprecated and moved to the new documentation framework of the main Bitcraze website. Please go to https://www.bitcraze.io/documentation/system/
This port allows to send setpoints to the platform. The philosophy is to be able to define setpoint packet format for each different use-case. As such this is a generic port that has one channel and one main packet format:
Port | Channel | Name |
---|---|---|
7 | 0 | Generic setpoint |
Generic setpoint packet format:
Byte | Value | Note |
---|---|---|
0 | ID | ID of the setpoint packet |
1.. | Payload | Format defined per ID |
Defined IDs:
ID | Type |
---|---|
0 | stop |
1 | Velocity World |
2 | Z Distance |
3 | CPPM Emulation |
4 | Altitude Hold |
5 | Hover |
6 | Full State |
7 | Position |
This is a setpoint with no payload that stops the motors and disables the control loops. Should be sent when the Crazyflie is landed.
Velocity setpoint in the world coordinate together with a YAW rotation speed. Useful for a teleop mode in a local positioning system.
Payload format:
struct velocityPacket_s { float vx; // m in the world frame of reference float vy; // ... float vz; // ... float yawrate; // deg/s } __attribute__((packed));
Set the Crazyflie absolute height and roll/pitch angles. Used for Z-ranger.
Payload format:
struct zDistancePacket_s { float roll; // deg float pitch; // ... float yawrate; // deg/s float zDistance; // m in the world frame of reference } __attribute__((packed));
CRTP packet containing an emulation of CPPM channels Channels have a range of 1000-2000 with a midpoint of 1500 Supports the ordinary RPYT channels plus up to MAX_AUX_RC_CHANNELS auxiliary channels. Auxiliary channels are optional and transmitters do not have to transmit all the data unless a given channel is actually in use (numAuxChannels must be set accordingly)
Current aux channel assignments:
Payload format:
#define MAX_AUX_RC_CHANNELS 10 static float s_CppmEmuRollMaxRateDps = 720.0f; // For rate mode static float s_CppmEmuPitchMaxRateDps = 720.0f; // For rate mode static float s_CppmEmuRollMaxAngleDeg = 50.0f; // For level mode static float s_CppmEmuPitchMaxAngleDeg = 50.0f; // For level mode static float s_CppmEmuYawMaxRateDps = 400.0f; // Used regardless of flight mode struct cppmEmuPacket_s { struct { uint8_t numAuxChannels : 4; // Set to 0 through MAX_AUX_RC_CHANNELS uint8_t reserved : 4; } hdr; uint16_t channelRoll; uint16_t channelPitch; uint16_t channelYaw; uint16_t channelThrust; uint16_t channelAux[MAX_AUX_RC_CHANNELS]; } __attribute__((packed));
Set the Crazyflie vertical velocity and roll/pitch angle.
Payload format:
struct altHoldPacket_s { float roll; // rad float pitch; // ... float yawrate; // deg/s float zVelocity; // m/s in the world frame of reference } __attribute__((packed));
Set the Crazyflie absolute height and velocity in the body coordinate system.
Payload format:
struct hoverPacket_s { float vx; // m/s in the body frame of reference float vy; // ... float yawrate; // deg/s float zDistance; // m in the world frame of reference } __attribute__((packed));
Set the full state.
Payload format:
struct fullStatePacket_s { int16_t x; // position - mm int16_t y; int16_t z; int16_t vx; // velocity - mm / sec int16_t vy; int16_t vz; int16_t ax; // acceleration - mm / sec^2 int16_t ay; int16_t az; int32_t quat; // compressed quaternion, see quatcompress.h int16_t rateRoll; // angular velocity - milliradians / sec int16_t ratePitch; // (NOTE: limits to about 5 full circles per sec. int16_t rateYaw; // may not be enough for extremely aggressive flight.) } __attribute__((packed));
Set the absolute postition and orientation.
struct positionPacket_s { float x; // Position in m float y; float z; float yaw; // Orientation in degree } __attribute__((packed));