示例#1
0
float GetRumboDst()
{
    float b;
    b=calcBearing(gpsinfo.lon, gpsinfo.lat, GetLonDst(), GetLatDst());
    return b;
}
示例#2
0
void SimpleNavigation::navigationStep()
{
	mrpt::poses::CPose2D curPose;
	double yaw;
	double wantedYaw;
	float cur_w;
		float cur_v;
	interface->getCurrentPoseAndSpeeds(curPose, cur_v, cur_w);
	yaw = curPose.phi();//Robotpose returns yaw in radians
	LOG_AI(DEBUG4) << "Simple Nav Yaw: " << yaw << endl;
	wantedYaw = calcBearing(curPose);//AbstractNavigationInterface::calcBearing(curPose.x(), curPose.y(), navParams->target.x, navParams->target.y);
	LOG_AI(DEBUG4) << "Simple Nav Wanted Yaw: " << wantedYaw << endl;
	double dist = distance(curPose);
	double diffrence = wantedYaw - yaw;
	double minDiff = diffrence;
	if(diffrence > M_PI)
	{
		minDiff = 2*M_PI - diffrence;
	}
	else if(diffrence < -M_PI)
	{
		minDiff = 2*M_PI + diffrence;
	}

	LOG_AI(DEBUG4) << "Simple Nav Angular Difference: " << minDiff << endl;

	if(!dist > navParams->targetAllowedDistance)
	{
		LOG_AI(INFO) << "Reached Way Point" << endl;
		points.erase(points.begin());
		if(points.size() != 0)//this->points)
		{
			gotoNextPoint();
		}
		else
		{
			state = mrpt::reactivenav::CAbstractReactiveNavigationSystem::IDLE;
		}
	}
	if(abs((minDiff)) > .2)
	{
		bool turnRight = minDiff > 0;
		if(turnRight)
		{
			LOG_AI(DEBUG) << "\tTurning Right" << endl;
			interface->changeSpeeds(.5f,2);
		}
		else
		{
			LOG_AI(DEBUG) << "\tTurning Left" << endl;
			interface->changeSpeeds(.5f, -2);
		}
	}
	else
	{
		double dist = distance(curPose);
		LOG_AI(DEBUG) << "\tDriving Towards Target. Remaining Distance: " << dist << endl;//AbstractNavigationInterface::haversineDistance(curPose.x(), curPose.y(), navParams->target.x, navParams->target.y);
		if(dist > navParams->targetAllowedDistance)
		{
			interface->changeSpeeds(1.4,0);
			LOG_AI(DEBUG) << "\tDriving Towards Target. Remaining Distance: " << dist << endl;

		}
		else
		{
			LOG_AI(INFO) << "Reached Way Point" << endl;
			points.erase(points.begin());
			if(points.size() != 0)//this->points)
			{
				gotoNextPoint();
			}
			else
			{
				state = mrpt::reactivenav::CAbstractReactiveNavigationSystem::IDLE;
			}
		}
	}
}