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/]] ====== Generic Setpoint CRTP Port ====== 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 | [[doc:crazyflie:crtp:generic_setpoint#generic_setpoint|Generic setpoint]] | ===== 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 | [[doc:crazyflie:crtp:generic_setpoint#stop|stop]] | | 1 | [[doc:crazyflie:crtp:generic_setpoint#velocity_world|Velocity World]] | | 2 | [[doc:crazyflie:crtp:generic_setpoint#z_distance|Z Distance]] | | 3 | [[doc:crazyflie:crtp:generic_setpoint#cppm_emulation|CPPM Emulation]] | | 4 | [[doc:crazyflie:crtp:generic_setpoint#altitude_hold|Altitude Hold]] | | 5 | [[doc:crazyflie:crtp:generic_setpoint#hover|Hover]] | | 6 | [[doc:crazyflie:crtp:generic_setpoint#full_state|Full State]] | | 7 | [[doc:crazyflie:crtp:generic_setpoint#position|Position]] | ==== Stop ==== 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 World ==== 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)); ==== Z Distance ==== 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)); ==== CPPM Emulation ==== 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: * AuxChannel0: set high to enable self-leveling, low to disable 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)); ==== Altitude Hold ==== 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)); ==== Hover ==== 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)); ==== Full State ==== 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)); === Position === 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));