STM32/STM8技术论坛
直播中

汪立东

10年用户 9经验值
擅长:处理器/DSP
私信 关注
[问答]

关于四轴飞行器的航向问题,下面的程序有人能看明白么

void Calculate_Target(void)
{
        int16_t ftemp=0;
       
        Target.Pitch = (1500-RC_Data.PITCH)/(20 + 7*RC_Data.SENSItiVITY);//Target.Pitch??
        Target.Roll = (RC_Data.ROLL-1500)/(20 + 7*RC_Data.SENSITIVITY);

  //Ä¿±êº½Ïò¿ØÖÆ¡£µ±ÓÍÃÅ´óÓÚ×îС¼ì²éֵʱ£¬ÈÏΪÓû§Ï£ÍûÆð·É¡£ÄÇô´ËʱµÄº½Ïò×öΪĿ±êº½Ïò
   if(RC_Data.THROTTLE > RC_MINCHECK ) {
      if(flag.LockYaw != 1){  
                                 flag.LockYaw = 1;
               Target.Yaw = AngE.Yaw; //½«µ±Ç°µÄº½Ïò×öΪĿ±êº½Ïò
      }
   }
   else {
                 flag.LockYaw = 0;       
                 Target.Yaw = AngE.Yaw;
         }
        //º½ÏòÔÚÖеãÉèÖÃÒ»¸öËÀÇø
        if((RC_Data.YAW > 1600)||(RC_Data.YAW < 1400)){
                ftemp = 1500 - RC_Data.YAW;
          Target.Yaw += (ftemp / 200.0f)*0.1f;
               
                //ת[-180.0,+180.0]
          if(Target.Yaw >180.0f) Target.Yaw -= 360.0f;       
          else if(Target.Yaw <-180.0f)Target.Yaw += 360.0f;
        }
}


///////////////////////////////////////////////////////////////////////////////////////////
这些程序看不懂呢

回帖(4)

friend0720

2016-2-14 14:06:02
本帖最后由 friend0720 于 2016-2-14 14:15 编辑

void Calculate_Target(void)
{
        int16_t ftemp=0;

        Target.Pitch = (1500-RC_Data.PITCH)/(20 + 7*RC_Data.SENSITIVITY);
        Target.Roll = (RC_Data.ROLL-1500)/(20 + 7*RC_Data.SENSITIVITY);

        //油门是否大于最小值
        if(RC_Data.THROTTLE > RC_MINCHECK )
        {
                if(flag.LockYaw != 1)
                {  
                        //Yaw 锁定标志
                        flag.LockYaw = 1;
                        //目标航向
                        Target.Yaw = AngE.Yaw;
                }
        }
        else
        {
                flag.LockYaw = 0;        
                Target.Yaw = AngE.Yaw;
        }

        //遥控给定的偏航增量范围
        if((RC_Data.YAW > 1600)||(RC_Data.YAW < 1400))
        {
                //偏航增量 = 中间值 - 遥控给定值
                ftemp = 1500 - RC_Data.YAW;
                //新的偏航角 Target.Yaw += ftemp *0.005f;
                Target.Yaw += (ftemp / 200.0f)*0.1f;      

                //偏航角规整到正负180°之间
                if(Target.Yaw >180.0f)
                        Target.Yaw -= 360.0f;        
                else if(Target.Yaw <-180.0f)
                        Target.Yaw += 360.0f;
        }
}

举报

汪立东

2016-2-14 14:49:02
引用: friend0720 发表于 2016-2-14 14:06
void Calculate_Target(void)
{
        int16_t ftemp=0;

Target.Pitch = (1500-RC_Data.PITCH)/(20 + 7*RC_Data.SENSITIVITY);
        Target.Roll = (RC_Data.ROLL-1500)/(20 + 7*RC_Data.SENSITIVITY);
请问这是怎么得的呢?
举报

汪立东

2016-2-14 14:50:40
引用: friend0720 发表于 2016-2-14 14:06
void Calculate_Target(void)
{
        int16_t ftemp=0;

遥控给定的偏航增量范围那是干什么的呢?
举报

youngzy219

2016-2-16 09:52:13
引用: 音乐151 发表于 2016-02-14 14:50
遥控给定的偏航增量范围那是干什么的呢?

应该就是当遥控器返回值在1400到1600之间时不执行航向修改,应该是为了防止校准问题或者是误差问题设计的
举报

更多回帖

发帖
×
20
完善资料,
赚取积分