转向角度控制问题
发送命令G,C能控制左右转向,但是如何能控制转动的幅度能,如向右转45度,手动控制好办,但是想用应用来控制。修改参数调节界面的,第二个参数 admin 发表于 2017-4-17 13:37
修改参数调节界面的,第二个参数
第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);//得到控制目标值,进行运动学分析
}
速度增加的步进值,您要控制具体的角位移量,就使用位置模式哈,可以通过串口直接输入指令的 admin 发表于 2017-4-17 17:37
速度增加的步进值,您要控制具体的角位移量,就使用位置模式哈,可以通过串口直接输入指令的
你好,通过输入指令测试和看代码的效果,在位置模式下,并不能实现原地转向的功能。
else if(mode==1)//位置模式
{
case 1:Move_Y+=RC_Position; Flag_Change=1;break; // A向前
case 2:Move_X+=RC_Position; Flag_Change=2; Move_Y+=RC_Position; break; //B 右前方45度角
case 3:Move_X+=RC_Position; Flag_Change=3;break; //C 向右
case 4:Move_X+=RC_Position; Flag_Change=4;Move_Y-=RC_Position;break; //D 右后方45度角
case 5:Move_Y-=RC_Position; Flag_Change=5;break;//E 向后
case 6:Move_X-=RC_Position; Flag_Change=6;Move_Y-=RC_Position; break;//F 左后方45度角
case 7:Move_X-=RC_Position; Flag_Change=7; break;//G 向左
case 8:Move_X-=RC_Position; Flag_Change=8;Move_Y+=RC_Position;break;//H 向左前方45度角
case 9:Move_Z-=RC_Position; Flag_Change=9; break;//I不运动
case 10: Move_Z+=RC_Position; Flag_Change=10;break;//J 不运动
default: break;
}
我们其实就是想实现 小车运行到一个确定位置后,然后在原地转动方向(转动的角度我们可计算控制),然后继续向前,或向向后运动。在现在测试条件是,在速度模式下 ,就是对转向(向左,向右)的角度实现可控,如何实现呢 sunny 发表于 2017-4-19 10:02
你好,通过输入指令测试和看代码的效果,在位置模式下,并不能实现原地转向的功能。
else if(mode== ...
这是APP遥控的,通过CAN接口输入控制指令即可完成您的功能
页:
[1]