Go to the documentation of this file.00001 #include "FRIComm.hh"
00002
00003 #include "FRICheck.hh"
00004
00005 #include "YARPComm.hh"
00006 #include "ROSComm.hh"
00007
00008 #include <signal.h>
00009
00010 #include <string.h>
00011 #include <time.h>
00012 #include <sys/time.h>
00013 #include <unistd.h>
00014
00015 int should_exit=0;
00016
00018 void catchsignal(int signo)
00019 {
00020 should_exit=1;
00021 printf("\n# caught Ctrl-C, exiting...\n");
00022 }
00023
00024
00025
00026 bool friConfigure(const char* side, FRIThread *kuka, char* yarp_prefix)
00027 {
00028 if(strcmp(side, "left") != 0 && strcmp(side, "right") != 0)
00029 return false;
00030
00031 if(strcmp(side, "left") == 0) {
00032 strcpy(yarp_prefix, "/lwr/left/robot");
00033 kuka->configureNetwork(7001, "192.168.139.12", 7010);
00034 kuka->limitChecker()->setHandSide(FRICheck::LEFT);
00035 }
00036
00037 if(strcmp(side, "right") == 0)
00038 {
00039 strcpy(yarp_prefix, "/lwr/right/robot");
00040 kuka->configureNetwork(7002, "192.168.139.10", 7010);
00041 kuka->limitChecker()->setHandSide(FRICheck::RIGHT);
00042 }
00043
00044 return true;
00045 }
00046
00047 int main(int argc, char** argv)
00048 {
00049
00050 struct sigaction act;
00051 act.sa_handler = catchsignal;
00052 act.sa_flags = 0;
00053 if ((sigemptyset(&act.sa_mask) == -1) ||
00054 (sigaction(SIGINT, &act, NULL) == -1)) {
00055 printf("# Failed to set SIGINT to handle Ctrl-C, oh well\n");
00056 }
00057
00058 char yarp_prefix[1024] = "/lwr";
00059 bool configured = false;
00060
00061 FRIThread kuka;
00062
00063
00064 if(argc >= 2)
00065 configured = friConfigure(argv[1], &kuka, yarp_prefix);
00066
00067
00068 YARPComm yarp(yarp_prefix);
00069
00070
00071 ros::init(argc, argv, "lwr", ros::init_options::NoSigintHandler);
00072 ROSComm ros;
00073
00074
00075 configured |= ros.configure(&kuka);
00076
00077
00078
00079 if(!configured)
00080 {
00081 printf("usage: fri [left|right]\n");
00082 return 0;
00083 }
00084
00085
00086
00087 if(!kuka.start()) {
00088 printf("# FRI part failed to start, exiting before doing more harm...\n");
00089 return -1;
00090 }
00091
00092
00093 yarp.start(&kuka);
00094 ros.start(&kuka);
00095
00096 int seq=0;
00097
00098 bool showOutput = isatty(1);
00099
00100 while(!should_exit) {
00101 RobotData data = kuka.data();
00102 RobotCommand cmd = kuka.cmd();
00103 RobotStatus status = kuka.status();
00104
00105 if(seq != data.seq && showOutput) {
00106 char buffer[4096];
00107 FRIComm::printStatus(buffer, data, cmd, status);
00108 printf("%s", buffer);
00109 seq = data.seq;
00110 }
00111
00112 usleep(500000);
00113 }
00114
00115 kuka.finish();
00116 ros.finish();
00117 yarp.finish();
00118
00119 printf("# exiting program.\n");
00120 }