Difference between revisions of "Rock Paper Scissors"
Alexalspach (Talk | contribs) (→Rock, Paper, Scissors Commander for KIST) |
Alexalspach (Talk | contribs) (→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
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 |