Contents

Rock, Paper, Scissors Commander for KIST

There are two EXEs to command the Home, Rock, Paper and Scissors positions for the Allegro Hand via TCP/IP connection to the AHAS controller
This controller is KIST specific.

To execute these motions, the following integer TCP/IP messages are sent:

0: Ready
1: Rock
2: Paper
3. Scissors

Port

6150

Message ID

1

Sampling Time

1000Hz, 1000us


Keyboard Input

File:Tcpip sendMessage.zip

tcpip_sendMessage.cpp

// kaiTest.cpp : Defines the entry point for the console application.
//
//#include "stdafx.h"
#ifdef WIN32
#include "kai/kai.h"
#else
#include "kai/kai.h"
#endif
#include <stdio.h>
#ifdef WIN32
#include <conio.h>
#endif
#include <string>
#include <iostream>
 
using namespace std;
 
#include <queue>
bool bTCP = true;
unsigned int hExtension = -1;
 
 
 
// rProtocol
#ifdef WIN32
//#include "../../../RoboticsLab/RoboticsLab/dev/include/rProtocol/rProtocol.h"
#else
//#include "../../../RoboticsLab/include/rProtocol/rProtocol.h"
#endif
 
 
/* notice
////////////////////////////////////
1. Set include path : In the place that there is a Kai header file.
ex) #include "kai.h"
2. Create a Class instance
ex) mySocket sock;
3. Define kaiMsg
ex) kaiMsg msg;
 
start!
////////////////////////////////////
*/
 
class mySocket : public kaiSocket
{
public:
	mySocket(){}
	~mySocket(){}
 
protected:
	virtual void onMessage(kaiMsg& msg)
	{	
		printf("msg id:%d, msg size:%d\n", msg.id(), msg.size());
	}
 
	virtual void onSend(int len)
	{
		printf("send message: %d\n", len);
	}
};
 
 
int main(int argc, char* argv[])
{		
	bool bRun = true;
	mySocket sock;
	kaiMsgID id = 0;
	kaiMsg msg;
	msg.allocateMemory();
 
	int cmd = -1;
 
	//if(argc!=2)
	//{
	//	printf("ERROR: You must input just one integer argument\n0: Ready\n1: Rock\n2: Paper\n3: Scissors\n\n");
	//	_getch();
	//	return 0;
	//}
 
	////parse input
	//std::string s = argv[1];
	//sscanf(s.c_str(), "%i", &cmd); //i is 10 after this
	//printf("%i",cmd);
 
 
	kaiInitialize();
 
	if(bTCP)
		sock.create(true, kaiON_MESSAGE|kaiON_SEND);
	else
		sock.create(false, kaiON_MESSAGE|kaiON_SEND);
 
	if (kaiSUCCESS == sock.connect("127.0.0.1", 6150))//sock.connect("192.168.1.98", 5150);
	{
		sock.setBlockingMode(kaiNON_BLOCKING_SOCKET);
	}
	else
	{
		printf("[ERROR] failed to connect to the server application.\n");
		bRun = false;
	}
 
	while (bRun)
	{
		if(bTCP && sock.isValid())
		{
			if (kaiFAIL == sock.recv())
			{
				printf("[ERROR] connection was closed.\n");
				break;
			}
		}
 
		{
 
			int cmd = -1;
			if (_kbhit())
				cmd = _getch();
 
			switch (cmd)
			{
			case '0':
				{
					kaiMsg msg; // define kaiMsg
					msg.allocateMemory(); 
					msg.reset();
					msg.begin();
					//int armID;
					//armID = 1;
 
					int motion = 1;
 
					// msg << is send stream
					msg << motion;//argv[1]; 
					cout << "\n" << motion;
					msg.id(1); // set the msg's id (message packet ID)
					msg.end(); // end message
					sock.send(msg); // Instance send msg
 
					std::cout<<"Ready\n"<<std::endl;
				}
				break;
			case '1':
				{
					kaiMsg msg; // define kaiMsg
					msg.allocateMemory(); 
					msg.reset();
					msg.begin();
					//int armID;
					//armID = 1;
 
					int motion = 10;
 
					// msg << is send stream
					msg << motion; 
					cout << "\n" << motion;
					msg.id(1); // set the msg's id (message packet ID)
					msg.end(); // end message
					sock.send(msg); // Instance send msg
 
					std::cout<<"Rock\n"<<std::endl;
				}
				break;
			case '2':
				{
					kaiMsg msg; // define kaiMsg
					msg.allocateMemory(); 
					msg.reset();
					msg.begin();
					//int armID;
					//armID = 1;
 
					int motion = 11;
 
					// msg << is send stream
					msg << motion;//argv[1]; 
					cout << "\n" << motion;
					msg.id(1); // set the msg's id (message packet ID)
					msg.end(); // end message
					sock.send(msg); // Instance send msg
 
					std::cout<<"Paper\n"<<std::endl;
				}
				break;
			case '3':
				{
					kaiMsg msg; // define kaiMsg
					msg.allocateMemory(); 
					msg.reset();
					msg.begin();
					//int armID;
					//armID = 1;
 
					int motion = 12;
 
					// msg << is send stream
					msg << motion;//argv[1]; 
					cout << "\n" << motion;
					msg.id(1); // set the msg's id (message packet ID)
					msg.end(); // end message
					sock.send(msg); // Instance send msg
 
					std::cout<<"Scissor\n"<<std::endl;
				}
				break;
			case 'q':
				sock.close();
				bRun = false;
				break;
				//default:
 
			}
		}
	}
 
 
	printf("Press Enter to quit.\n");
	getchar();
	return 0;
}


Command Argument

File:Tcpip sendMessage wArg.zip

tcpip_sendMessage.cpp

// kaiTest.cpp : Defines the entry point for the console application.
//
//#include "stdafx.h"
#ifdef WIN32
#include "kai/kai.h"
#else
#include "kai/kai.h"
#endif
#include <stdio.h>
#ifdef WIN32
#include <conio.h>
#endif
#include <string>
#include <iostream>
 
using namespace std;
 
#include <queue>
bool bTCP = true;
unsigned int hExtension = -1;
 
 
 
// rProtocol
#ifdef WIN32
//#include "../../../RoboticsLab/RoboticsLab/dev/include/rProtocol/rProtocol.h"
#else
//#include "../../../RoboticsLab/include/rProtocol/rProtocol.h"
#endif
 
 
/* notice
////////////////////////////////////
1. Set include path : In the place that there is a Kai header file.
ex) #include "kai.h"
2. Create a Class instance
ex) mySocket sock;
3. Define kaiMsg
ex) kaiMsg msg;
 
start!
////////////////////////////////////
*/
 
class mySocket : public kaiSocket
{
public:
	mySocket(){}
	~mySocket(){}
 
protected:
	virtual void onMessage(kaiMsg& msg)
	{	
		printf("msg id:%d, msg size:%d\n", msg.id(), msg.size());
	}
 
	virtual void onSend(int len)
	{
		printf("send message: %d\n", len);
	}
};
 
 
int main(int argc, char* argv[])
{		
	bool bRun = true;
	mySocket sock;
	kaiMsgID id = 0;
	kaiMsg msg;
	msg.allocateMemory();
 
	int cmd = -1;
 
	if(argc!=2)
	{
		printf("ERROR: You must input just one integer argument\n0: Ready\n1: Rock\n2: Paper\n3: Scissors\n\n");
		_getch();
		return 0;
	}
 
	//parse input
	std::string s = argv[1];
	sscanf(s.c_str(), "%i", &cmd); //i is 10 after this
	printf("%i",cmd);
 
 
	kaiInitialize();
 
	if(bTCP)
		sock.create(true, kaiON_MESSAGE|kaiON_SEND);
	else
		sock.create(false, kaiON_MESSAGE|kaiON_SEND);
 
	if (kaiSUCCESS == sock.connect("127.0.0.1", 6150))//sock.connect("192.168.1.98", 5150);
	{
		sock.setBlockingMode(kaiNON_BLOCKING_SOCKET);
	}
	else
	{
		printf("[ERROR] failed to connect to the server application.\n");
		bRun = false;
	}
 
	//while (bRun)
	//{
		//if(bTCP && sock.isValid())
		//{
		//	if (kaiFAIL == sock.recv())
		//	{
		//		printf("[ERROR] connection was closed.\n");
		//		getchar();
		//		return 0;
		//	}
		//}
 
		{
 
			//int cmd = -1;
			//if (_kbhit())
			//	cmd = _getch();
 
			switch (cmd)
			{
			case 0:
				{
					kaiMsg msg; // define kaiMsg
					msg.allocateMemory(); 
					msg.reset();
					msg.begin();
					//int armID;
					//armID = 1;
 
					int motion = 1;
 
					// msg << is send stream
					msg << motion;//argv[1]; 
					cout << "\n" << motion;
					msg.id(1); // set the msg's id (message packet ID)
					msg.end(); // end message
					sock.send(msg); // Instance send msg
 
					std::cout<<"Ready\n"<<std::endl;
				}
				break;
			case 1:
				{
					kaiMsg msg; // define kaiMsg
					msg.allocateMemory(); 
					msg.reset();
					msg.begin();
					//int armID;
					//armID = 1;
 
					int motion = 10;
 
					// msg << is send stream
					msg << motion; 
					cout << "\n" << motion;
					msg.id(1); // set the msg's id (message packet ID)
					msg.end(); // end message
					sock.send(msg); // Instance send msg
 
					std::cout<<"Rock\n"<<std::endl;
				}
				break;
			case 2:
				{
					kaiMsg msg; // define kaiMsg
					msg.allocateMemory(); 
					msg.reset();
					msg.begin();
					//int armID;
					//armID = 1;
 
					int motion = 11;
 
					// msg << is send stream
					msg << motion;//argv[1]; 
					cout << "\n" << motion;
					msg.id(1); // set the msg's id (message packet ID)
					msg.end(); // end message
					sock.send(msg); // Instance send msg
 
					std::cout<<"Paper\n"<<std::endl;
				}
				break;
			case 3:
				{
					kaiMsg msg; // define kaiMsg
					msg.allocateMemory(); 
					msg.reset();
					msg.begin();
					//int armID;
					//armID = 1;
 
					int motion = 12;
 
					// msg << is send stream
					msg << motion;//argv[1]; 
					cout << "\n" << motion;
					msg.id(1); // set the msg's id (message packet ID)
					msg.end(); // end message
					sock.send(msg); // Instance send msg
 
					std::cout<<"Scissor\n"<<std::endl;
				}
				break;
			case 'q':
				sock.close();
				bRun = false;
				break;
			//default:
 
			}
		}
	//}
 
 
	printf("Press Enter to quit.\n");
	//getchar();
	return 0;
}


RPS Controller

File:Control ERHand RPS KIST.zip


Debug

File:Tcpip sendMessage wArg debug.zip


File:Tcpip sendMessage debug.zip




You are not allowed to post comments.




Copyright & Trademark Notice
Allegro, the Allegro logo, RoboticsLab, the RoboticsLab logo, and all related files and documentation are Copyright ⓒ 2008-2020 Wonik Robotics Co., Ltd. All rights reserved. RoboticsLab and Allegro are trademarks of Wonik Robotics. All other trademarks or registered trademarks mentioned are the properties of their respective owners.

Wonik Robotics's Allegro Hand is based on licensed technology developed by the Humanoid Robot Hand research group at the Korea Institute of Industrial Technology (KITECH).

Any references to the BHand Library or the Allegro Hand Motion and/or Grasping Library refer to a library of humanoid robotic hand grasping algorithms and motions developed and published by KITECH researchers.
J.-H. Bae, S.-W. Park, D. Kim, M.-H. Baeg, and S.-R. Oh, "A Grasp Strategy with the Geometric Centroid of a Groped Object Shape Derived from Contact Spots," Proc. of the 2012 IEEE Int. Conf. on Robotics and Automation (ICRA2012), pp. 3798-3804

Wiki maintained by Sean Yi <seanyi@wonikrobotics.com>

KitechLogo.jpg Wonikrobotics logo.png





Whos here now:   Members 0   Guests 0   Bots & Crawlers 1