Pergunta

Sou novo no ROS ... e tentando criar um gerador de números aleatórios simples, que publicará os valores gerados aleatoriamente. Para isso, criei uma classe de posição:

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 usei esta classe para criar meu editor:

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 agora recebo os seguintes erros:

  1. '__s_getDatatype' não é um membro do 'RandompositionGenerator :: Position'
  2. '__s_getMd5sum' não é um membro do 'RandompositionGenerator :: Position'
  3. 'Const Class RandompositionGenerator :: Position' não tem membro chamado '__getDatatype'

E alguns erros mais semelhantes ... por favor, me corrija ... Não tenho certeza de onde estou dando errado, ou se há algo que eu fiz certo neste pequeno código!

Foi útil?

Solução

Você deve usar uma mensagem ROS real em vez de uma classe personalizada para dados que você deseja publicar/assinar. Ver http://wiki.ros.org/ros/tutorials/creatingmsgandsrv Para como criar uma nova mensagem que você pode usar ao publicar dados. Usar uma mensagem ROS também significa que as ferramentas de ROS existentes, como rostopic e ligações de idiomas inteiras, como rospy para python ou rosjava Para o Java, poderá interoperar facilmente com o seu nó C ++.

Para este caso em particular, você pode simplesmente usar a mensagem padrão da ROS para um ponto 3D, geometry_msgs/ponto. Você pode encontrar uma lista bastante abrangente das mensagens padronizadas no Common_msgs documentação. O uso de uma mensagem padronizada tem vários benefícios sobre a criação de sua própria mensagem com essencialmente o mesmo conteúdo - o maior é que existem muitas ferramentas ou outros softwares no ecossistema de ROS que você pode querer aproveitar mais tarde, o que será Um processo bastante indolor se você já estiver usando tipos de mensagens independentes.

Se você realmente precisa usar sua classe de posição personalizada (sem simplesmente convertê -la em uma mensagem de ROS), você pode olhar para o Serialização de Roscpp documentação. Eu poderia fortemente Sugira contra a serializar sua classe personalizada em vez de usar uma mensagem ROS real que você cria ou uma mensagem padronizada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top