Gimbal Functions
The header file for PSDK gimbal-related functions is uav_gimbal.h
. This document describes the key information and usage of the structures and function prototypes defined in theuav_gimbal.h
file.
Macro Definitions, Enums, and Structures
E_UavGimbalCalibrationStage
Gimbal calibration
typedef enum {
UAV_GIMBAL_CALIBRATION_STAGE_COMPLETE = 0, /*!< Calibration have been completed and the result is successful. */
UAV_GIMBAL_CALIBRATION_STAGE_PROCRESSING = 1, /*!< Gimbal is calibrating. */
UAV_GIMBAL_CALIBRATION_STAGE_FAILED = 3, /*!< Calibration have been completed and the result is failure. */
} E_UavGimbalCalibrationStage;
E_UavGimbalAxis
Gimbal axis
typedef enum {
UAV_GIMBAL_AXIS_PITCH = 0, /*!< Pitch axis. */
UAV_GIMBAL_AXIS_ROLL = 1, /*!< Roll axis. */
UAV_GIMBAL_AXIS_YAW = 2, /*!< Yaw axis. */
} E_UavGimbalAxis;
E_UAVGimbalResetMode
Gimbal reset mode
typedef enum {
/*! Only reset yaw axis of gimbal. Reset angle of yaw axis to the sum of yaw axis angle of aircraft and fine tune angle
* of yaw axis of gimbal. */
UAV_GIMBAL_RESET_MODE_YAW = 1,
/*! Reset yaw axis and pitch axis of gimbal. Reset angle of yaw axis to sum of yaw axis angle of aircraft and fine tune
* angle of yaw axis of gimbal, and reset pitch axis angle to the fine tune angle. */
UAV_GIMBAL_RESET_MODE_PITCH_AND_YAW = 3,
/*! Reset yaw axis and pitch axis of gimbal. Reset angle of yaw axis to sum of yaw axis angle of aircraft and fine tune
* angle of yaw axis of gimbal, and reset pitch axis angle to sum of -90 degree and fine tune angle if gimbal
* downward, sum of 90 degree and fine tune angle if upward. */
UAV_GIMBAL_RESET_MODE_PITCH_DOWNWARD_UPWARD_AND_YAW = 11,
/*! Reset pitch axis of gimbal. Reset pitch axis angle to sum of -90 degree and fine tune angle if gimbal downward,
* sum of 90 degree and fine tune angle if upward.
* Note: only support for dragonfish series
*/
UAV_GIMBAL_RESET_MODE_PITCH_DOWNWARD_UPWARD = 12,
} E_UAVGimbalResetMode;
T_UavGimbalControllerSmoothFactor
Gimbal controller smooth factor
typedef struct {
uint8_t pitch; /*!< Smooth factor of pitch axis, range from 0 to 30. */
uint8_t yaw; /*!< Smooth factor of yaw axis, range from 0 to 30. */
} T_UavGimbalControllerSmoothFactor;
T_UavGimbalControllerMaxSpeedPercentage
Gimbal controller max speed percentage
typedef struct {
uint8_t pitch; /*!< Max speed percentage of pitch axis, range from 1 to 100. */
uint8_t yaw; /*!< Max speed percentage of yaw axis, range from 1 to 100. */
} T_UavGimbalControllerMaxSpeedPercentage;
T_UavGimbalSystemState
Gimbal system state
typedef struct {
bool resettingFlag; /*!< Specifies whether gimbal is resetting now or not. */
bool mountedUpward; /*!< Specifies whether gimbal is upward or not. */
bool blockingFlag; /*!< Specifies whether gimbal is stuck or not. */
bool pitchRangeExtensionEnabledFlag; /*!< Specifies whether extended angle range of gimbal pitch axis is enabled or not. */
E_UAVGimbalMode gimbalMode; /*!< Gimbal mode. */
T_UAVAttitude3d fineTuneAngle; /*!< Fine tune angles, unit: 0.1 degree. */
T_UavGimbalControllerSmoothFactor smoothFactor; /*!< Smooth factor of gimbal controller. */
T_UavGimbalControllerMaxSpeedPercentage maxSpeedPercentage; /*!< Max speed percentage of gimbal controller. */
} T_UavGimbalSystemState;
T_UavGimbalReachLimitFlag
Gimbal reach limit flag
typedef struct {
bool pitch; /*!< Specifies whether gimbal has reached angle limit of pitch axis, if true, reached the limit. */
bool roll; /*!< Specifies whether gimbal has reached angle limit of roll axis, if true, reached the limit. */
bool yaw; /*!< Specifies whether gimbal has reached angle limit of yaw axis, if true, reached the limit. */
} T_UavGimbalReachLimitFlag;
T_UavGimbalAttitudeInformation
Gimbal angle
typedef struct {
T_UAVAttitude3d attitude; /*!< Gimbal attitude in the ground coordinate, unit: 0.1 degree. */
T_UavGimbalReachLimitFlag reachLimitFlag; /*!< Reach limit flag, being set when the joint angles of gimbal reach limits. */
} T_UavGimbalAttitudeInformation;
T_UavGimbalCalibrationState
Gimbal calibration state
typedef struct {
bool calibratingFlag; /*!< Specifies whether gimbal is calibrating now or not. */
bool lastCalibrationResult; /*!< Result of the last calibration, and true specifies success. */
uint8_t currentCalibrationProgress; /*!< Progress percentage of current calibration. If gimbal is calibrating now and fill in real progress percentage, if not, fill in zero. The item ranges from 0 to 100. */
E_UavGimbalCalibrationStage currentCalibrationStage; /*!< Current calibration stage and result. If gimbal is calibrating now and fill in ::UAV_GIMBAL_CALIBRATION_STAGE_PROCRESSING, if not, fill in result of the last calibration. */
} T_UavGimbalCalibrationState;
T_UavGimbalRotationProperty
Gimbal rotation command property
typedef struct {
struct {
bool pitch; /*!< Specifies whether ignore rotation command of pitch axis, and true specifies ignoring. */
bool roll; /*!< Specifies whether ignore rotation command of roll axis, and true specifies ignoring. */
bool yaw; /*!< Specifies whether ignore rotation command of yaw axis, and true specifies ignoring. */
} rotationValueInvalidFlag; /*!< Specifies whether ignore rotation command of some axis, including pitch, roll and yaw. */
union {
struct {
uint16_t actionTime; /*!< Action time during which gimbal move to target angles, unit: 0.01s. */
} relativeAngleRotation; /*!< Property of relative angle rotation command. */
struct {
uint16_t actionTime; /*!< Action time during which gimbal move to target angles, unit: 0.01s. */
/*! Joint angle valid flag, specifying whether
* T_UavGimbalRotationProperty::absoluteAngleRotation::jointAngle is valid when absolute angle control. */
bool jointAngleValid;
/*! Joint angles of gimbal, unit: 0.1 degree. If
* T_UavGimbalRotationProperty::absoluteAngleRotation::jointAngleValid is false, specifying here joint
* angles are invalid, and please ignore the joint angles. If joint angles are valid, users should ensure
* that target joint angles of gimbal is approximately the same as the specified value. */
T_UAVAttitude3d jointAngle;
} absoluteAngleRotation; /*!< Property of absolute angle rotation command. */
};
} T_UavGimbalRotationProperty;
T_UavGimbalCommonHandler
Use the functions in this structure to implement callback functions for gimbal control-related functions, including:
Get the current state of the gimbal
Get the current angle of the gimbal
Get the calibration state of the gimbal
Get the gimbal rotation speed
Get the joint angle of the gimbal
Rotate the gimbal
Start calibrating gimbal
Set the gimbal smooth factor
Enable or disable euler angle of pitch axis to the extended angle limit
Set the maximum gimbal speed percentage
Restore gimbal information
Set the gimbal mode
Reset gimbal parameters
Fine-tune the gimbal angle
Note: To prevent this function from blocking the main thread of the PSDK — which may cause issues such as slow program response, disconnection of camera-type payload devices, or infinite loops — do not call this function in a blocking manner within the callback function.
typedef struct {
/*!
* @brief Prototype of callback function used to report system state of gimbal.
* @param systemState: pointer to memory space used to store gimbal system state.
* @return Execution result.
*/
T_UAVReturnCode (*GetSystemState)(T_UavGimbalSystemState *systemState);
/*!
* @brief Prototype of callback function used to report attitude information of gimbal.
* @param attitudeInformation: pointer to memory space used to store gimbal attitude information.
* @return Execution result.
*/
T_UAVReturnCode (*GetAttitudeInformation)(T_UavGimbalAttitudeInformation *attitudeInformation);
/*!
* @brief Prototype of callback function used to report calibration state of gimbal.
* @param calibrationState: pointer to memory space used to store gimbal calibration state.
* @return Execution result.
*/
T_UAVReturnCode (*GetCalibrationState)(T_UavGimbalCalibrationState *calibrationState);
/*!
* @brief Prototype of callback function used to rotate gimbal. Rotation callback function will be called when
* other modules control gimbal.
* @warning User should control execution time of the callback function to be short, because this callback function
* may be called at very high frequency in some scenarios, just like 200Hz.
* @param rotationMode: mode of rotation command.
* @param rotationProperty: property of rotation command.
* @param rotationValue: value of rotation command, unit: 0.1 degree (if rotation mode is
* ::UAV_GIMBAL_ROTATION_MODE_RELATIVE_ANGLE or ::UAV_GIMBAL_ROTATION_MODE_ABSOLUTE_ANGLE), 0.1 degree/s
* (if rotation mode is ::UAV_GIMBAL_ROTATION_MODE_SPEED).
* @return Execution result.
*/
T_UAVReturnCode (*Rotate)(E_UAVGimbalRotationMode rotationMode, T_UavGimbalRotationProperty rotationProperty,
T_UAVAttitude3d rotationValue);
/*!
* @brief Prototype of callback function used to start calibrating gimbal.
* @note Maximum allowable time of gimbal calibration is 120s.
* @return Execution result.
*/
T_UAVReturnCode (*StartCalibrate)(void);
/**
* @brief Set smooth factor for gimbal controller, using to smooth control.
* @param smoothingFactor: smooth factor. The larger the value, the smaller the acceleration of gimbal. Recommended
* calculation formula is "acc = 10000 * (0.8 ^ (1 + x)) deg/s^2", x is smooth factor. Range from 0 to 30.
* @param axis: axis to be set.
* @return Execution result.
*/
T_UAVReturnCode (*SetControllerSmoothFactor)(uint8_t smoothingFactor, E_UavGimbalAxis axis);
/*!
* @brief Prototype of callback function used to enable or disable extended pitch axis angle range.
* @details Switching the gimbal limit euler angle of pitch axis to the extended limit angle or the default limit
* angle.
* @param enabledFlag: flag specified whether enable or disable extended pitch axis angle range.
* @return Execution result.
*/
T_UAVReturnCode (*SetPitchRangeExtensionEnabled)(bool enabledFlag);
/**
* @brief Set max speed percentage for gimbal controller.
* @param maxSpeedPercentage: max speed value. Recommended calculation formula is "spd = default_max_spd * x / 100",
* x is default max speed value. Range from 1 to 100.
* @param axis: axis to be set.
* @return Execution result.
*/
T_UAVReturnCode (*SetControllerMaxSpeedPercentage)(uint8_t maxSpeedPercentage, E_UavGimbalAxis axis);
/**
* @brief Restore factory settings of gimbal, including fine tune angle, pitch angle extension enable flag and max
* speed etc.
* @return Execution result.
*/
T_UAVReturnCode (*RestoreFactorySettings)(void);
/*!
* @brief Prototype of callback function used to set gimbal work mode.
* @param mode: gimbal work mode.
* @return Execution result.
*/
T_UAVReturnCode (*SetMode)(E_UAVGimbalMode mode);
/*!
* @brief Prototype of callback function used to reset gimbal.
* @note Reset command will interrupt rotation process.
* @param mode: Reset mode.
* @return Execution result.
*/
T_UAVReturnCode (*Reset)(E_UAVGimbalResetMode mode);
/*!
* @brief Prototype of callback function used to fine tune angle of gimbal.
* @param fineTuneAngle: fine tune angle, unit: 0.1 degree. Angle value of greater than 0 specifies rotation
* towards the positive direction of body coordinate.
* @return Execution result.
*/
T_UAVReturnCode (*FineTuneAngle)(T_UAVAttitude3d fineTuneAngle);
/**
* @brief Prototype of callback function used to report rotation speed of gimbal.
* @note The callback function will be called at 50 Hz. Developers should ensure that, the average rotation speed
* of gimbal within 20 ms after the callback function is called is approximately equal to the reported rotation
* speed.
* @param rotationSpeed: pointer to memory space used to store rotation speed, in body coordinate, unit:
* 0.1 degree/s.
* @return Execution result.
*/
T_UAVReturnCode (*GetRotationSpeed)(T_UAVAttitude3d *rotationSpeed);
/**
* @brief Prototype of callback function used to report joint angle of gimbal.
* @param jointAngle: pointer to memory space used to store joint angles, unit: 0.1 degree.
* @return Execution result.
*/
T_UAVReturnCode (*GetJointAngle)(T_UAVAttitude3d *jointAngle);
} T_UavGimbalCommonHandler;
Function Prototype
UavGimbal_Init
Function: Initialize the gimbal module
Before using the gimbal control functions, call this interface to initialize the gimbal module.
T_UAVReturnCode UavGimbal_Init(void);
UavGimbal_DeInit
Function: Deinitialize the gimbal module
T_UAVReturnCode UavGimbal_DeInit(void);
UavGimbal_RegCommonHandler
Function: Register gimbal control functions
T_UAVReturnCode UavGimbal_RegCommonHandler(const T_UavGimbalCommonHandler *commonHandler);