//#######################
//#### main programm ####
int main(int argc, char** argv)
{
    // initialize ROS, spezify name of node
    ros::init(argc, argv, "undercarriage_ctrl");
    
	// construct nodeClass
    NodeClass nodeClass;
 	
	// specify looprate of control-cycle
 	ros::Rate loop_rate(50); // Hz 
    
    while(nodeClass.n.ok())
    {
		// process Callbacks (get new pltf-cmd's and check for EMStop)
        ros::spinOnce();

		// request Update of Undercarriage Configuration
		nodeClass.GetJointState();

		// calculate forward kinematics and update Odometry
		nodeClass.UpdateOdometry();

		// perform one control step, calculate inverse kinematics
		// and publish updated joint cmd's (if no EMStop occurred)
		nodeClass.CalcCtrlStep();

		// -> let node sleep for the rest of the cycle
        loop_rate.sleep();
    }

    return 0;
}
예제 #2
0
//#######################
//#### main programm ####
int main(int argc, char** argv)
{
	// initialize ROS, spezify name of node
	ros::init(argc, argv, "base_drive_chain");

	NodeClass nodeClass;
	
	// specify looprate of control-cycle
 	ros::Rate loop_rate(100); // Hz 

	while(nodeClass.n.ok())
	{
		//Read-out of CAN buffer is only necessary during read-out of Elmo Recorder		
		if( nodeClass.m_bReadoutElmo ) {
			if(nodeClass.m_bisInitialized) nodeClass.m_CanCtrlPltf->evalCanBuffer();
			
			if(nodeClass.m_CanCtrlPltf->ElmoRecordings(100, 0, "") == 0) {
				nodeClass.m_bReadoutElmo = false;
				ROS_INFO("CPU consuming evalCanBuffer used for ElmoReadout deactivated");
			}
		}

		nodeClass.publish_JointStates();
		
		loop_rate.sleep();
		ros::spinOnce();
	}

	return 0;
}
예제 #3
0
//#######################
//#### main programm ####
int main(int argc, char** argv)
{
    // initialize ROS, spezify name of node
    ros::init(argc, argv, "cob3_platform");
    
    NodeClass nodeClass;

    // main loop
 	ros::Rate loop_rate(25); // Hz 
    while(nodeClass.n.ok())
    {
        nodeClass.current_time = ros::Time::now();

        // publish Odometry
        nodeClass.updateOdometry();

        // update velocity of platform
        nodeClass.updateCmdVel();

        ros::spinOnce();
        loop_rate.sleep();
    }
    
//    ros::spin();

    return 0;
}
예제 #4
0
//#######################
//#### main programm ####
int main(int argc, char** argv)
{
	// initialize ROS, spezify name of node
	ros::init(argc, argv, "base_drive_chain");

	NodeClass nodeClass;

	// specify looprate of control-cycle
	int rate;
	nodeClass.n.getParam("cycleRate", rate);
 	ROS_INFO("set can querry rate to %i hz", rate);
	ros::Rate loop_rate(rate); // Hz
	nodeClass.last = ros::Time::now();
	nodeClass.now = ros::Time::now();
	if(nodeClass.autoInit)
	{
		nodeClass.can_init();
	}

	while(nodeClass.n.ok())
	{

		nodeClass.publish_JointStates();
		nodeClass.sendVelCan();
		loop_rate.sleep();
		ros::spinOnce();
		nodeClass.now = ros::Time::now();
		if(nodeClass.m_bisInitialized) nodeClass.m_CanCtrlPltf->timeStep( (nodeClass.now - nodeClass.last).toSec() );
		nodeClass.last = nodeClass.now;
	}

	return 0;
}
예제 #5
0
//#######################
//#### main programm ####
int main(int argc, char** argv)
{
    // initialize ROS, spezify name of node
    ros::init(argc, argv, "powercube_chain");
    
    // create nodeClass
    NodeClass nodeClass;
 
    // main loop
 	ros::Rate loop_rate(5); // Hz
    while(nodeClass.n.ok())
    {
        // publish JointState
        nodeClass.publishJointState();

        // read parameter
        std::string operationMode;
        nodeClass.n.getParam("OperationMode", operationMode);
        ROS_INFO("running with OperationMode [%s]", operationMode.c_str());

        // sleep and waiting for messages, callbacks 
        ros::spinOnce();
        loop_rate.sleep();
    }
    
//    ros::spin();

    return 0;
}
예제 #6
0
//#######################
//#### main programm ####
int main(int argc, char** argv)
{
    // initialize ROS, spezify name of node
    ros::init(argc, argv, "sick_s300");
    
    NodeClass nodeClass;
	ScannerSickS300 SickS300;

	//char *pcPort = new char();
//	const char pcPort[] = "/dev/ttyUSB1"; //TODO replace with parameter port
//	const char pcPort[] = nodeClass.port;
//	int iBaudRate = 500000;
	int iBaudRate = nodeClass.baud;
	int iScanId = nodeClass.scan_id;
	bool bOpenScan = false, bRecScan = false;
	bool firstTry = true;
	std::vector<double> vdDistM, vdAngRAD, vdIntensAU;
 
 	while (!bOpenScan)
 	{
 		ROS_INFO("Opening scanner... (port:%s)",nodeClass.port.c_str());
		bOpenScan = SickS300.open(nodeClass.port.c_str(), iBaudRate, iScanId);
		
		// check, if it is the first try to open scanner
	 	if(!bOpenScan)
		{
			ROS_ERROR("...scanner not available on port %s. Will retry every second.",nodeClass.port.c_str());
			firstTry = false;
		}
		sleep(1); // wait for scann to get ready if successfull, or wait befor retrying
	}
	ROS_INFO("...scanner opened successfully on port %s",nodeClass.port.c_str());

	// main loop
	ros::Rate loop_rate(5); // Hz
    while(nodeClass.nodeHandle.ok())
    {
		// read scan
		ROS_DEBUG("Reading scanner...");
		bRecScan = SickS300.getScan(vdDistM, vdAngRAD, vdIntensAU);
		ROS_DEBUG("...read %d points from scanner successfully",vdDistM.size());
    	// publish LaserScan
        if(bRecScan)
        {
		    ROS_DEBUG("...publishing LaserScan message");
            nodeClass.publishLaserScan(vdDistM, vdAngRAD, vdIntensAU);
        }
        else
        {
		    ROS_WARN("...no Scan available");
        }

        // sleep and waiting for messages, callbacks    
        ros::spinOnce();
        loop_rate.sleep();
    }
    return 0;
}
예제 #7
0
//#######################
//#### main programm ####
int main(int argc, char** argv)
{
	// initialize ROS, spezify name of node
	ros::init(argc, argv, "cob_relayboard_node");
    
	NodeClass node;
	if(node.init() != 0) return 1;

	ros::Rate r(20); //Cycle-Rate: Frequency of publishing EMStopStates
	while(node.n.ok())
	{        
		node.sendEmergencyStopStates();

		ros::spinOnce();
		r.sleep();
	}

	return 0;
}
예제 #8
0
//#######################
//#### main programm ####
int main(int argc, char** argv)
{
    // initialize ROS, spezify name of node
    ros::init(argc, argv, "drive_identification_node");

    NodeClass node;
	if(node.init() == 1) return 1;
	node.simpleDriveTest(argc, argv);
	
    
 /*
    while(node.n.ok())
    {

        ros::spinOnce();
    }
*/    
//    ros::spin();

    return 0;
}
예제 #9
0
//#######################
//#### main programm ####
int main(int argc, char** argv)
{
    // initialize ROS, spezify name of node
    ros::init(argc, argv, "undercarriage_ctrl");
    
	// construct nodeClass
    NodeClass nodeClass;
	
	// automatically do initializing of controller, because it's not directly depending any hardware components
	if( nodeClass.is_initialized_bool_ = nodeClass.InitCtrl() ) {
		nodeClass.last_time_ = ros::Time::now();
		ROS_INFO("Undercarriage control successfully initialized.");
	} else
		ROS_WARN("Undercarriage control initialization failed! Try manually.");
	
	// specify looprate of control-cycle
 	ros::Rate loop_rate(50); // Hz 
    
    while(nodeClass.n.ok())
    {
		// process Callbacks (get new pltf-cmd's and check for EMStop)
        ros::spinOnce();

		// request Update of Undercarriage Configuration
		nodeClass.GetJointState();

		// calculate forward kinematics and update Odometry
		nodeClass.UpdateOdometry();

		// perform one control step, calculate inverse kinematics
		// and publish updated joint cmd's (if no EMStop occurred)
		nodeClass.CalcCtrlStep();

		// -> let node sleep for the rest of the cycle
        loop_rate.sleep();
    }

    return 0;
}