|
@@ -279,46 +279,6 @@ int controlTurn(int flag)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-/**********************************************************
|
|
|
- * Description:控制小车移动在过道中间,比较左右两边的距离后
|
|
|
- * 然后进行水平左右移动.使小车保持在过道中间位置.
|
|
|
- **********************************************************/
|
|
|
-void horizMoveMiddle(float tolerance)
|
|
|
-{
|
|
|
- float diff = 0.0; //计算左右两边距离差
|
|
|
- float begin_yaw = 0.0;
|
|
|
- float now_left = 0.0;
|
|
|
- float now_right = 0.0;
|
|
|
-
|
|
|
- turnFlag = HORIZ_MOVE;
|
|
|
- yawSrvClient.call(yawSrv); //记录平移前的角度,作为标准进行修正
|
|
|
- begin_yaw = yawSrv.response.yaw;
|
|
|
-
|
|
|
- distSrvClient.call(distSrv);
|
|
|
- now_left = distSrv.response.left_dist; //获取左边距离
|
|
|
- ros::Duration(0.02).sleep();//在获取两次传感器值之间需要加延迟
|
|
|
- distSrvClient.call(distSrv);
|
|
|
- now_right = distSrv.response.right_dist;//获取右边距离
|
|
|
-
|
|
|
- diff = now_left - now_right;
|
|
|
- ROS_INFO("diff:%f,left:%f,right:%f", diff, now_left, now_right);
|
|
|
- while((fabs(diff)>tolerance)&&(now_left!=(float)0.3)&&(now_right!=(float)0.3))
|
|
|
- {
|
|
|
- ros::Duration(0.1).sleep(); //delay 100ms
|
|
|
- yawUpdate(begin_yaw); //用于修正转歪的角度
|
|
|
-
|
|
|
- distSrvClient.call(distSrv);
|
|
|
- now_left = distSrv.response.left_dist;
|
|
|
- ros::Duration(0.02).sleep();//在获取两次传感器值之间需要加延迟
|
|
|
- distSrvClient.call(distSrv);
|
|
|
- now_right = distSrv.response.right_dist;
|
|
|
-
|
|
|
- diff = now_left - now_right; //计算左右距离差值
|
|
|
- }
|
|
|
- //当平移结束后立刻停止移动
|
|
|
- publishTwistCmd(0, 0); //stop move
|
|
|
-}
|
|
|
-
|
|
|
/***************************************************************************
|
|
|
* Description:检查三个传感器数据,然后控制小车移动.这里需要防止小车在原地
|
|
|
* 进行连续两次旋转,在每次转弯后必须有个直行.这里需要注意的是当小车在转弯
|
|
@@ -345,7 +305,6 @@ void checkInfraredDist(float infrared_f,float infrared_l,float infrared_r,
|
|
|
{
|
|
|
//始终控制小车保持在过道的中间位置
|
|
|
ROS_WARN("go Forward ! yaw_data: %f", start_yaw_data);
|
|
|
- horizMoveMiddle(tolerance);
|
|
|
turnFlag = GO_FORWARD;
|
|
|
flag = 0; //设置直行标志
|
|
|
}
|