예제 #1
0
 void initRCservo()
 {
   ServoLibrary::iterator i = servos_.begin();
   for(; i != servos_.end(); ++i)
   {
     //std::string& joint_name = i->first;
     Servo& servo = i->second;
     if (servo.channel_ >= 1 && servo.channel_ <= 32 && servo.bus_ == Servo::PWM)
     {
       rcservo_SetServo(servo.channel_ - 1, servo.type_);
       if (servo.min_pwm_ != 700 || servo.max_pwm_ != 2300)
       	rcservo_SetServoParams1(servo.channel_ - 1, 8000L, servo.min_pwm_, servo.max_pwm_);
     }
   }
           
   if (rcservo_Initialize(servos_.getUsedPWMChannels()) == true)
   {
     rcservo_EnableMPOS();
     rcservo_SetFPS(servo_fps_); 
   } 
   else
     ROS_ERROR("RoBoIO: %s", roboio_GetErrMsg());
 }
예제 #2
0
int main()
{	
	unsigned long usedchannel = RCSERVO_USECHANNEL0 +RCSERVO_USECHANNEL1 +RCSERVO_USECHANNEL2 +
		          RCSERVO_USECHANNEL4 +RCSERVO_USECHANNEL5 +RCSERVO_USECHANNEL6+
				  RCSERVO_USECHANNEL9 +RCSERVO_USECHANNEL10+RCSERVO_USECHANNEL11+
				  RCSERVO_USECHANNEL13+RCSERVO_USECHANNEL14+RCSERVO_USECHANNEL15+
				  RCSERVO_USECHANNEL16+RCSERVO_USECHANNEL17+RCSERVO_USECHANNEL18+
				  RCSERVO_USECHANNEL21+RCSERVO_USECHANNEL22+RCSERVO_USECHANNEL23; // for RB-100
		
	if(allegro_init())
	{
		printf("error:initialize allegro library failed!!\n");
		return -1;
	}
	if(install_keyboard())
	{
		printf("error:initialize keybaord failed!!\n");
		return -1;
	}
	roboio_SetRBVer(RB_100);
	
	if(rcservo_SetServos(usedchannel, RCSERVO_DMP_RS0263) == false)
	{
		printf("Set servo fails!%s\n",roboio_GetErrMsg());
		return -1;
	}
	if(rcservo_Initialize(usedchannel) == false)
	{
		printf("RC servo initialize fails!%s\n",roboio_GetErrMsg());
		return -1;
	}
	
	rcservo_SetFPS(500);
	rcservo_EnterPlayMode_NOFB(NORMAL);
	SetVal();
	PRE_STATE = STATE = BALANCE;
	ADJUST = 0.0;
	BODY_YAW = 0.0;
	BODY_PITCH = 0.0;
	BODY_ROLL = 0.0;
	POS_GAIN[0] = 0.0;
	POS_GAIN[1] = 0.0;
	POS_GAIN[2] = 0.0;
	Prepare();
	while(STATE != EXIT)
	{
		GetInput();
		switch(STATE)
		{
			case FORWARD:
			case BACKWARD:
			case RIGHTWARD:
			case LEFTWARD:
			case FLWARD:
			case FRWARD:
			case BLWARD:
			case BRWARD:
			case LCIRCLE:
			case RCIRCLE:
					PlayMotion();
				break;
		
			case IDLE:
					Idle();
				break;	
			case BALANCE:
					Stable();
				break;
			default:
				break;
		}
	}

	rcservo_Close();
	i2c_Close();
	remove_keyboard();
	
	return 0;
}