2011-06-29 166 views
0

當我嘗試編譯我的publishJoints代碼時,我不斷收到有關示波器超出範圍的錯誤。錯誤:____未在此範圍內聲明

這裏是publishJoints.cpp代碼

#include <string> 
#include <ros/ros.h> 
#include <sensor_msgs/JointState.h> 
#include <vector> 
#include <stdio.h> 
#include "GestureFile.h" 
#define DOF 19 
#define DIR_mt4  1 
#define DIR_ma14  1 
#define DIR_ma12  1 
#define COUNT_DEG 2222 //encoder count per deg 


enum parts 
{ 
    m3joint_mt4_j0, 
    m3joint_mt4_j1, 
    m3joint_slave_mt4_j2, 
    left_shoulder_pan_joint, 
    left_shoulder_lift_joint, 
    left_elbow_pan_joint, 
    left_elbow_lift_joint,    
    m3joint_ma14_j4, 
    m3joint_ma14_j5, 
    m3joint_ma14_j6, 
    right_shoulder_pan_joint, 
    right_shoulder_lift_joint, 
    right_elbow_pan_joint, 
    right_elbow_lift_joint, 
    m3joint_ma12_j4, 
    m3joint_ma12_j5, 
    m3joint_ma12_j6, 
    Neck_Casing, 
    Head_Casing, 

}; 

int main(int argc, char** argv) { 
    ros::init(argc, argv, "publishJoints"); 
    ros::NodeHandle n; 
    ros::Publisher joint_pub = n.advertise<sensor_msgs::JointState>("joint_states", 100); 
    ros::Rate loop_rate(100000); 

    const double degree = M_PI/180; 

    // robot state 
    double swivel=0; 
    double tilt=0; 


    // message declarations 
    sensor_msgs::JointState joint_state; 

    joint_state.name.resize(19); 
    joint_state.position.resize(19); 




    while (ros::ok()) { 
     //update joint_state 
     joint_state.header.stamp = ros::Time::now(); 

     swivel=0; 
     joint_state.name[0] ="m3joint_mt4_j0"; 
     joint_state.position[0] = swivel; 

     joint_state.name[1] ="m3joint_mt4_j1"; 
     joint_state.position[1] = swivel; 

     joint_state.name[2] ="m3joint_slave_mt4_j2"; 
     joint_state.position[2] = tilt; 

     joint_state.name[3] ="left_shoulder_pan_joint"; 
     joint_state.position[3] = tilt; 

     joint_state.name[4] ="left_shoulder_lift_joint"; 
     joint_state.position[4] = tilt; 

     joint_state.name[5] ="left_elbow_pan_joint"; 
     joint_state.position[5] = tilt; 

     joint_state.name[6] ="left_elbow_lift_joint"; 
     joint_state.position[6] = tilt; 

     joint_state.name[7] ="m3joint_ma14_j4"; 
     joint_state.position[7] = swivel; 

     joint_state.name[8] ="m3joint_ma14_j5"; 
     joint_state.position[8] = swivel; 

     joint_state.name[9] ="m3joint_ma14_j6"; 
     joint_state.position[9] = swivel; 

     joint_state.name[10] ="right_shoulder_pan_joint"; 
     joint_state.position[10] = swivel; 

     joint_state.name[11] ="right_shoulder_lift_joint"; 
     joint_state.position[11] = swivel; 

     joint_state.name[12] ="right_elbow_pan_joint"; 
     joint_state.position[12] = swivel; 

     joint_state.name[13] ="right_elbow_lift_joint"; 
     joint_state.position[13] = swivel; 

     joint_state.name[14] ="m3joint_ma12_j4"; 
     joint_state.position[14] = tilt; 

     joint_state.name[15] ="m3joint_ma12_j5"; 
     joint_state.position[15] = tilt; 

     joint_state.name[16] ="m3joint_ma12_j6" ; 
     joint_state.position[16] = tilt; 

     joint_state.name[17] ="Neck_Casing" ; 
     joint_state.position[17] = tilt; 

     joint_state.name[18] ="Head_Casing" ; 
     joint_state.position[18] = tilt; 


    tilt += 0.000001; 


     //send the joint state and transform 
     joint_pub.publish(joint_state); 

     // This will adjust as needed per iteration 
     loop_rate.sleep(); 
    } 




    return 0; 
} 

int readDynamicGestureFile(points_body_t gesture[][10000], int *numOfCoords) 
{ 
    int number=0; 
    char buff[500]; 
    double position[DOF]={0}; 
    int time; 
    FILE* ifp=NULL; 

    //there is only one file to read 
    memset(&buff,0,sizeof(buff)); 

    if (fopen_s(&ifp, "C://share/Motion.csv","r") != 0) 
    { 
     AfxMessageBox("Cannot open Motion File that was sent"); 
     return 0; 
    } 

    do { 
      fgets(buff,500,ifp); 

      int result = sscanf_s(buff, "%d %*c %lf %*c %lf %*c %lf %*c %lf %*c %lf %*c %lf %*c %lf %*c %lf %*c %lf %*c %lf %*c %lf %*c %lf %*c %lf %*c %lf %*c %lf %*c %lf %*c %lf %*c %lf %*c %lf", 
       &time, 
       &position[0], //m3joint_mt4_j0 
       &position[1], //m3joint_mt4_j1 
       &position[2], //m3joint_slave_mt4_j2 
       &position[3], //left_shoulder_pan_joint 
       &position[4], //left_shoulder_lift_joint 

       &position[5], //left_elbow_pan_joint 
       &position[6], //left_elbow_lift_joint    
       &position[7], //m3joint_ma14_j4 
       &position[8], //m3joint_ma14_j5 
       &position[9], //m3joint_ma14_j6 
       &position[10], //right_shoulder_pan_joint 
       &position[11], //right_shoulder_lift_joint 

       &position[12], //right_elbow_pan_joint 
       &position[13], //right_elbow_lift_joint 
       &position[14], //m3joint_ma12_j4 
       &position[15], //m3joint_ma12_j5 
       &position[16], //m3joint_ma12_j6 
       &position[17], //Neck_Casing 
       &position[18] //Head_Casing 

      ); 

      //*********************// 
      // Conversion Matrix // 
      //*********************// 

      gesture[0][number].m3joint_mt4_j0 = (int)(0); 
      //gesture[0][number].ptorso_1 = (int)(DIR_T1 * -position[1]); 
      gesture[0][number].m3joint_mt4_j1 = (int)(0); 

      /////////////////////////////////////////////////////////////////////////  
      gesture[0][number].m3joint_slave_mt4_j2  = (int)(DIR_mt4 * COUNT_DEG * (-position[2])); 
      gesture[0][number].left_shoulder_pan_joint = (int)(DIR_ma14 * COUNT_DEG * -position[3]); 
      gesture[0][number].left_shoulder_lift_joint  = (int)(DIR_ma14 * COUNT_DEG * position[4]); 

      //////////////////////////////////////////////////////////////// 
      gesture[0][number].left_elbow_pan_joint = (int)( DIR_ma14 * COUNT_DEG * (position[5] + 90)); 
      gesture[0][number].left_elbow_lift_joint = (int)( DIR_ma14 * COUNT_DEG * position[6]); 
      gesture[0][number].m3joint_ma14_j4  = (int)( DIR_ma14 * COUNT_DEG * (-position[7] -90)); 

      gesture[0][number].m3joint_ma14_j5    = (int)(COUNT_DEG * -position[8]); 
      gesture[0][number].m3joint_ma14_j6    = (int)(COUNT_DEG * -position[9]); 
      gesture[0][number].right_shoulder_pan_joint   = (int)(COUNT_DEG * -position[10]); 
      //gesture[0][number].right_shoulder_lift_joint = (int)(COUNT_DEG * position[11]); 

      /////////////////////////////////////////////////////////////////// 
      gesture[0][number].right_elbow_pan_joint  = (int)( COUNT_DEG * (-position[12] - 90)); 
      gesture[0][number].right_elbow_lift_joint  = (int)( COUNT_DEG * position[13]); 
      //gesture[0][number].pR_upper_2 = (int)(COUNT_DEG * (90-position[R_upper_2])); 
      gesture[0][number].m3joint_ma12_j4   = (int)( COUNT_DEG * (-position[14] + 90)); 

      gesture[0][number].m3joint_ma12_j5= (int)(COUNT_DEG * -position[15]); 
      gesture[0][number].m3joint_ma12_j6= (int)(COUNT_DEG * -position[16]); 
      gesture[0][number].Neck_Casing = (int)(COUNT_DEG * -position[17]); 
      gesture[0][number].Head_Casing = (int)(COUNT_DEG * position[18]); 

      number++; 

     } while(!feof(ifp)); 

    numOfCoords[0] = number; 
    fclose(ifp); 

    return 1; 

} 

以下是錯誤消息當我編譯。

錯誤: 'fopen_s' 在此範圍內未聲明

錯誤: 'AfxMessageBox的' 在此範圍內未聲明

錯誤: 'sscanf_s' 不是在這個範圍內

anyhelp聲明將不勝感激。

回答

2

fopen_ssscanf_s函數是C標準庫的特定於Microsoft的擴展,它比默認情況下出現的錯誤(危險)少。

如果您在非Microsoft平臺上編譯,那麼您將需要找到這些函數的自定義實現。我不相信gccg++有他們自己的這些功能的版本。

如果您在Microsoft平臺上編譯,那麼您可能需要升級到較新版本的Visual Studio。

+0

謝謝templatetypedef。能夠修復fopen_s和sscanf_s,但是如何解決AfxMessageBox錯誤。 – ram