Latest revision as of 15:02, 6 December 2013

Contents

[edit] 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

[edit] 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


[edit] 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)

[edit] Data

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


[edit] Port

6150

[edit] Sampling Time

1000Hz, 1000us



[edit] MATLAB Sys Cmd

File:MATLAB callEXE.zip

[edit] TCP/IP Comm. Programs

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

[edit] Keyboard Input

[edit] 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;
}


[edit] Command Argument

[edit] 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;
}

Note: Shift-Right-click folder to start command prompt at that path.

[edit] Source




[edit] AHAS Installer


[edit] RPS Controller Patch

IMPORTANT: Please download this file and move it to your Allegro Hand Application Studio controls directory.

Program Files (x86)\SimLab\Allegro Hand Application Studio\bin\controls

Use this new controller file to overwrite the original located in the controls folder.



[edit] Device Offsets / Directions Patch

IMPORTANT: Please download this file and overwrite your Allegro Hand Application Studio devices directory.

Program Files (x86)\SimLab\Allegro Hand Application Studio\bin\models\Etc\ERHand\devices




[edit] Debug





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