문제

나는 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'
  2. '__s_getmd5sum'은 'randompositiongenerator :: position'의 구성원이 아닙니다.
  3. 'const class randomepositiongenerator :: position' '__getDatatype'라는 멤버가 없습니다.

그리고 좀 더 비슷한 오류 ... 저를 바로 잡으십시오 ... 내가 어디에서 잘못 될지 확실하지 않거나이 작은 코드에 내가 한 일이 있는지 확실하지 않습니다!

도움이 되었습니까?

해결책

게시/구독하려는 데이터에 대해 사용자 정의 클래스 대신 실제 ROS 메시지를 사용해야합니다. 보다 http://wiki.ros.org/ros/tutorials/creatingmsgandsrv 데이터를 게시 할 때 사용할 수있는 새 메시지를 작성하는 방법은 데이터를 게시 할 수 있습니다. ROS 메시지 사용은 또한 다음과 같은 기존 ROS 도구를 의미합니다. rostopic 그리고 다음과 같은 전체 언어 바인딩 rospy 파이썬 또는 rosjava Java는 C ++ 노드와 쉽게 상호 작용할 수 있습니다.

이 특별한 경우에는 3D 포인트에 표준 ROS 메시지를 사용할 수 있습니다. geometry_msgs/point. 표준화 된 메시지의 상당히 포괄적 인 목록을 찾을 수 있습니다. common_msgs 선적 서류 비치. 표준화 된 메시지를 사용하면 본질적으로 동일한 컨텐츠로 자신의 메시지를 만드는 것보다 많은 이점이 있습니다. 가장 큰 것은 ROS 생태계에 나중에 활용할 수있는 많은 도구 또는 기타 소프트웨어가 있다는 것입니다. 이미 독립형 메시지 유형을 사용하는 경우 상당히 고통스러운 프로세스입니다.

사용자 정의 위치 클래스를 사용해야 할 필요가 있다면 (단순히 ROS 메시지로 변환하지 않고) ROSCPP 직렬화 선적 서류 비치. 나는 할 것이다 강하게 작성한 실제 ROS 메시지 또는 표준화 된 메시지를 사용하는 대신 사용자 정의 클래스를 직렬화하는 것을 제안하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top