Example #1
0
void CallEvent(BaseComponent *object, Events event)
{
    if (EventFactory::connections.count(object) > 0) {
        if (EventFactory::connections[object].count(event) > 0) {
            auto& connectionList = EventFactory::connections[object][event];

            for (auto& connection : connectionList) {
                auto slot = connection.getSlot();
                if (slot && slot->useable())
                {
                    slot->_func();
                }
            }
        }
    }
}
Example #2
0
int main(int argc, char** argv) {

  if (argc < 2) {
    std::cerr << "usage: " << argv[0] << " OUTPUTFILE.data\n";
    return 1;
  }

  ach_channel_t chan_hubo_state;

  ach_status_t r;

  
  r = ach_open(&chan_hubo_state, HUBO_CHAN_STATE_NAME, NULL);
  if (r != ACH_OK) {
    std::cerr << "error opening state channel: " << ach_result_to_string(r) << "\n";
    return 1;
  }

  LogWriter writer(argv[1], 200);

  struct hubo_state H_state;

  JointInfoArray jinfo;
  buildJointTable(jinfo);

  writer.add(&H_state.time, "state.time", "s");

  for (size_t i=0; i<jinfo.size(); ++i) {

    const std::string& name = jinfo[i].second;
    const size_t index = jinfo[i].first;

    writer.add(&H_state.joint[index].ref, "state.joint." + name + ".ref", "rad");
    writer.add(&H_state.joint[index].pos, "state.joint." + name + ".pos", "rad");
    writer.add(&H_state.joint[index].cur, "state.joint." + name + ".cur", "amp");
    writer.add(&H_state.joint[index].vel, "state.joint." + name + ".vel", "rad/s");
    writer.add(&H_state.joint[index].duty, "state.joint." + name + ".duty");
    writer.add(&H_state.joint[index].heat, "state.joint." + name + ".heat", "J");
    writer.add(&H_state.joint[index].active, "state.joint." + name + ".active");
    writer.add(&H_state.joint[index].zeroed, "state.joint." + name + ".zeroed");

  }

  for (int i=0; i<4; ++i) {

    std::ostringstream ostr;
    ostr << "state.imu" << i;
    std::string imustr = ostr.str();

    writer.add(&H_state.imu[i].a_x, imustr+".a_x");
    writer.add(&H_state.imu[i].a_y, imustr+".a_y");
    writer.add(&H_state.imu[i].a_z, imustr+".a_z");

    writer.add(&H_state.imu[i].w_x, imustr+".w_x");
    writer.add(&H_state.imu[i].w_y, imustr+".w_y");
    writer.add(&H_state.imu[i].w_z, imustr+".w_z");

  }

  for (int i=0; i<4; ++i) {

    std::ostringstream ostr;
    ostr << "state.ft" << i;
    std::string ftstr = ostr.str();

    writer.add(&H_state.ft[i].m_x, ftstr+".m_x");
    writer.add(&H_state.ft[i].m_y, ftstr+".m_y");
    writer.add(&H_state.ft[i].f_z, ftstr+".f_z");

  }

  writer.sortChannels();

  writer.writeHeader();

  std::cout << "Opened " << argv[1] << " for output, Ctrl+C to halt logging.\n";

  signal(SIGINT, interruptHandler);

  while (!interrupted) {

    bool write = false;
    size_t fs;

    r = ach_get( &chan_hubo_state, &H_state, sizeof(H_state), &fs, NULL, ACH_O_WAIT );
    if (useable(r)) {
      write = true;
    } else {
      std::cout << "warning: ach returned " << ach_result_to_string(r) << " for state\n";
    }

    if (write) {
      writer.writeSample();
    }

  }

  std::cout << "Successfully wrote " << argv[1] << "\n";

  return 0;

}