示例#1
0
void CreateTwoSegmentTraj(float V0, float distD1, float distD2, float A0, float beta, float epsilon)
{
	RobotCommand cmdLine1, cmdLine2, cmdClot1, cmdClot2;
	float deltaX, accel, T;
	float D;

	if(beta > 0)
	{
		deltaX = epsilon * ( 1/(sin((PI-beta)/2.0) / cos((PI-beta)/2.0) ) + FresnelCSSqrt(beta) );
		accel = distEncoderMeter * V0*V0/2.0 * PI/(epsilon*epsilon) * FresnelSSqrt(beta);
		T = sqrt((distEncoderMeter*beta)/(2*accel));
	}
	else
	{
		beta = -beta;
		deltaX = epsilon * ( 1/ (sin((PI-beta)/2.0) / cos((PI-beta)/2.0)) + FresnelCSSqrt(beta)); //epsilon * ( 1/tan((PI-beta)/2.0) + FresnelCSSqrt(beta));
		accel = -distEncoderMeter * V0*V0/2.0 * PI/(epsilon*epsilon) * FresnelSSqrt(beta);
		T = sqrt((distEncoderMeter*beta)/(-2*accel));
	}

	D = distD1-deltaX;
	if(D<0.0)
		D=0.0;
	motion_SpeedControlLR(	&cmdLine1,
							V0, D, A0,
							V0, D, A0);

	motion_SpeedControlLRTime(	&cmdClot1,
							V0, T, -accel,
							V0, T, accel);

	motion_SpeedControlLRTime(	&cmdClot2,
							V0-accel*T, T, accel,
							V0+accel*T, T, -accel);
	D = distD2-deltaX;
	if(D<0.0)
		D=0.0;
	motion_SpeedControlLRV0( &cmdLine2,
							V0, V0, D, A0,
							V0, V0, D, A0);

	path_LaunchTrajectory(&cmdLine1);
	path_WaitEndOfTrajectory();

	path_LaunchTrajectory(&cmdClot1);
	path_WaitEndOfTrajectory();

	path_LaunchTrajectory(&cmdClot2);
	path_WaitEndOfTrajectory();

	path_LaunchTrajectory(&cmdLine2);
	path_WaitEndOfTrajectory();
}
void mouse_Calibration2(int turnNb)
{	
	int i;
	static int mvt = 0;
	RobotCommand cmd;
	
	//reset values of calibration	
	for(i=0; i<MOUSE_NUMBER; i++)
	{
		reset(i);
	}
	
	switch(mvt++%4)
	{
	case 0:
		LOG_DEBUG("Calibration rotation");
		motion_Rotate(&cmd, 2*M_PI*turnNb);
		break;
	case 1:
		LOG_DEBUG("Calibration line");
		motion_Line(&cmd, 2.0f);
		break;
	case 2:
		LOG_DEBUG("Calibration -line");
		motion_Line(&cmd, -2.0f);
		break;
	case 3:
		LOG_DEBUG("Calibration -rotation");
		motion_Rotate(&cmd, -2*M_PI*turnNb);
		break;
	};
	
	path_LaunchTrajectory(&cmd);
	
	path_WaitEndOfTrajectory();
	
	for(i=0; i<MOUSE_NUMBER; i++)
	{
		LOG_DEBUG4("M%d a= %g,%g / d= %g", i, (float)getCalibAlpha1(i), (float)getCalibAlpha2(i), (float)getCalibDelta(i)*valueVTops);
	}
}