mirror of https://github.com/ArduPilot/ardupilot
AP_Frsky_Telem: fixed roll and pitch for VTOL view
This commit is contained in:
parent
48ce8c4e16
commit
89c30ae345
|
@ -683,11 +683,13 @@ uint32_t AP_Frsky_SPort_Passthrough::calc_attiandrng(void)
|
|||
{
|
||||
const RangeFinder *_rng = RangeFinder::get_singleton();
|
||||
|
||||
AP_AHRS &_ahrs = AP::ahrs();
|
||||
float roll;
|
||||
float pitch;
|
||||
AP::vehicle()->get_osd_roll_pitch_rad(roll,pitch);
|
||||
// roll from [-18000;18000] centidegrees to unsigned .2 degree increments [0;1800] (just in case, limit to 2047 (0x7FF) since the value is stored on 11 bits)
|
||||
uint32_t attiandrng = ((uint16_t)roundf((_ahrs.roll_sensor + 18000) * 0.05f) & ATTIANDRNG_ROLL_LIMIT);
|
||||
uint32_t attiandrng = ((uint16_t)roundf((roll * RAD_TO_DEG * 100 + 18000) * 0.05f) & ATTIANDRNG_ROLL_LIMIT);
|
||||
// pitch from [-9000;9000] centidegrees to unsigned .2 degree increments [0;900] (just in case, limit to 1023 (0x3FF) since the value is stored on 10 bits)
|
||||
attiandrng |= ((uint16_t)roundf((_ahrs.pitch_sensor + 9000) * 0.05f) & ATTIANDRNG_PITCH_LIMIT)<<ATTIANDRNG_PITCH_OFFSET;
|
||||
attiandrng |= ((uint16_t)roundf((pitch * RAD_TO_DEG * 100 + 9000) * 0.05f) & ATTIANDRNG_PITCH_LIMIT)<<ATTIANDRNG_PITCH_OFFSET;
|
||||
// rangefinder measurement in cm
|
||||
attiandrng |= prep_number(_rng ? _rng->distance_cm_orient(ROTATION_PITCH_270) : 0, 3, 1)<<ATTIANDRNG_RNGFND_OFFSET;
|
||||
return attiandrng;
|
||||
|
|
Loading…
Reference in New Issue