Difference between revisions of "Rock Paper Scissors"
Alexalspach (Talk | contribs) |
Alexalspach (Talk | contribs) |
||
Line 560: | Line 560: | ||
*[[File:KIST_AR010devices_patch_20131206.zip]] '''< Updated.''' AHv2.0! --[[User:Alexalspach|Alex Alspach]] ([[User talk:Alexalspach|talk]]) 14:16, 6 December 2013 (KST) | *[[File:KIST_AR010devices_patch_20131206.zip]] '''< Updated.''' AHv2.0! --[[User:Alexalspach|Alex Alspach]] ([[User talk:Alexalspach|talk]]) 14:16, 6 December 2013 (KST) | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
Revision as of 14:19, 6 December 2013
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
MATLAB Sys Cmd
TCP/IP Comm. Programs
Input:
0: Ready
1: Rock
2: Paper
3: Scissors
Keyboard Input
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
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.
Source
AHAS Installer
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.
File:Control ERHand patch 20121119.zip- File:Control ERHand patch 20121119.zip < Updated. Korean style scissors! --Alex Alspach (talk) 18:03, 20 November 2012 (KST)
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
- File:KIST AR010devices patch 20131206.zip < Updated. AHv2.0! --Alex Alspach (talk) 14:16, 6 December 2013 (KST)
Debug
Whos here now: Members 0 Guests 0 Bots & Crawlers 1 |