|
楼主 |
发表于 2017-4-17 14:19:17
|
显示全部楼层
第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);//得到控制目标值,进行运动学分析
}
|
|