質問

私はROSを初めて使用しています...そして、ランダムに生成された値を公開する単純な乱数ジェネレーターを作成しようとします。このために、ポジションクラスを作成しました。

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;

}

}

このクラスを使用して私の出版社を作成しました。

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;
}

そして今、私は次のエラーを取得します:

  1. '__s_getDatatype'は「randompositiongenerator :: position」のメンバーではありません。
  2. '__s_getmd5sum'は「randompositiongenerator :: position」のメンバーではありません。
  3. 'const class randompositiongenerator :: position'には「__getdatype」という名前のメンバーはありません

そして、いくつかの同様のエラー...私を修正してください...私がどこに間違っているのか、またはこの小さなコードで私が正しいことをしたことがあるかどうかはわかりません!

役に立ちましたか?

解決

公開/購読したいデータのカスタムクラスの代わりに、実際のROSメッセージを使用する必要があります。見る http://wiki.ros.org/ros/tutorials/creatingmsgandsrv データを公開するときに使用できる新しいメッセージを作成する方法について。 ROSメッセージを使用することは、などの既存のROSツールも rostopic とのような言語全体のバインディング rospy Pythonまたは rosjava Javaは、C ++ノードと簡単に相互操作できるようになります。

この特定のケースでは、標準のROSメッセージを3Dポイントに使用するだけで、 geometry_msgs/point. 。標準化されたメッセージのかなり包括的なリストを見つけることができます common_msgs ドキュメンテーション。標準化されたメッセージを使用すると、本質的に同じコンテンツで独自のメッセージを作成する上で多くの利点があります。最大のことは、ROSエコシステムには、後で活用したいツールや他のソフトウェアがあることです。既存のメッセージタイプを既に使用している場合、かなり痛みのないプロセス。

カスタムポジションクラスを実際に使用する必要がある場合(単にROSメッセージに変換することなく)、 ROSCPPシリアル化 ドキュメンテーション。私は...するだろう 強く 作成する実際のROSメッセージまたは標準化されたメッセージを使用する代わりに、カスタムクラスのシリアル化に対して提案します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top