Я новичок в ROS... и пытаюсь создать простой генератор случайных чисел, который будет публиковать случайно сгенерированные значения. Для этого я создал класс Position:
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;
}
И теперь я получаю следующие ошибки:
- ‘__s_getDataType’ не является членом ‘RandomPositionGenerator::Position’
- ‘__s_getMD5Sum’ не является членом ‘RandomPositionGenerator::Position’
- ‘const class RandomPositionGenerator::Position’ не имеет члена с именем ‘__getDataType’
и еще несколько подобных ошибок... Пожалуйста, поправьте меня... Я не уверен, где я ошибаюсь, или есть ли что-то, что я сделал правильно в этом небольшом фрагменте кода!
#include "Position.cpp"
выглядит как проблема - это очень необычно для файлов#include
исходного кода (.cpp, а не .h); вы должны скомпилировать их по отдельности и объединить с помощью компоновщика. Я не знаком с ROS API, но мне интересно, пытались ли вы переопределить внутренний классPosition
, который реализует отсутствующие методы, или вы должны их где-то наследовать? - person Jim Lewis   schedule 08.11.2013