예제 #1
0
/*****************************************************************************
******************************************************************************
Function Name	: add_test_sine_task
Date		: Feb 1999
Remarks:

adds the task to the task menu

******************************************************************************
Paramters:  (i/o = input/output)

none

*****************************************************************************/
void
add_test_sine_task( void )

{
  int i, j;
  static int firsttime = TRUE;
  char string[100];
  
  if (firsttime) {
    firsttime = FALSE;
    off = my_vector(1,n_dofs);
    amp = my_matrix(1,n_dofs,1,MAX_SINE);
    phase = my_matrix(1,n_dofs,1,MAX_SINE);
    freq = my_matrix(1,n_dofs,1,MAX_SINE);
    n_sine = my_ivector(1,n_dofs);
    target = (SL_DJstate *)my_calloc(n_dofs+1,sizeof(SL_DJstate),MY_STOP);
    
    addTask("Test Sine Task", init_test_sine_task,run_test_sine_task, change_test_sine_task);

    for (i=1; i<=N_DOFS; ++i) {
      sprintf(string,"%s_tar_th",joint_names[i]);
      addVarToCollect((char *)&(target[i].th),string,"rad", DOUBLE,FALSE);
      sprintf(string,"%s_tar_thd",joint_names[i]);
      addVarToCollect((char *)&(target[i].thd),string,"rad/s", DOUBLE,FALSE);
      sprintf(string,"%s_tar_thdd",joint_names[i]);
      addVarToCollect((char *)&(target[i].thdd),string,"rad/s^2", DOUBLE,FALSE);
    }

    updateDataCollectScript();
    
  }
  
}    
예제 #2
0
/*!*****************************************************************************
 *******************************************************************************
 \note  init_user_task
 \date  Nov. 2007
 
 \remarks 
 
 initializes user task functionality
 
 *******************************************************************************
 Function Parameters: [in]=input,[out]=output

 none 

 ******************************************************************************/
int
init_user_task(void)

{
  
  int i,j;


  addToMan("toggleSimBase","toggles the use of the simulated base state on/off",
	   toggleSimulatedBaseState);

  initialize_base_state_estimation(&(misc_sensor[B_Q0_IMU]), &(misc_sensor[B_AD_A_IMU]),
   		&(misc_sensor[B_XACC_IMU]), task_servo_rate);

  init_state_est_lin_task();

  if(!raw_data.init())
      return FALSE;

  //data collect for raw joint states and misc sensors
  char string[100];
  for (i=1; i<=n_dofs; ++i) {
      sprintf(string,"%s_raw_th",joint_names[i]);
      addVarToCollect((char *)&(raw_joint_state[i].th),string,"rad", DOUBLE,FALSE);
      sprintf(string,"%s_raw_thd",joint_names[i]);
      addVarToCollect((char *)&(raw_joint_state[i].thd),string,"rad/s", DOUBLE,FALSE);
      sprintf(string,"%s_raw_thdd",joint_names[i]);
      addVarToCollect((char *)&(raw_joint_state[i].thdd),string,"rad/s^2", DOUBLE,FALSE);
//      sprintf(string,"%s_raw_u",joint_names[i]);
//      addVarToCollect((char *)&(raw_joint_state[i].u),string,"Nm", DOUBLE,FALSE);
//      sprintf(string,"%s_raw_ufb",joint_names[i]);
//      addVarToCollect((char *)&(raw_joint_state[i].ufb),string,"Nm", DOUBLE,FALSE);
      sprintf(string,"%s_raw_load",joint_names[i]);
      addVarToCollect((char *)&(raw_joint_state[i].load),string,"Nm", DOUBLE,FALSE);
  }

  for (i=1; i<=n_misc_sensors; ++i) {
    sprintf(string,"%s_raw",misc_sensor_names[i]);
    addVarToCollect((char *)&(raw_misc_sensor[i]),string,"-",DOUBLE,FALSE);
  }

  updateDataCollectScript();

  return TRUE;

}
예제 #3
0
HInvDynExample::HInvDynExample() : config_file_("HInvDynExampleConfig.cf"),
    contact_helper_(config_file_), hinvdyn_solver_(kinematics_,
    momentum_helper_, contact_helper_, endeff_kinematics_), dyn_eqs_(hinvdyn_solver_),
    cog_ctrl_(hinvdyn_solver_), left_foot_constr_(hinvdyn_solver_),
    right_foot_constr_(hinvdyn_solver_), joint_ctrl_(hinvdyn_solver_),
    left_frc_reg_(hinvdyn_solver_), right_frc_reg_(hinvdyn_solver_){

  // stop data collection to avoid crashes
  stopcd();

  //set the endeffector constraints for double support
  std::cout << "N_ENDEFFS :  " << N_ENDEFFS << std::endl;
  for(int i=1; i<=N_ENDEFFS; ++i){
    endeff_constraints_[i] = endeff[i];
    for(int j=1; j<=6; ++j)
      endeff_constraints_[i].c[j] = 1;
  }

  for (int i = 1; i < N_DOFS; ++i)
  {
    std::cout << "joint_names " << joint_names[i] << " " << i << std::endl;
  }
  // initialize our helpers
  kinematics_.initialize(joint_state, base_state, base_orient,endeff_constraints_);
  momentum_helper_.initialize();
  contact_helper_.initialize(&kinematics_);
  hinvdyn_solver_.initialize();

  // read simulation parameters
  if(!read_parameter_pool_double(config_file_.c_str(),"push_force",&push_force_))
    assert(false && "reading parameter push_force failed");
  if(!read_parameter_pool_double(config_file_.c_str(),"push_dur",&push_dur_))
    assert(false && "reading parameter push_dur failed");

  // read ranks from config file
  if(!read_parameter_pool_int(config_file_.c_str(),"foot_constr_rank",&foot_constr_rank_))
    assert(false && "reading parameter foot_constr_rank failed");
  if(!read_parameter_pool_int(config_file_.c_str(),"joint_ctrl_rank",&joint_ctrl_rank_))
    assert(false && "reading parameter joint_ctrl_rank failed");
  if(!read_parameter_pool_int(config_file_.c_str(),"cog_ctrl_rank",&cog_ctrl_rank_))
    assert(false && "reading parameter cog_ctrl_rank failed");
  if(!read_parameter_pool_int(config_file_.c_str(),"frc_reg_rank",&frc_reg_rank_))
    assert(false && "reading parameter frc_reg_rank failed");

  // read PD gains from config file
  double buffer[N_DOFS+6+1];
  if(!read_parameter_pool_double_array(config_file_.c_str(),"COG_P_GAINS",3,buffer))
    assert(false && "reading parameter COG_P_GAINS failed");
  cog_p_gains_ = Eigen::Map<Eigen::Vector3d>(&buffer[1]);
  if(!read_parameter_pool_double_array(config_file_.c_str(),"COG_D_GAINS",3,buffer))
    assert(false && "reading parameter COG_D_GAINS failed");
  cog_d_gains_ = Eigen::Map<Eigen::Vector3d>(&buffer[1]);
  if(!read_parameter_pool_double_array(config_file_.c_str(),"POSTURE_P_GAINS",N_DOFS+6,buffer))
    assert(false && "reading parameter POSTURE_P_GAINS failed");
  posture_p_gains_ = Eigen::Map<Eigen::Matrix<double, N_DOFS+6,1> >(&buffer[1]);
  if(!read_parameter_pool_double_array(config_file_.c_str(),"POSTURE_D_GAINS",N_DOFS+6,buffer))
    assert(false && "reading parameter POSTURE_D_GAINS failed");
  posture_d_gains_ = Eigen::Map<Eigen::Matrix<double, N_DOFS+6,1> >(&buffer[1]);

  // read weights from config file
  if(!read_parameter_pool_double_array(config_file_.c_str(),"FOOT_CONSTR_WEIGHT", 6, buffer))
      assert(false && "reading parameter FOOT_CONSTR_WEIGHT failed");
  foot_constr_weight_ = Eigen::Map<Eigen::Matrix<double, 6,1> >(&buffer[1]);
  if(!read_parameter_pool_double_array(config_file_.c_str(),"COG_CTRL_WEIGHT", 6, buffer))
      assert(false && "reading parameter COG_CTRL_WEIGHT failed");
  cog_ctrl_weight_ = Eigen::Map<Eigen::Matrix<double, 6,1> >(&buffer[1]);
  if(!read_parameter_pool_double_array(config_file_.c_str(),"FRC_REG_WEIGHT", 6, buffer))
      assert(false && "reading parameter FRC_REG_WEIGHT failed");
  frc_reg_weight_ = Eigen::Map<Eigen::Matrix<double, 6,1> >(&buffer[1]);
  if(!read_parameter_pool_double_array(config_file_.c_str(),"JOINT_CTRL_WEIGHT", N_DOFS+6, buffer))
      assert(false && "reading parameter JOINT_CTRL_WEIGHT failed");
  joint_ctrl_weight_ = Eigen::Map<Eigen::Matrix<double, N_DOFS+6,1> >(&buffer[1]);


  // setup task composers
  dyn_eqs_.initialize(0);
  right_foot_constr_.initialize(foot_constr_rank_, link2endeffmap[RIGHT_FOOT]);
  right_foot_constr_.weightingMat() = foot_constr_weight_.asDiagonal();
  left_foot_constr_.initialize(foot_constr_rank_, link2endeffmap[LEFT_FOOT]);
  left_foot_constr_.weightingMat() = foot_constr_weight_.asDiagonal();
  cog_ctrl_.initialize(cog_ctrl_rank_);
  cog_ctrl_.weightingMat() = cog_ctrl_weight_.asDiagonal();
  joint_ctrl_.initialize(joint_ctrl_rank_);
  joint_ctrl_.weightingMat() = joint_ctrl_weight_.asDiagonal();
  right_frc_reg_.initialize(frc_reg_rank_, RIGHT_FOOT, true);
  right_frc_reg_.weightingMat() = frc_reg_weight_.asDiagonal();
  left_frc_reg_.initialize(frc_reg_rank_, LEFT_FOOT, true);
  left_frc_reg_.weightingMat() = frc_reg_weight_.asDiagonal();


  // subscribe our controllers and constraints to the hierarchical solver
  hinvdyn_solver_.sub_cost_composers_.push_back(
      static_cast<HierarchAffineCost*>(&dyn_eqs_));
  hinvdyn_solver_.sub_cost_composers_.push_back(
      static_cast<HierarchAffineCost*>(&joint_ctrl_));
  hinvdyn_solver_.sub_cost_composers_.push_back(
      static_cast<HierarchAffineCost*>(&cog_ctrl_));
  hinvdyn_solver_.sub_cost_composers_.push_back(
      static_cast<HierarchAffineCost*>(&right_foot_constr_));
  hinvdyn_solver_.sub_cost_composers_.push_back(
      static_cast<HierarchAffineCost*>(&left_foot_constr_));
  hinvdyn_solver_.sub_cost_composers_.push_back(
      static_cast<HierarchAffineCost*>(&right_frc_reg_));
  hinvdyn_solver_.sub_cost_composers_.push_back(
      static_cast<HierarchAffineCost*>(&left_frc_reg_));

  // get some initial states of the robot for tracking
  cog_des_ = kinematics_.cog();

  default_posture_ = kinematics_.generalizedJointPositions();
  for(int i=1; i<=N_DOFS; ++i){
    default_posture_[i-1] = joint_des_state[i].th;
    std::string varname = std::string(joint_names[i]);
    varname.append("_ref_th");
    std::cout << "adding variable " << varname << std::endl;
    addVarToCollect((char *)&(default_posture_[i-1]), varname.c_str(),"rad",DOUBLE,TRUE);
  }

  // register variables for data collection
  addVarToCollect((char *)&(cog_des_[0]), "cog_des_x","m",DOUBLE,TRUE);
  addVarToCollect((char *)&(cog_des_[1]), "cog_des_y","m",DOUBLE,TRUE);
  addVarToCollect((char *)&(cog_des_[2]), "cog_des_z","m",DOUBLE,TRUE);
  addVarToCollect((char *)&(cog_ref_[0]), "cog_ref_ddx","m/s^2",DOUBLE,TRUE);
  addVarToCollect((char *)&(cog_ref_[1]), "cog_ref_ddy","m/s^2",DOUBLE,TRUE);
  addVarToCollect((char *)&(cog_ref_[2]), "cog_ref_ddz","m/s^2",DOUBLE,TRUE);

  // update SL data collection and start collecting data
  updateDataCollectScript();
  scd();

  std::cout << "Initialization done." << std::endl;

  task_start_time_ = task_servo_time;
  for(int i=1; i<=N_DOFS; ++i){
    init_joint_state_uff_[i-1] = joint_des_state[i].uff;
    init_joint_state_th_[i-1] = joint_des_state[i].th;
    init_joint_state_thd_[i-1] = joint_des_state[i].thd;
    init_joint_state_thdd_[i-1] = joint_des_state[i].thdd;
  }
}
예제 #4
0
/*!*****************************************************************************
 *******************************************************************************
  \note  init_ros_servo
  \date  Dec. 1997

  \remarks 

  initializes servo specific things

 *******************************************************************************
 Function Parameters: [in]=input,[out]=output

 none

 ******************************************************************************/
void
init_ros_servo(void)
{
  int j, i;
  char string[100];

  if (ros_servo_initialized) {
    printf("Task Servo is already initialized\n");
    return;
  }

  // the servo name
  sprintf(servo_name,"ros");

  // initialize shared memories and shared semaphores
  if (!init_shared_memory())
    return;

  /* inverse dynamics and other basic kinematic stuff*/
  if (!init_dynamics())
    return;

  // initialize kinematics
  init_kinematics();

  // add variables to data collection
  ros_servo_rate=servo_base_rate/task_servo_ratio;
  initCollectData(ros_servo_rate);

  for (i=1; i<=n_dofs; ++i) {
    printf("%d...",i);
    fflush(stdout);
    sprintf(string,"%s_th",joint_names[i]);
    addVarToCollect((char *)&(joint_state[i].th),string,(char *)"rad", DOUBLE,FALSE);
    sprintf(string,"%s_thd",joint_names[i]);
    addVarToCollect((char *)&(joint_state[i].thd),string,(char *)"rad/s", DOUBLE,FALSE);
    sprintf(string,"%s_thdd",joint_names[i]);
    addVarToCollect((char *)&(joint_state[i].thdd),string,(char *)"rad/s^2", DOUBLE,FALSE);
    sprintf(string,"%s_u",joint_names[i]);
    addVarToCollect((char *)&(joint_state[i].u),string,(char *)"Nm", DOUBLE,FALSE);
    sprintf(string,"%s_ufb",joint_names[i]);
    addVarToCollect((char *)&(joint_state[i].ufb),string,(char *)"Nm", DOUBLE,FALSE);
    sprintf(string,"%s_load",joint_names[i]);
    addVarToCollect((char *)&(joint_state[i].load),string,(char *)"Nm", DOUBLE,FALSE);
    sprintf(string,"%s_des_th",joint_names[i]);
    addVarToCollect((char *)&(joint_des_state[i].th),string,(char *)"rad",DOUBLE,FALSE);
    sprintf(string,"%s_des_thd",joint_names[i]);
    addVarToCollect((char *)&(joint_des_state[i].thd),string,(char *)"rad/s",DOUBLE,FALSE);
    sprintf(string,"%s_des_thdd",joint_names[i]);
    addVarToCollect((char *)&(joint_des_state[i].thdd),string,(char *)"rad/s^2",DOUBLE,FALSE);
    sprintf(string,"%s_uff",joint_names[i]);
    addVarToCollect((char *)&(joint_des_state[i].uff),string,(char *)"Nm",DOUBLE,FALSE);
  }

  // Cartesian variables
  for (i=1; i<=n_endeffs; ++i) {

    sprintf(string,"%s_x",cart_names[i]);
    addVarToCollect((char *)&(cart_state[i].x[_X_]),string,(char *)"m",DOUBLE,FALSE);
    sprintf(string,"%s_y",cart_names[i]);
    addVarToCollect((char *)&(cart_state[i].x[_Y_]),string,(char *)"m",DOUBLE,FALSE);
    sprintf(string,"%s_z",cart_names[i]);
    addVarToCollect((char *)&(cart_state[i].x[_Z_]),string,(char *)"m",DOUBLE,FALSE);

    sprintf(string,"%s_xd",cart_names[i]);
    addVarToCollect((char *)&(cart_state[i].xd[_X_]),string,(char *)"m",DOUBLE,FALSE);
    sprintf(string,"%s_yd",cart_names[i]);
    addVarToCollect((char *)&(cart_state[i].xd[_Y_]),string,(char *)"m",DOUBLE,FALSE);
    sprintf(string,"%s_zd",cart_names[i]);
    addVarToCollect((char *)&(cart_state[i].xd[_Z_]),string,(char *)"m",DOUBLE,FALSE);

    sprintf(string,"%s_xdd",cart_names[i]);
    addVarToCollect((char *)&(cart_state[i].xdd[_X_]),string,(char *)"m",DOUBLE,FALSE);
    sprintf(string,"%s_ydd",cart_names[i]);
    addVarToCollect((char *)&(cart_state[i].xdd[_Y_]),string,(char *)"m",DOUBLE,FALSE);
    sprintf(string,"%s_zdd",cart_names[i]);
    addVarToCollect((char *)&(cart_state[i].xdd[_Z_]),string,(char *)"m",DOUBLE,FALSE);

    sprintf(string,"%s_ad",cart_names[i]);
    addVarToCollect((char *)&(cart_orient[i].ad[_X_]),string,(char *)"rad/s",DOUBLE,FALSE);
    sprintf(string,"%s_bd",cart_names[i]);
    addVarToCollect((char *)&(cart_orient[i].ad[_Y_]),string,(char *)"rad/s",DOUBLE,FALSE);
    sprintf(string,"%s_gd",cart_names[i]);
    addVarToCollect((char *)&(cart_orient[i].ad[_Z_]),string,(char *)"rad/s",DOUBLE,FALSE);

    sprintf(string,"%s_add",cart_names[i]);
    addVarToCollect((char *)&(cart_orient[i].add[_X_]),string,(char *)"rad/s2",DOUBLE,FALSE);
    sprintf(string,"%s_bdd",cart_names[i]);
    addVarToCollect((char *)&(cart_orient[i].add[_Y_]),string,(char *)"rad/s2",DOUBLE,FALSE);
    sprintf(string,"%s_gdd",cart_names[i]);
    addVarToCollect((char *)&(cart_orient[i].add[_Z_]),string,(char *)"rad/s2",DOUBLE,FALSE);

    sprintf(string,"%s_des_x",cart_names[i]);
    addVarToCollect((char *)&(cart_des_state[i].x[_X_]),string,(char *)"m",DOUBLE,FALSE);
    sprintf(string,"%s_des_y",cart_names[i]);
    addVarToCollect((char *)&(cart_des_state[i].x[_Y_]),string,(char *)"m",DOUBLE,FALSE);
    sprintf(string,"%s_des_z",cart_names[i]);
    addVarToCollect((char *)&(cart_des_state[i].x[_Z_]),string,(char *)"m",DOUBLE,FALSE);

    sprintf(string,"%s_des_xd",cart_names[i]);
    addVarToCollect((char *)&(cart_des_state[i].xd[_X_]),string,(char *)"m",DOUBLE,FALSE);
    sprintf(string,"%s_des_yd",cart_names[i]);
    addVarToCollect((char *)&(cart_des_state[i].xd[_Y_]),string,(char *)"m",DOUBLE,FALSE);
    sprintf(string,"%s_des_zd",cart_names[i]);
    addVarToCollect((char *)&(cart_des_state[i].xd[_Z_]),string,(char *)"m",DOUBLE,FALSE);

    sprintf(string,"%s_des_xdd",cart_names[i]);
    addVarToCollect((char *)&(cart_des_state[i].xdd[_X_]),string,(char *)"m",DOUBLE,FALSE);
    sprintf(string,"%s_des_ydd",cart_names[i]);
    addVarToCollect((char *)&(cart_des_state[i].xdd[_Y_]),string,(char *)"m",DOUBLE,FALSE);
    sprintf(string,"%s_des_zdd",cart_names[i]);
    addVarToCollect((char *)&(cart_des_state[i].xdd[_Z_]),string,(char *)"m",DOUBLE,FALSE);

    sprintf(string,"%s_des_ad",cart_names[i]);
    addVarToCollect((char *)&(cart_des_orient[i].ad[_X_]),string,(char *)"rad/s",DOUBLE,FALSE);
    sprintf(string,"%s_des_bd",cart_names[i]);
    addVarToCollect((char *)&(cart_des_orient[i].ad[_Y_]),string,(char *)"rad/s",DOUBLE,FALSE);
    sprintf(string,"%s_des_gd",cart_names[i]);
    addVarToCollect((char *)&(cart_des_orient[i].ad[_Z_]),string,(char *)"rad/",DOUBLE,FALSE);

    sprintf(string,"%s_q0",cart_names[i]);
    addVarToCollect((char *)&(cart_orient[i].q[_Q0_]),string,(char *)"-",DOUBLE,FALSE);
    sprintf(string,"%s_q1",cart_names[i]);
    addVarToCollect((char *)&(cart_orient[i].q[_Q1_]),string,(char *)"-",DOUBLE,FALSE);
    sprintf(string,"%s_q2",cart_names[i]);
    addVarToCollect((char *)&(cart_orient[i].q[_Q2_]),string,(char *)"-",DOUBLE,FALSE);
    sprintf(string,"%s_q3",cart_names[i]);
    addVarToCollect((char *)&(cart_orient[i].q[_Q3_]),string,(char *)"-",DOUBLE,FALSE);

    sprintf(string,"%s_q0d",cart_names[i]);
    addVarToCollect((char *)&(cart_orient[i].qd[_Q0_]),string,(char *)"-",DOUBLE,FALSE);
    sprintf(string,"%s_q1d",cart_names[i]);
    addVarToCollect((char *)&(cart_orient[i].qd[_Q1_]),string,(char *)"-",DOUBLE,FALSE);
    sprintf(string,"%s_q2d",cart_names[i]);
    addVarToCollect((char *)&(cart_orient[i].qd[_Q2_]),string,(char *)"-",DOUBLE,FALSE);
    sprintf(string,"%s_q3d",cart_names[i]);
    addVarToCollect((char *)&(cart_orient[i].qd[_Q3_]),string,(char *)"-",DOUBLE,FALSE);

    sprintf(string,"%s_q0dd",cart_names[i]);
    addVarToCollect((char *)&(cart_orient[i].qdd[_Q0_]),string,(char *)"-",DOUBLE,FALSE);
    sprintf(string,"%s_q1dd",cart_names[i]);
    addVarToCollect((char *)&(cart_orient[i].qdd[_Q1_]),string,(char *)"-",DOUBLE,FALSE);
    sprintf(string,"%s_q2dd",cart_names[i]);
    addVarToCollect((char *)&(cart_orient[i].qdd[_Q2_]),string,(char *)"-",DOUBLE,FALSE);
    sprintf(string,"%s_q3dd",cart_names[i]);
    addVarToCollect((char *)&(cart_orient[i].qdd[_Q3_]),string,(char *)"-",DOUBLE,FALSE);

    sprintf(string,"%s_des_q0",cart_names[i]);
    addVarToCollect((char *)&(cart_des_orient[i].q[_Q0_]),string,(char *)"-",DOUBLE,FALSE);
    sprintf(string,"%s_des_q1",cart_names[i]);
    addVarToCollect((char *)&(cart_des_orient[i].q[_Q1_]),string,(char *)"-",DOUBLE,FALSE);
    sprintf(string,"%s_des_q2",cart_names[i]);
    addVarToCollect((char *)&(cart_des_orient[i].q[_Q2_]),string,(char *)"-",DOUBLE,FALSE);
    sprintf(string,"%s_des_q3",cart_names[i]);
    addVarToCollect((char *)&(cart_des_orient[i].q[_Q3_]),string,(char *)"-",DOUBLE,FALSE);

    sprintf(string,"%s_des_q0d",cart_names[i]);
    addVarToCollect((char *)&(cart_des_orient[i].qd[_Q0_]),string,(char *)"-",DOUBLE,FALSE);
    sprintf(string,"%s_des_q1d",cart_names[i]);
    addVarToCollect((char *)&(cart_des_orient[i].qd[_Q1_]),string,(char *)"-",DOUBLE,FALSE);
    sprintf(string,"%s_des_q2d",cart_names[i]);
    addVarToCollect((char *)&(cart_des_orient[i].qd[_Q2_]),string,(char *)"-",DOUBLE,FALSE);
    sprintf(string,"%s_des_q3d",cart_names[i]);
    addVarToCollect((char *)&(cart_des_orient[i].qd[_Q3_]),string,(char *)"-",DOUBLE,FALSE);

    sprintf(string,"%s_des_q0dd",cart_names[i]);
    addVarToCollect((char *)&(cart_des_orient[i].qdd[_Q0_]),string,(char *)"-",DOUBLE,FALSE);
    sprintf(string,"%s_des_q1dd",cart_names[i]);
    addVarToCollect((char *)&(cart_des_orient[i].qdd[_Q1_]),string,(char *)"-",DOUBLE,FALSE);
    sprintf(string,"%s_des_q2dd",cart_names[i]);
    addVarToCollect((char *)&(cart_des_orient[i].qdd[_Q2_]),string,(char *)"-",DOUBLE,FALSE);
    sprintf(string,"%s_des_q3dd",cart_names[i]);
    addVarToCollect((char *)&(cart_des_orient[i].qdd[_Q3_]),string,(char *)"-",DOUBLE,FALSE);

  }

  // misc sensors
  for (i=1; i<=n_misc_sensors; ++i) {
    sprintf(string,"%s",misc_sensor_names[i]);
    addVarToCollect((char *)&(misc_sensor[i]),string,(char *)"-",DOUBLE,FALSE);
  }


  // the state of the base
  addVarToCollect((char *)&(base_state.x[_X_]),(char *)"base_x",(char *)"m",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_state.x[_Y_]),(char *)"base_y",(char *)"m",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_state.x[_Z_]),(char *)"base_z",(char *)"m",DOUBLE,FALSE);
  
  addVarToCollect((char *)&(base_state.xd[_X_]),(char *)"base_xd",(char *)"m",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_state.xd[_Y_]),(char *)"base_yd",(char *)"m",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_state.xd[_Z_]),(char *)"base_zd",(char *)"m",DOUBLE,FALSE);
  
  addVarToCollect((char *)&(base_state.xdd[_X_]),(char *)"base_xdd",(char *)"m",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_state.xdd[_Y_]),(char *)"base_ydd",(char *)"m",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_state.xdd[_Z_]),(char *)"base_zdd",(char *)"m",DOUBLE,FALSE);
  
  addVarToCollect((char *)&(base_orient.q[_Q0_]),(char *)"base_q0",(char *)"-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.q[_Q1_]),(char *)"base_q1",(char *)"-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.q[_Q2_]),(char *)"base_q2",(char *)"-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.q[_Q3_]),(char *)"base_q3",(char *)"-",DOUBLE,FALSE);

  addVarToCollect((char *)&(base_orient.qd[_Q0_]),(char *)"base_qd0",(char *)"-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.qd[_Q1_]),(char *)"base_qd1",(char *)"-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.qd[_Q2_]),(char *)"base_qd2",(char *)"-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.qd[_Q3_]),(char *)"base_qd3",(char *)"-",DOUBLE,FALSE);

  addVarToCollect((char *)&(base_orient.ad[_A_]),(char *)"base_ad",(char *)"-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.ad[_B_]),(char *)"base_bd",(char *)"-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.ad[_G_]),(char *)"base_gd",(char *)"-",DOUBLE,FALSE);

  addVarToCollect((char *)&(base_orient.add[_A_]),(char *)"base_add",(char *)"-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.add[_B_]),(char *)"base_bdd",(char *)"-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.add[_G_]),(char *)"base_gdd",(char *)"-",DOUBLE,FALSE);

  printf("done\n");

  updateDataCollectScript();

  // add to man pages
  addToMan((char *)"status",(char *)"displays information about the servo",status);
  addToMan((char *)"drs",(char *)"disables the ros servo",drs);

  int argc = 1;
  char name[] = "SL2ROS_Publisher";
  char* argv[1];
  argv[0] = name;
  ros::init(argc, argv, "SL2ROS_Publisher");

  if (!read_parameter_pool_int(config_files[PARAMETERPOOL], "default_publisher_enabled", &default_publisher_enabled_))
    default_publisher_enabled_ = 0;

  if(default_publisher_enabled_ && !ros_communicator_.initialize())
  {
    printf("ERROR: could not initialize ros communication\n");
    return;
  }

  // initializes user specific issues
  init_user_ros();

  // if all worked out, we mark the servo as ready to go
  ros_servo_initialized = TRUE;

  // set oscilloscope to start value
  initOsc();
  setOsc(d2a_cr,0.0);

  scd();
	return;
}
예제 #5
0
/*!*****************************************************************************
 *******************************************************************************
\note  initDataCollection
\date  Feb. 2004
   
\remarks 

        initializes all variables for data collection

 *******************************************************************************
 Function Parameters: [in]=input,[out]=output

none

 ******************************************************************************/
static void
initDataCollection(void)

{
  int i;
  char string[100];

  /* this will be updated later by the servos */
  initCollectData(simulation_servo_rate);

  /* add variables to data collection */
  for (i=1; i<=n_dofs; ++i) {

    printf("%d...",i);
    fflush(stdout);

    sprintf(string,"%s_th",joint_names[i]);
    addVarToCollect((char *)&(joint_sim_state[i].th),string,"rad", DOUBLE,FALSE);
    sprintf(string,"%s_thd",joint_names[i]);
    addVarToCollect((char *)&(joint_sim_state[i].thd),string,"rad/s", DOUBLE,FALSE);
    sprintf(string,"%s_thdd",joint_names[i]);
    addVarToCollect((char *)&(joint_sim_state[i].thdd),string,"rad/s^2", DOUBLE,FALSE);

    sprintf(string,"%s_u",joint_names[i]);
    addVarToCollect((char *)&(joint_sim_state[i].u),string,"Nm", DOUBLE,FALSE);
    sprintf(string,"%s_ufb",joint_names[i]);
    addVarToCollect((char *)&(joint_sim_state[i].ufb),string,"Nm", DOUBLE,FALSE);
    sprintf(string,"%s_load",joint_names[i]);
    addVarToCollect((char *)&(joint_sim_state[i].load),string,"Nm", DOUBLE,FALSE);

    sprintf(string,"%s_cfx",joint_names[i]);
    addVarToCollect((char *)&(ucontact[i].f[_X_]),string,"N", DOUBLE,FALSE);
    sprintf(string,"%s_cfy",joint_names[i]);
    addVarToCollect((char *)&(ucontact[i].f[_Y_]),string,"N", DOUBLE,FALSE);
    sprintf(string,"%s_cfz",joint_names[i]);
    addVarToCollect((char *)&(ucontact[i].f[_Z_]),string,"N", DOUBLE,FALSE);

    sprintf(string,"%s_ctx",joint_names[i]);
    addVarToCollect((char *)&(ucontact[i].t[_A_]),string,"Nm", DOUBLE,FALSE);
    sprintf(string,"%s_cty",joint_names[i]);
    addVarToCollect((char *)&(ucontact[i].t[_B_]),string,"Nm", DOUBLE,FALSE);
    sprintf(string,"%s_ctz",joint_names[i]);
    addVarToCollect((char *)&(ucontact[i].t[_G_]),string,"Nm", DOUBLE,FALSE);
  }

  /* the state of the base */
  addVarToCollect((char *)&(base_state.x[_X_]),"base_x","m",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_state.x[_Y_]),"base_y","m",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_state.x[_Z_]),"base_z","m",DOUBLE,FALSE);
  
  addVarToCollect((char *)&(base_state.xd[_X_]),"base_xd","m",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_state.xd[_Y_]),"base_yd","m",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_state.xd[_Z_]),"base_zd","m",DOUBLE,FALSE);
  
  addVarToCollect((char *)&(base_state.xdd[_X_]),"base_xdd","m",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_state.xdd[_Y_]),"base_ydd","m",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_state.xdd[_Z_]),"base_zdd","m",DOUBLE,FALSE);
  
  addVarToCollect((char *)&(base_orient.q[_Q0_]),"base_q0","-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.q[_Q1_]),"base_q1","-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.q[_Q2_]),"base_q2","-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.q[_Q3_]),"base_q3","-",DOUBLE,FALSE);

  addVarToCollect((char *)&(base_orient.qd[_Q0_]),"base_qd0","-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.qd[_Q1_]),"base_qd1","-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.qd[_Q2_]),"base_qd2","-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.qd[_Q3_]),"base_qd3","-",DOUBLE,FALSE);

  addVarToCollect((char *)&(base_orient.ad[_A_]),"base_ad","-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.ad[_B_]),"base_bd","-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.ad[_G_]),"base_gd","-",DOUBLE,FALSE);

  addVarToCollect((char *)&(base_orient.add[_A_]),"base_add","-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.add[_B_]),"base_bdd","-",DOUBLE,FALSE);
  addVarToCollect((char *)&(base_orient.add[_G_]),"base_gdd","-",DOUBLE,FALSE);

  for (i=0; i<=n_contacts; ++i) {

    sprintf(string,"CP%d_cstat",i);
    addVarToCollect((char *)&(contacts[i].status),string,"-",INT,FALSE);

    sprintf(string,"CP%d_cx",i);
    addVarToCollect((char *)&(contacts[i].x[_X_]),string,"m",DOUBLE,FALSE);
    sprintf(string,"CP%d_cy",i);
    addVarToCollect((char *)&(contacts[i].x[_Y_]),string,"m",DOUBLE,FALSE);
    sprintf(string,"CP%d_cz",i);
    addVarToCollect((char *)&(contacts[i].x[_Z_]),string,"m",DOUBLE,FALSE);

    sprintf(string,"CP%d_cnx",i);
    addVarToCollect((char *)&(contacts[i].normal[_X_]),string,"m",DOUBLE,FALSE);
    sprintf(string,"CP%d_cny",i);
    addVarToCollect((char *)&(contacts[i].normal[_Y_]),string,"m",DOUBLE,FALSE);
    sprintf(string,"CP%d_cnz",i);
    addVarToCollect((char *)&(contacts[i].normal[_Z_]),string,"m",DOUBLE,FALSE);

    sprintf(string,"CP%d_cnxd",i);
    addVarToCollect((char *)&(contacts[i].normvel[_X_]),string,"m",DOUBLE,FALSE);
    sprintf(string,"CP%d_cnyd",i);
    addVarToCollect((char *)&(contacts[i].normvel[_Y_]),string,"m",DOUBLE,FALSE);
    sprintf(string,"CP%d_cnzd",i);
    addVarToCollect((char *)&(contacts[i].normvel[_Z_]),string,"m",DOUBLE,FALSE);

    sprintf(string,"CP%d_ctx",i);
    addVarToCollect((char *)&(contacts[i].tangent[_X_]),string,"m",DOUBLE,FALSE);
    sprintf(string,"CP%d_cty",i);
    addVarToCollect((char *)&(contacts[i].tangent[_Y_]),string,"m",DOUBLE,FALSE);
    sprintf(string,"CP%d_ctz",i);
    addVarToCollect((char *)&(contacts[i].tangent[_Z_]),string,"m",DOUBLE,FALSE);

    sprintf(string,"CP%d_ctxd",i);
    addVarToCollect((char *)&(contacts[i].tanvel[_X_]),string,"m",DOUBLE,FALSE);
    sprintf(string,"CP%d_ctyd",i);
    addVarToCollect((char *)&(contacts[i].tanvel[_Y_]),string,"m",DOUBLE,FALSE);
    sprintf(string,"CP%d_ctzd",i);
    addVarToCollect((char *)&(contacts[i].tanvel[_Z_]),string,"m",DOUBLE,FALSE);

    sprintf(string,"CP%d_cvxd",i);
    addVarToCollect((char *)&(contacts[i].viscvel[_X_]),string,"m",DOUBLE,FALSE);
    sprintf(string,"CP%d_cvyd",i);
    addVarToCollect((char *)&(contacts[i].viscvel[_Y_]),string,"m",DOUBLE,FALSE);
    sprintf(string,"CP%d_cvzd",i);
    addVarToCollect((char *)&(contacts[i].viscvel[_Z_]),string,"m",DOUBLE,FALSE);

    sprintf(string,"CP%d_cfx",i);
    addVarToCollect((char *)&(contacts[i].f[_X_]),string,"m",DOUBLE,FALSE);
    sprintf(string,"CP%d_cfy",i);
    addVarToCollect((char *)&(contacts[i].f[_Y_]),string,"m",DOUBLE,FALSE);
    sprintf(string,"CP%d_cfz",i);
    addVarToCollect((char *)&(contacts[i].f[_Z_]),string,"m",DOUBLE,FALSE);

  }
  
  updateDataCollectScript();

}
예제 #6
0
/*!*****************************************************************************
 *******************************************************************************
\note  init_sensor_processing
\date  May 2000
   
\remarks 

          Initializes all sensory processing

 *******************************************************************************
 Function Parameters: [in]=input,[out]=output

     none

 ******************************************************************************/
int
init_sensor_processing(void)

{
  
  int i,j;
  FILE      *in;
  char       string[100];
  static int firsttime = TRUE;

  if (firsttime) {
    firsttime = FALSE;
    joint_lin_rot     = my_matrix(1,n_dofs,1,6);
    pos_polar         = my_vector(1,n_dofs);
    load_polar        = my_vector(1,n_dofs);
    joint_raw_state   = (SL_Jstate *) 
      my_calloc((unsigned long)(n_dofs+1),sizeof(SL_Jstate),MY_STOP);
    misc_raw_sensor   = (double *) 
      my_calloc((unsigned long)(n_misc_sensors+1),sizeof(double),MY_STOP);
    fth = (Filter *)
      my_calloc((unsigned long)(n_dofs+1),sizeof(Filter),MY_STOP);
    fthd = (Filter *)
      my_calloc((unsigned long)(n_dofs+1),sizeof(Filter),MY_STOP);
    fthdd = (Filter *)
      my_calloc((unsigned long)(n_dofs+1),sizeof(Filter),MY_STOP);
    fload = (Filter *)
      my_calloc((unsigned long)(n_dofs+1),sizeof(Filter),MY_STOP);
    fmisc_sensor = (Filter *)
      my_calloc((unsigned long)(n_misc_sensors+1),sizeof(Filter),MY_STOP);
  }

  /* initalizes translation to and from units */
  if (!init_user_sensor_processing())
    return FALSE;

  /* initialize filtering */
  if (!init_filters())
    return FALSE;

  /* read several variables from files */

  /* first, get the calibration values for dealing with the linear to
     rotary conversion */
  if (!read_sensor_calibration(config_files[SENSORCALIBRATION],
      joint_lin_rot,pos_polar,load_polar))
    return FALSE;

  /* second, get the max, min , and offsets of the position sensors */
  if (!read_sensor_offsets(config_files[SENSOROFFSETS]))
    return FALSE;

  /* third, get the filter cutoff values for all variable */
  if (!read_sensor_filters(config_files[SENSORFILTERS]))
    return FALSE;

  /* add function to man pages */
  addToMan("where_off","sensor readings without offsets",where_off);
  addToMan("where_raw","raw sensor readings",where_raw);
  addToMan("monitor_min_max","records min/max values of sensors",monitor_min_max);

  if (!real_robot_flag)
    addToMan("toggle_filter","toggles sensor filtering on and off",toggle_filter);


  /* make raw variables available for output */

  for (i=1; i<=n_dofs; ++i) {
    sprintf(string,"%s_rth",joint_names[i]);
    addVarToCollect((char *)&(joint_raw_state[i].th),string,"rad", DOUBLE,FALSE);
    sprintf(string,"%s_rthd",joint_names[i]);
    addVarToCollect((char *)&(joint_raw_state[i].thd),string,"rad/s", DOUBLE,FALSE);
    sprintf(string,"%s_rload",joint_names[i]);
    addVarToCollect((char *)&(joint_raw_state[i].load),string,"Nm", DOUBLE,FALSE);
  }

  for (i=1; i<=n_misc_sensors; ++i) {
    sprintf(string,"%s_r",misc_sensor_names[i]);
    addVarToCollect((char *)&(misc_raw_sensor[i]),string,"-", DOUBLE,FALSE);
  }
  

  return TRUE;
  
}
/*!*****************************************************************************
 *******************************************************************************
\note  init_user_sensor_processing
\date  Nov. 2007

\remarks

Initializes all user specific sensory processing

 *******************************************************************************
Function Parameters: [in]=input,[out]=output

none

 ******************************************************************************/
int init_user_sensor_processing(void)
{
  printf("2 was reached \n");

  int i,j;

  change_position_gains = false;
  change_torque_gains = false;
  change_valve_dac_bias = false;
  change_dither = false;

  use_feet = true;
  for (i=1; i<global_argc; ++i)
  {
	  if (strcmp(global_argv[i],"-no-imu")==0)
	  {
			imu_mode=IMU_MODE_DONT_USE;
		  printf("WARNING >> Disabling IMU...\n");
	  }
	  if (strcmp(global_argv[i],"-no-feet")==0)
	  {
		  use_feet = false;
		  printf("WARNING >> Disabling Feet Sensors...\n");
	  }
  }


  int rc;
  rc  = rt_mutex_create(&gdc_mutex, NULL);
  if(rc)
  {
    printf("Error init gdc mutex, error code %d\n", rc);
    return FALSE;
  }

  if( (rc =rt_mutex_acquire(&gdc_mutex, TM_INFINITE)) )
  {
    printf("Error cannot acquire gdc mutex, error code %d\n", rc);
    return FALSE;
  }

  //init the interface that deals with translating gdc values into SL friendly values
  if(!gdc_sl_interface.initialize())
    return FALSE;

  //initialize the valve controller
  if(!valve_controller.initialize()) 
  {
    printf("1 was reached \n");
    return FALSE;
  }

  //initialize the GDC Network
  if(!gdc_network.initialize("config/gdc_dof_config.cf"))
  {
    printf("cannot initialize GDC Network\n");
    return FALSE;
  }

  //load the configuration from file and configure the cards
  if(!gdc_network.loadGDCParameters("config/gdc_card_configuration.cf"))
  {
    printf("cannot load GDC configurations into cards\n");
    return FALSE;
  }


  //get the current values of the GDC Cards (to update the actuals too)
  hermes_communication_tools::GDCMsg tmp_msg;
  printf("getting current values of GDC cards\n");
  for(int i=0; i<(int)gdc_network.gdc_card_states_.size(); i++)
  {
    tmp_msg.readAllParameters();
    gdc_network.sendMessage(tmp_msg, i);

  }
  RTIME sleep_time = 100000000;//in nanosec 100ms
  rt_task_sleep(sleep_time);
  gdc_network.checkForReceivedMessages();


  //set multicast
  printf("setting multicast \n");
  if(!gdc_network.setMultiCast())
  {
    printf("error in setting the multicast\n");
    return FALSE;
  }

	///// initialize cga_imu sensors
	if(!imu_sensor.initialize()) {
		printf("cga_imu sensor not initialized");
		return FALSE;
	}


  //initialize imu communication
  if(imu_mode != IMU_MODE_DONT_USE)
  {
	  rt_printf("initializing imu communication\n");
	  switch (imu_mode) {
		case IMU_MODE_RT_STREAM:

			read_servoParameters(config_files[SERVOPARAMETERS],
					imu_interface_rt.imu_comm_xeno_info_.keyword_,
					&imu_interface_rt.imu_comm_xeno_info_.priority_,
					&imu_interface_rt.imu_comm_xeno_info_.stacksize_,
					&imu_interface_rt.imu_comm_xeno_info_.cpu_id_,
					&imu_interface_rt.imu_comm_xeno_info_.delay_ns_);
			if (!imu_interface_rt.initializeInSeparateThread()) {
				printf("error in initializing the real-time imu in streaming mode\n");
				return FALSE;
			}
			break;
		case IMU_MODE_NONRT:
			if (!imu_interface_nonrt.initialize()) {
				printf("error in initializing the non-real-time imu in non-streaming mode\n");
				return FALSE;
			}
			break;
		case IMU_MODE_NONRT_STREAM:
			if (!imu_interface_nonrt_stream.initialize()) {
				printf("error in initializing the non-real-time imu in streaming mode\n");
				return FALSE;
			}
			break;
    case IMU_MODE_PF_NONRT_STREAM:
      if(!pf_imu_interface_nonrt_stream.initialize()){
        printf("error in initializing the pf non-real-time imu in streaming mode\n");
        return FALSE;
      }
      break;
		default:
			rt_printf("bad imu_mode\n");
			return false;
		}
	  rt_printf("initialized imu successfully\n");
  }
  rt_printf("Init done.\n");


  //read actuals such that the motor loop has a waiting message
  for(int i=0; i<(int)gdc_network.gdc_card_states_.size(); i++)
  {
    tmp_msg.readActuals();
    gdc_network.sendMessage(tmp_msg, i);

  }
  rt_task_sleep(sleep_time);

#ifdef HAS_LOWER_BODY
  if(use_feet)
  {
  //reset foot sensors
  hermes_communication_tools::FootSensorMsg foot_msg;
  for(int i=0; i<8; ++i)
  {
    foot_msg.updateBridgeSoftwareOffset(i);
    gdc_network.sendFootSensorMessage(foot_msg,0);
    gdc_network.sendFootSensorMessage(foot_msg,1);
    rt_task_sleep(sleep_time);
  }
  for(int i=0; i<3; ++i)
  {
    foot_msg.updateAccelSoftwareOffset(i);
    gdc_network.sendFootSensorMessage(foot_msg,0);
    gdc_network.sendFootSensorMessage(foot_msg,1);
    rt_task_sleep(sleep_time);
  }


  //ask for foot sensors
  foot_msg.getActuals();
  gdc_network.sendFootSensorMessage(foot_msg, 0);
  gdc_network.sendFootSensorMessage(foot_msg, 1);
  }
#endif


  //collect some data
  for(int i=0; i<(int)gdc_network.gdc_card_states_.size(); ++i)
  {
    char var_name[20];
    sprintf(var_name, "%s_gdc_des_th", gdc_network.gdc_card_states_[i].joint_name_.c_str());
    addVarToCollect((char *)&(gdc_network.gdc_card_states_[i].desired_position_),
                    var_name, "rad", INT, 1);

    sprintf(var_name, "%s_gdc_th", gdc_network.gdc_card_states_[i].joint_name_.c_str());
    addVarToCollect((char *)&(gdc_network.gdc_card_states_[i].actual_position_),
                    var_name, "rad", INT, 1);


    sprintf(var_name, "%s_gdc_thd", gdc_network.gdc_card_states_[i].joint_name_.c_str());
    addVarToCollect((char *)&(gdc_network.gdc_card_states_[i].actual_velocity_),
                    var_name, "rad", INT, 1);

    sprintf(var_name, "%s_gdc_load", gdc_network.gdc_card_states_[i].joint_name_.c_str());
    addVarToCollect((char *)&(gdc_network.gdc_card_states_[i].actual_torque_),
                    var_name, "rad", SHORT, 1);

    sprintf(var_name, "%s_gdc_des_load", gdc_network.gdc_card_states_[i].joint_name_.c_str());
    addVarToCollect((char *)&(gdc_network.gdc_card_states_[i].desired_torque_),
                    var_name, "rad", SHORT, 1);

    sprintf(var_name, "%s_gdc_des_val", gdc_network.gdc_card_states_[i].joint_name_.c_str());
    addVarToCollect((char *)&(gdc_network.gdc_card_states_[i].desired_valve_command_),
                    var_name, "rad", SHORT, 1);

    sprintf(var_name, "%s_gdc_val", gdc_network.gdc_card_states_[i].joint_name_.c_str());
    addVarToCollect((char *)&(gdc_network.gdc_card_states_[i].actual_valve_command_),
                    var_name, "rad", SHORT, 1);

  addVarToCollect((char *)&(imu_sensor.A_[0]), "imu_1_Ax","N",DOUBLE,TRUE);                                       
  addVarToCollect((char *)&(imu_sensor.A_[1]), "imu_1_Ay","N",DOUBLE,TRUE);                                       
  addVarToCollect((char *)&(imu_sensor.A_[2]), "imu_1_Az","N",DOUBLE,TRUE);                                       
  addVarToCollect((char *)&(imu_sensor.G_[0]), "imu_1_Gx","N",DOUBLE,TRUE);                                       
  addVarToCollect((char *)&(imu_sensor.G_[1]), "imu_1_Gy","N",DOUBLE,TRUE);                                       
  addVarToCollect((char *)&(imu_sensor.G_[2]), "imu_1_Gz","N",DOUBLE,TRUE);                                       
  addVarToCollect((char *)&(imu_sensor.A1_[0]), "imu_2_Ax","N",DOUBLE,TRUE);                                      
  addVarToCollect((char *)&(imu_sensor.A1_[1]), "imu_2_Ay","N",DOUBLE,TRUE);                                      
  addVarToCollect((char *)&(imu_sensor.A1_[2]), "imu_2_Az","N",DOUBLE,TRUE);                                      
  addVarToCollect((char *)&(imu_sensor.G1_[0]), "imu_2_Gx","N",DOUBLE,TRUE);                                      
  addVarToCollect((char *)&(imu_sensor.G1_[1]), "imu_2_Gy","N",DOUBLE,TRUE);                                      
  addVarToCollect((char *)&(imu_sensor.G1_[2]), "imu_2_Gz","N",DOUBLE,TRUE);                                      

  }

  if( (rc = rt_mutex_release(&gdc_mutex)) )
  {
    printf("Error cannot release gdc mutex, error code %d\n", rc);
    return FALSE;
  }

  return TRUE;

}
예제 #8
0
/*****************************************************************************
******************************************************************************
  Function Name    : init_turing_playback_task
  Date   	 : June 2014

  Remarks:

  initialization for task

******************************************************************************
  Paramters:  (i/o = input/output)

   	none

 *****************************************************************************/
static int
init_turing_playback_task(void)
{
  int j, i;
  int ans;
  char string[100];
  static int firsttime = TRUE;

  if (firsttime){
    firsttime = FALSE;
    //freq = 0.1; // frequency
    //amp  = 0.5; // amplitude
  }


  // prepare going to the default posture
  bzero((char *)&(target[1]),N_DOFS*sizeof(target[1]));
  for (i=1; i<=N_DOFS; i++)
	target[i] = joint_default_state[i];

  // go to the target using inverse dynamics (ID)
  if (!go_target_wait_ID(target))
	return FALSE;

  // add trigger to data collection
  sprintf(string,"emgTrig");
  addVarToCollect((char *)&(emgTrig),string,"V", DOUBLE,TRUE);

  /* add trigger signal to virtual oscilloscope:	 
  add the variable name to prog/masterUser/prefs/task_default.osc*/
  updateOscVars();
 
  // clear start data collection flag
  //dataFlag = 0;



 // input file option to ask
  // list files in directory

    DIR *d;
    struct dirent *dir;
    d = opendir("selected_vars/.");
    if (d)
    {
        while ((dir = readdir(d)) != NULL)
        {
            printf("%s\n", dir->d_name);
        }
        closedir(d);
    }

  // get user input 
   char file_selected_vars[80];

   printf ("Enter a file name to open: ");
   scanf ("%s", file_selected_vars);
   
   
  // read position array from txt.
  char path[100] = "selected_vars/";
  strcat (path, file_selected_vars);
  FILE *fp = fopen(path, "r"); 
  if (!fp) {
    fprintf(stderr, "Can't open file.\n");
    //exit(EXIT_FAILURE);
  }
 /*
  int *a,temp,count=0;
  a=(int *)malloc(10*sizeof(int));
  temp=fgetc(fp);
  while(!feof(fp))
  {
    if(temp!=44&&temp!=10&&temp!=32)
    {
      count++;
      a[count]=temp;
      printf("%c\n", a[count]);
    }
    temp=fgetc(fp);
  }
    fclose(fp);
 */


 // read the number of lines in the text file. 
/*
  char line[1024];
  int NumberOfLines = 0;
  while( fgets(line,sizeof(line),fp) != NULL)
     NumberOfLines++;
  printf("the number of lines : %i\n", NumberOfLines);
*/

  double temp;
  int p = 0;
 
    //read lines 
    const char s[2] = ",";
    char *token;
    int m;
    if(fp != NULL)
    {
        char line[100]; //10 is enough per line
        while(fgets(line, sizeof line, fp) != NULL)
        {
            token = strtok(line, s);
            for(m=0;m<2;m++)
            {
                if(m==0)
                {   
                    printf("%s\t",token);
                    token = strtok(NULL,s);
		    pos2DArray[p][0] = atof(token);
                } else {
                    printf("%f\n",atof(token));
		    pos2DArray[p][1] = atof(token);
                }       
            }
	p++;
        }
        fclose(fp);
    }

/*
  while (!feof(fp)){ //repeat until end of file
         if (p>ARRAYLEN) { p = ARRAYLEN; break;}
		
         fscanf(fp,"%f",&temp);
   	 pos2DArray[p][1] = temp;  // time
	 fscanf(fp,"%f",&temp);
         pos2DArray[p][2] = temp;  // pos
	p++;	 
        printf("p is...%i\n", p); 
  }
  fclose(fp);
  */
  
  // print the trajectory
  int l;
  for (l = 0; l < ARRAYLEN ; l++) {
  //    printf("pos2dArray %i,  %f\n", l, pos2DArray[l][0]);
  }


  
  // ready to go
  ans = 999;
  while (ans == 999) {
	if (!get_int("Enter 1 to start or anthing else to abort ...",ans,&ans))
  	return FALSE;
  }

  // only go when user really types the right thing
  if (ans != 1)
	return FALSE;

  start_time = task_servo_time;
  printf("start time = %.3f, task_servo_time = %.3f\n",
     start_time, task_servo_time);

  printf("Input var = %i\n",ivar);

  // start data collection
  scd();
  printf("Data collection started\n");
  return TRUE;
}
예제 #9
0
/*****************************************************************************
******************************************************************************
Function Name	: add_gravityComp_task
Date		: Feb 1999
Remarks:

adds the task to the task menu

******************************************************************************
Paramters:  (i/o = input/output)

none

*****************************************************************************/
void
add_gravityComp_task( void )

{
  int i, j;
  static int firsttime = TRUE;

  if (firsttime) {
    firsttime = FALSE;
    
    addTask("Gravity Compensation Task", init_gravityComp_task, 
	  run_gravityComp_task, change_gravityComp_task);

    /* add variables to data collection */
    addVarToCollect((char *)&(fieldon),"force-field","-",INT,FALSE);

    addVarToCollect((char *)&(joint_filt_state[1].thd),"R_SFE_filt_thd","rad/s",DOUBLE,FALSE);
    addVarToCollect((char *)&(joint_filt_state[2].thd),"R_SAA_filt_thd","rad/s",DOUBLE,FALSE);
    addVarToCollect((char *)&(joint_filt_state[3].thd),"R_HR_filt_thd","rad/s",DOUBLE,FALSE);  
    addVarToCollect((char *)&(joint_filt_state[4].thd),"R_EB_filt_thd","rad/s",DOUBLE,FALSE);
    addVarToCollect((char *)&(joint_filt_state[5].thd),"R_WR_filt_thd","rad/s",DOUBLE,FALSE);
    addVarToCollect((char *)&(joint_filt_state[6].thd),"R_WFE_filt_thd","rad/s",DOUBLE,FALSE);
    addVarToCollect((char *)&(joint_filt_state[7].thd),"R_WAA_filt_thd","rad/s",DOUBLE,FALSE);  

    addVarToCollect((char *)&(joint_filt_state[1].thdd),"R_SFE_filt_thdd","rad/s^2",DOUBLE,FALSE);
    addVarToCollect((char *)&(joint_filt_state[2].thdd),"R_SAA_filt_thdd","rad/s^2",DOUBLE,FALSE);
    addVarToCollect((char *)&(joint_filt_state[3].thdd),"R_HR_filt_thdd","rad/s^2",DOUBLE,FALSE);  
    addVarToCollect((char *)&(joint_filt_state[4].thdd),"R_EB_filt_thdd","rad/s^2",DOUBLE,FALSE);
    addVarToCollect((char *)&(joint_filt_state[5].thdd),"R_WR_filt_thdd","rad/s^2",DOUBLE,FALSE);
    addVarToCollect((char *)&(joint_filt_state[6].thdd),"R_WFE_filt_thdd","rad/s^2",DOUBLE,FALSE);
    addVarToCollect((char *)&(joint_filt_state[7].thdd),"R_WAA_filt_thdd","rad/s^2",DOUBLE,FALSE);

    addVarToCollect((char *)&(fieldtorque),"fieldtorque","N/m",DOUBLE,FALSE);
  }
    /* read the control gains and max controls  */


  if (!read_gains("Gains.cf",controller_gain_th, controller_gain_thd, controller_gain_int))
  //if (!read_gains(controller_gain_th, controller_gain_thd, controller_gain_int))
      printf("Error reading Gains.cf\n");
 
   

}