Domanda

Sono nuovo in ROS ... e sto cercando di creare un semplice generatore di numeri casuali, che pubblicherà i valori generati in modo casuale. Per questo ho creato una classe di posizione:

include "stdlib.h"

namespace RandomPositionGenerator {


class Position {
private:
double x;
double y;
double z;
public:
Position();
void setPosition();
void getPosition(double &a, double &b, double &c);
};

Position::Position(){}

void Position::setPosition() {
x = rand();
y = rand();
z = rand();
}

void Position::getPosition(double &a, double &b, double &c) {
 a=x;
 b=y;
 c=z;

}

}

e ho usato questa classe per creare il mio editore:

include "ros/ros.h"
include "std_msgs/String.h"
include "sstream"
include "Position.cpp"

/**
 * This method generates position coordinates at random.
**/
int main(int argc, char **argv)
{
    ros::init(argc, argv, "talker");

    ros::NodeHandle n;
    ros::Publisher position_pub = n.advertise<RandomPositionGenerator:: Position>      ("position", 50);
    ros::Rate loop_rate(10);

    double pos_x=0;
    double pos_y=0;
    double pos_z=0;

    while (ros::ok())
    {
   RandomPositionGenerator:: Position pos;
   pos.setPosition();
   pos.getPosition(pos_x,pos_y,pos_z);

       ROS_INFO("The co-ordinates are : x=",pos_x);

       position_pub.publish(pos);
       ros::spinOnce();
       loop_rate.sleep();

    }


   return 0;
}

E ora ricevo i seguenti errori:

  1. '__S_GetDataType' non è un membro di 'RandompositionGenerator :: Position'
  2. '__s_getmd5sum' non è un membro di "RandompositionGenerator :: Position"
  3. 'const class casualpositiongenerator :: position' non ha un membro chiamato '__getdatatype'

E alcuni errori più simili ... per favore correggimi ... Non sono sicuro di dove sto sbaglio o se c'è qualcosa che ho fatto bene in questo piccolo codice!

È stato utile?

Soluzione

Dovresti utilizzare un messaggio ROS reale anziché una classe personalizzata per i dati a cui desideri pubblicare/iscriverti. Vedere http://wiki.ros.org/ros/tutorials/creatingmsgandsrv Per come creare un nuovo messaggio che è possibile utilizzare durante la pubblicazione dei dati. L'uso di un messaggio ROS significa anche che gli strumenti ROS esistenti come rostopic e interi legami linguistici come rospy per Python o rosjava Perché Java sarà in grado di interagire facilmente con il tuo nodo C ++.

Per questo caso particolare, puoi semplicemente utilizzare il messaggio ROS standard per un punto 3D, geometry_msgs/point. Puoi trovare un elenco abbastanza completo dei messaggi standardizzati in comune_msgs documentazione. L'uso di un messaggio standardizzato ha una serie di vantaggi sulla creazione del proprio messaggio con essenzialmente lo stesso contenuto - il più grande è che ci sono molti strumenti o altri software nell'ecosistema ROS di cui potresti voler trarre vantaggio, che sarà Un processo abbastanza indolore se stai già utilizzando tipi di messaggi standardizzati.

Se hai davvero bisogno di utilizzare la tua classe di posizione personalizzata (senza semplicemente convertirla in un messaggio ROS), puoi guardare il serializzazione ROSCPP documentazione. Vorrei fortemente Suggerisci di contrastare la tua classe personalizzata invece di utilizzare un messaggio ROS reale che crei o un messaggio standardizzato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top