(Rock, Paper, Scissors Commander for KIST)
(Message)
Line 13: Line 13:
 
===Message===
 
===Message===
  
{|
+
{|style=" border-collapse: separate; border-spacing: 15; border-width: 2px; border-style: solid; border-color: #CCCCCC; padding:  0px; text-align: center; width: 700px"
|-
+
|-style="background: #D0D0D0"
 
|Message ID
 
|Message ID
 
|Data Size
 
|Data Size
Line 22: Line 22:
 
|Data
 
|Data
 
|-
 
|-
|2 bytes
+
|style="background: #F0F0F0" | 2 bytes
|2 bytes
+
|style="background: #F0F0F0" | 2 bytes
|2 bytes
+
|style="background: #F0F0F0" | 2 bytes
|1 byte
+
|style="background: #F0F0F0" | 1 byte
|1 byte
+
|style="background: #F0F0F0" | 1 byte
 
|4 bytes
 
|4 bytes
 
|-
 
|-
|1
+
|style="background: #F0F0F0" | 1
|4
+
|style="background: #F0F0F0" | 4
|0
+
|style="background: #F0F0F0" | 0
|0
+
|style="background: #F0F0F0" | 0
|0
+
|style="background: #F0F0F0" | 0
 
|int: 1, 10, 11, 12
 
|int: 1, 10, 11, 12
 
|-
 
|-

Revision as of 12:12, 20 November 2012

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:

01: Ready
10: Rock
11: Paper
12: Scissors

Message

Message ID Data Size Reserved Flag Checksum Data
2 bytes 2 bytes 2 bytes 1 byte 1 byte 4 bytes
1 4 0 0 0 int: 1, 10, 11, 12

Header

8 bytes total

  • Message ID: 1 (2 bytes)
  • Data Size: 4 (2 bytes)
  • Reserved: 0 (2 bytes)
  • Flag: 0 (1 byte)
  • Checksum: 0 (1 byte)

Data

Integer: 1, 10, 11 or 12 (4 bytes)


Port

6150

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





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