我是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 ::位置'的成员
  2. '__s_getmd5sum'不是'randompositiongenerator ::位置'的成员
  3. 'const class randompositiongenerator ::位置'没有命名成员'__getDatatype'

还有一些类似的错误...请纠正我...我不确定我要在哪里出错,或者如果我在这一小部分代码中做正确的事!

有帮助吗?

解决方案

您应该使用实际的ROS消息,而不是要发布/订阅的数据的自定义类。看 http://wiki.ros.org/ros/tutorials/creatingmsgandsrv 对于如何创建新消息,您可以在发布数据时使用该消息。使用ROS消息还意味着现有的ROS工具,例如 rostopic 以及整个语言绑定,例如 rospy 对于Python或 rosjava 因为Java将能够轻松地与您的C ++节点进行互操作。

对于这种特殊情况,您可以简单地将标准ROS消息用于3D点, geometry_msgs/点. 。您可以在 common_msgs 文档。使用标准化的消息与使用基本相同的内容创建自己的消息具有许多好处 - 最大的是,ROS生态系统中有许多工具或其他软件,您可能需要以后利用,这将是如果您已经使用了标准的消息类型,则是一个相当无痛的过程。

如果您确实需要使用自定义位置类(不简单地将其转换为ROS消息),则可以查看 ROSCPP序列化 文档。我会 强烈 建议不要序列化您的自定义类,而不是使用您创建的实际ROS消息或标准化消息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top