亚博智能论坛  
  
查看: 551|回复: 0

转向角度控制问题

[复制链接]
  • TA的每日心情
    慵懒
    2017-7-29 14:25
  • 121

    主题

    161

    帖子

    576

    积分

    超级版主

    Rank: 9Rank: 9Rank: 9

    积分
    576
    发表于 2017-6-21 16:29:22 | 显示全部楼层 |阅读模式
    发送命令G,C能控制左右转向,但是如何能控制转动的幅度能,如向右转45度,手动控制好办,但是想用应用来控制。


    第2个参数为RC_Position,从代码看是一次控制的偏移量。且之后在位置模式下才有效。如果是在速度模式下,我需要让车旋转45度,从代码看,貌似控制为 Move_Z+=step 。这是一个固定值 float step=0.5;  //设置速度控制步进值。不知我理解是否正确。
    另外这个0.5单位是什么,如果执行一次右自转,大约是转了多少角度? 如果知道这些,上层应用才好控制旋转的幅度
    void Get_RC(u8 mode)
    {

            float step=0.5;  //设置速度控制步进值。
            u8 Flag_Move=1;
              if(mode==0)//速度
                    {        
                                     switch(Flag_Direction)   //方向控制
                                     {
                                     case 1:  Move_X=0;           Move_Y+=step;  Flag_Move=1;               break;
                                     case 2:  Move_X+=step;       Move_Y+=step;  Flag_Move=1;               break;
                                     case 3:  Move_X+=step;       Move_Y=0;      Flag_Move=1;               break;
                                     case 4:  Move_X+=step;       Move_Y-=step;  Flag_Move=1;               break;
                                     case 5:  Move_X=0;           Move_Y-=step;  Flag_Move=1;               break;
                                     case 6:  Move_X-=step;       Move_Y-=step;  Flag_Move=1;               break;
                                     case 7:  Move_X-=step;       Move_Y=0;      Flag_Move=1;               break;
                                     case 8:  Move_X-=step;       Move_Y+=step;  Flag_Move=1;               break;
                                     default: Flag_Move=0;               break;         
                             }
                                     
                            if(Flag_Move==0)                //如果无方向控制指令         ,检查转向控制状态
                            {        
                                    if(Flag_Left==1)       Move_X=0,Move_Y=0,  Move_Z-=step,Gyro_K=0;    //左自旋   
                                    else if(Flag_Right==1) Move_X=0,Move_Y=0,  Move_Z+=step,Gyro_K=0;    //右自旋               
                                    else                                Move_X=0,Move_Y=0,  Move_Z=0,Gyro_K=0.004;    //停止

                            }        
                                    if(Flag_Move==1)        Flag_Left=0,Flag_Right=0,Move_Z=0;
                                    if(Move_X<-RC_Velocity) Move_X=-RC_Velocity;           //速度控制限幅
                                    if(Move_X>RC_Velocity)  Move_X=RC_Velocity;            
                                    if(Move_Y<-RC_Velocity) Move_Y=-RC_Velocity;        
                                    if(Move_Y>RC_Velocity)  Move_Y=RC_Velocity;         
                                    if(Move_Z<-RC_Velocity) Move_Z=-RC_Velocity;        
                                    if(Move_Z>RC_Velocity)  Move_Z=RC_Velocity;         
                            
             }
                     else if(mode==1)//位置模式
                    {        
                                     switch(Flag_Direction)   //方向控制
                                     {
                                     case 1:  Move_Y+=RC_Position; Flag_Change=1;break;
                                     case 2:  Move_X+=RC_Position; Flag_Change=2; Move_Y+=RC_Position; break;
                                     case 3:  Move_X+=RC_Position; Flag_Change=3;break;
                                     case 4:  Move_X+=RC_Position; Flag_Change=4;Move_Y-=RC_Position;break;
                                     case 5:  Move_Y-=RC_Position; Flag_Change=5;break;
                                     case 6:  Move_X-=RC_Position; Flag_Change=6;Move_Y-=RC_Position; break;
                                     case 7:  Move_X-=RC_Position; Flag_Change=7; break;
                                     case 8:  Move_X-=RC_Position; Flag_Change=8;Move_Y+=RC_Position;break;                        
                                     case 9:  Move_Z-=RC_Position; Flag_Change=9; break;
                                     case 10: Move_Z+=RC_Position; Flag_Change=10;break;                        
                                     default: break;         
                             }
             }
                     Kinematic_Analysis(Move_X,Move_Y,Move_Z);//得到控制目标值,进行运动学分析
    }


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表