示例#1
0
int main(int argc, char** argv)
{
    ros::init(argc, argv, "serial_node");
    ros::NodeHandle n;

    // Initialize communication
    initComm();

    // Define the callback functions:
    ros::ServiceServer command_srv =
	n.advertiseService("speed_command", commandcb);
    ros::ServiceServer command_srv2 =
	n.advertiseService("long_command", longcb);
    ros::ServiceServer request_srv =
	n.advertiseService("position_request", requestcb);
    ros::Timer kb_timer = n.createTimer(ros::Duration(0.02), keyboardcb);

    // Setup publisher:
    pub = n.advertise<geometry_msgs::PointStamped> ("serviced_values", 100);

    ROS_INFO("Starting Serial Node...");

    // Wait for new data:
    ros::spin();
}
示例#2
0
int main(int argc, char* argv[]) {
  Eigen::internal::setNbThreads(3);

  Parser parser;
  GeneralConfig::scale = 10;
  parser.addGroup(TrackingConfig());
  parser.addGroup(RecordingConfig());
  parser.addGroup(SceneConfig());
  parser.addGroup(GeneralConfig());

  parser.addGroup(BulletConfig());
  parser.read(argc, argv);


  initComm();
  TowelTracker2 tv;
  extern bool LIVE;
  if (LIVE) tv.runOnline();
  else tv.runOffline();

  // extern bool LIVE;
  // if (LIVE) TrackerSystem.runOnline();
  // else TrackerSystem.runOffline();


}
int main(int argc, char** argv)
{
    int i = 0;
    int j = 0;
    int test = 0;
    // Implement communication:
    printf("Initializing Wireless Communication\n");
    initComm();

    printf("Reading Controls\n");
    // Read necessary robot instructions:
    Control *robot_2;
    unsigned char filename[128];
    sprintf(filename, "%s", "/home/jarvis/Dropbox/ccode/PrescriptedTrepPlay/TrajectoryData.txt");
    robot_2 = ReadControls(filename, 2);
    
    longdelay.tv_sec = 0.0;
    longdelay.tv_nsec = robot_2->DT*1000000000;
	
    printf("Beginning movement execution\n");
    // Now we begin a loop where we run through each entry of the velocity
    // arrays and send out the info contained in each one
    i = 0;
 
    while(1)
    {
	if(kbhit() && KeyboardInterpreter())
	    break;
	if(i < robot_2->num && exit_flag == 0)
	{
	    printf("%5.2f\n",100.0*i/robot_2->num);
	    sendArrayEntry(i, robot_2);
	    if(nanosleep(&longdelay,&delayrem)) printf("Nanosleep Error\n");
	}
	else
	{
	    stopRobots();
	    if(j == 0) printf("Stopping Robots!\n");
	    j = 1;
//	    assert(0);
	}
	i++;
    }

    close(fd);

    printf("Program Complete!\n");
    return 0;
}
int main(int argc, char** argv)
{
    ros::init(argc, argv, "serial_node");
    ros::NodeHandle n;

    // Initialize communication
    initComm();

    // Define the callback functions:
    ros::ServiceServer command_srv =
	n.advertiseService("speed_command", commandcb);
    ros::ServiceServer command_srv2 =
	n.advertiseService("long_command", longcb);
    ros::ServiceServer request_srv =
	n.advertiseService("position_request", requestcb);
    ros::Timer kb_timer = n.createTimer(ros::Duration(0.02), keyboardcb);

    // get the number of robots
    if (ros::param::has("/number_robots"))
	ros::param::get("/number_robots",nr);
    else
    {
	ROS_WARN("Number of robots not set...");
	ros::param::set("/number_robots", 1);
	nr = 1;
    }

    // Setup publisher:
    for (int j=0; j<nr; j++)
    {
	std::stringstream ss;
	ss << "/robot_" << j+1 << "/serviced_values";
	pub[j] = n.advertise<geometry_msgs::PointStamped> (ss.str(), 100);
    }

    ROS_INFO("Starting Serial Node...");
    
    // Wait for new data:
    ros::spin();
}
int main(int argc, char* argv[]) {

  Eigen::internal::setNbThreads(2);

  Parser parser;
  GeneralConfig::scale = 10;
  parser.addGroup(TrackingConfig());
  parser.addGroup(SceneConfig());
  parser.addGroup(GeneralConfig());

  parser.addGroup(BulletConfig());
  parser.read(argc, argv);

  initComm();
  DefaultSingleHypRobotAndRopeTracker TrackerSystem;

  extern bool LIVE;
  if (LIVE) TrackerSystem.runOnline();
  else TrackerSystem.runOffline();


}
int main() {

  initComm();

  Scene scene;
  SceneConfig::enableIK = false;

  PR2Manager pr2m(scene);
  KinectTransformer kinectTrans(pr2m.pr2->robot);
  kinectTrans.calibrate(btTransform::getIdentity());
  CoordinateTransformer CT(kinectTrans.getWFC());
  
  FakeKinect fk(scene.env->osg, CT.worldFromCamEigen);

  scene.startViewer();
  scene.step(0);

  while (true) {
    fk.sendMessage();
  }

}
示例#7
0
/*===================================================================*/
engine::engine(){
  net_comm = new MPIComm;
  mailbox = new MailBox(net_comm);
  SetStartTime();
  initComm();
  last_task_handle = 0;
  term_ok = TERMINATE_INIT;
  memory_policy = ENGINE_ALLOCATION;
  runMultiThread=true;
  dlb.initDLB();
  thread_model = 0;
  task_submission_finished=false;
  data_memory = NULL;
  thread_manager = NULL;
  LOG_INFO(LOG_MULTI_THREAD,"mpi tick :%f\n",MPI_Wtick());
  char fn[20];
  sprintf(fn,"comm_log_%02d.txt",me);
  comm_log=fopen(fn,"w");
  terminate_barrier = MPI_REQUEST_NULL;
  user_ctx = NULL;
  LOG_INFO(LOG_DATA,"Comm Log file : %s opened %p",fn,comm_log);
}
示例#8
0
int main(int argc, char *argv[]) {

  // command line options
  GeneralConfig::scale = 10;
  SceneConfig::enableIK = SceneConfig::enableHaptics = false;
  SceneConfig::enableRobot = true;
  
  Parser parser;
  parser.addGroup(TrackingConfig());
  parser.addGroup(RecordingConfig());
  parser.addGroup(GeneralConfig());
  parser.addGroup(BulletConfig());
  parser.addGroup(SceneConfig());
  parser.read(argc,argv);


  // comm stuff
  initComm();
  FileSubscriber pcSub("kinect","pcd");
  CloudMessage cloudMsg;
  FileSubscriber ropeSub("rope_pts","pcd");
  CloudMessage ropeMsg;
  FileSubscriber labelSub("labels","png");
  ImageMessage labelMsg;
  FileSubscriber endSub("rope_ends","txt");
  VecVecMessage<float> endMsg;
  FileSubscriber jointSub("joint_states","txt");
  Retimer<VectorMessage<double> > retimer(&jointSub);


  Scene scene;
  PR2Manager pr2m(scene);
  MonitorForGrabbing lMonitor(pr2m.pr2->robot->GetManipulators()[5], scene.env->bullet->dynamicsWorld);
  MonitorForGrabbing rMonitor(pr2m.pr2->robot->GetManipulators()[7], scene.env->bullet->dynamicsWorld);

  vector<double> firstJoints = doubleVecFromFile(filePath("data000000000000.txt", "joint_states").string());
  ValuesInds vi = getValuesInds(firstJoints);
  pr2m.pr2->setDOFValues(vi.second, vi.first);

  // get kinect transform
  KinectTrans kinectTrans(pr2m.pr2->robot);
  kinectTrans.calibrate(btTransform(btQuaternion(0.669785, -0.668418, 0.222562, -0.234671), btVector3(0.263565, -0.038203, 1.762524)));
  CoordinateTransformer CT(kinectTrans.getKinectTrans());

  // load table
  /////////////// load table
  vector<btVector3> tableCornersCam = toBulletVectors(floatMatFromFile(onceFile("table_corners.txt").string()));
  vector<btVector3> tableCornersWorld = CT.toWorldFromCamN(tableCornersCam);
  BulletObject::Ptr table = makeTable(tableCornersWorld, .1*GeneralConfig::scale);
  table->setColor(1,1,1,.25);

  // load rope
  vector<btVector3> ropePtsCam = toBulletVectors(floatMatFromFile(onceFile("init_rope.txt").string()));
  CapsuleRope::Ptr rope(new CapsuleRope(CT.toWorldFromCamN(ropePtsCam), .0075*METERS));

  // plots
  PointCloudPlot::Ptr kinectPts(new PointCloudPlot(2));
  CorrPlots corrPlots;

  // setup scene
  if (TrackingConfig::showKinect) scene.env->add(kinectPts);
  scene.env->add(rope);
  scene.env->add(table);
  if (TrackingConfig:: showLines) scene.env->add(corrPlots.m_lines);
  lMonitor.setBodies(rope->children);
  rMonitor.setBodies(rope->children);

  // recording
  ScreenRecorder* rec;
  if (RecordingConfig::record != DONT_RECORD){
    rec = new ScreenRecorder(scene.viewer);
  }


  // end tracker
  vector<RigidBodyPtr> rope_ends;
  rope_ends.push_back(rope->bodies[0]);
  rope_ends.push_back(rope->bodies[rope->bodies.size()-1]);
  MultiPointTrackerRigid endTracker(rope_ends,scene.env->bullet->dynamicsWorld);
  TrackerPlotter trackerPlotter(endTracker);
  //scene.env->add(trackerPlotter.m_fakeObjects[0]);
  //scene.env->add(trackerPlotter.m_fakeObjects[1]);

  scene.startViewer();
  scene.setSyncTime(true);

  scene.idle(true);

  vector<double> oldvals, newvals;
  int count=0;
  while (pcSub.recv(cloudMsg)) {
    ENSURE(ropeSub.recv(ropeMsg));
    vector<btVector3> obsPts = CT.toWorldFromCamN(toBulletVectors(ropeMsg.m_data));
    ENSURE(labelSub.recv(labelMsg));
    cv::Mat labels = toSingleChannel(labelMsg.m_data);
    ENSURE(endSub.recv(endMsg));
    vector<btVector3> newEnds = CT.toWorldFromCamN(toBulletVectors(endMsg.m_data));
    endTracker.update(newEnds);
    trackerPlotter.update();

    ColorCloudPtr cloudCam  = cloudMsg.m_data;
    ColorCloudPtr cloudWorld(new ColorCloud());
    pcl::transformPointCloud(*cloudCam, *cloudWorld, CT.worldFromCamEigen);
    kinectPts->setPoints1(cloudWorld);
    cout << "loaded cloud " << count << endl;
    count++;


    VectorMessage<double>* jointMsgPtr = retimer.msgAt(cloudMsg.getTime());
    vector<double> currentJoints = jointMsgPtr->m_data;
    ValuesInds vi = getValuesInds(currentJoints);
    newvals = vi.first;
    if (oldvals.size()==0) {
      cout << "first one" << endl;
      oldvals = newvals;
    }


    CT.reset(kinectTrans.getKinectTrans());


    cv::Mat ropeMask = toSingleChannel(labels) == 1;

    for (int iter=0; iter<TrackingConfig::nIter; iter++) {
      cout << "iteration " << iter << endl;

      pr2m.pr2->setDOFValues(vi.second, interpolateBetween(oldvals, newvals, (iter+0.00001)/TrackingConfig::nIter));

      vector<btVector3> estPts = rope->getNodes();
      Eigen::MatrixXf ropePtsCam = toEigenMatrix(CT.toCamFromWorldN(estPts));
      vector<float> pVis = calcVisibility(rope->bodies, scene.env->bullet->dynamicsWorld, CT.worldFromCamUnscaled.getOrigin()*METERS, TrackingConfig::sigA*METERS, TrackingConfig::nSamples); 
      colorByVisibility(rope, pVis);
      SparseArray corr = toSparseArray(calcCorrProb(toEigenMatrix(estPts), toEigenMatrix(obsPts), toVectorXf(pVis), TrackingConfig::sigB*METERS, TrackingConfig::outlierParam),TrackingConfig::cutoff);
      corrPlots.update(estPts, obsPts, corr);
      vector<btVector3> impulses = calcImpulsesSimple(estPts, obsPts, corr, TrackingConfig::impulseSize);
      applyImpulses(impulses, rope);

      if (RecordingConfig::record == EVERY_ITERATION || 
	  RecordingConfig::record == FINAL_ITERATION && iter==TrackingConfig::nIter-1)
	    rec->snapshot();

      lMonitor.update();
      rMonitor.update();

      scene.step(DT);
    }
    oldvals = newvals;

  }
}