ошибка: ____ не была объявлена ​​в этой области - PullRequest
0 голосов
/ 29 июня 2011

Когда я пытаюсь скомпилировать свой код 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» не была объявленаэта сфера

любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 29 июня 2011

Функции fopen_s и sscanf_s являются специфичными для Microsoft расширениями стандартной библиотеки C, которые менее подвержены ошибкам (опасны), чем те, которые присутствуют по умолчанию.

Если вы компилируетена платформе, не принадлежащей Microsoft, вам потребуется найти пользовательскую реализацию этих функций.Я не верю, что gcc или g++ имеют свои собственные версии этих функций.

Если вы выполняете компиляцию на платформе Microsoft, вам может потребоваться перейти на более новую версию Visual Studio.

...