Example #1
0
void encoderCallback(const legged_robot::Encoder::ConstPtr& msg)
{
 //ROS_INFO("I heard: [%u]", msg->encoder);
 //msgs++;
 pwm_msg.pwm_duty = PID_controller (1.5, 0.2, 0.1, moveVelocity, desiredPos, (int32_t)msg->encoder);
 sendMsg = true;
 //if(msgs == 1000)
 //{
	 //ROS_INFO("PWM: [%d]", pwm_msg.pwm_duty);
	 //msgs = 0;
 //}
}
Example #2
0
int main(void){
    struct udp_conn udpcon;
    
    
    
	udp_init_client(&udpcon, port, server_ip);
    
    char buffer[255];
           
	struct PID_parameters parameters= (struct PID_parameters){
		10,
		800,
		0,
		1,
		period,
	};
	double y, u;
	int i=0;
	struct timespec next;
	clock_gettime(CLOCK_REALTIME, &next);		
	timespec_add_us(&next, (int)(period*1000000));
	udp_send(&udpcon, "START", 6);
	while(1){
	    udp_send(&udpcon, "GET", 4);
	    
	    while(1){
	        udp_receive(&udpcon, buffer, 255);
	        if (buffer[0]=='G'){
	            break;
	        }
	    }
	    
	    y = doubleFromReply(buffer);
	    u = PID_controller(parameters, y);
	    
	    setFromDouble(buffer,u);
	    udp_send(&udpcon, buffer, 255);
	    clock_nanosleep(&next);
	    timespec_add_us(&next, (int)(period*1000000));
	    if (i++*period >= 0.5){
	        break;
	    }
	}
	
	udp_send(&udpcon, "STOP",5);
	printf("stop\n");
	return 0;
}

void setFromDouble(char *buffer, double u){
    buffer[0]='S';
    buffer[1]='E';
    buffer[2]='T';
    buffer[3]=':';
    char dummy[255];
    sprintf(dummy, "%f", u);
    char* ptr = dummy;
    int i=4;
    while(*ptr !='\0'){
        buffer[i++]=*ptr;
        ptr++;
    }
    buffer[i]='\0';
    return;
}