Ошибки при строительстве моего рос -узла

StackOverflow https://stackoverflow.com/questions/19850084

  •  29-07-2022
  •  | 
  •  

Вопрос

Я новичок в 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 rondopositiongenerator :: pociation' не имеет члена "__getDatatype '

И еще несколько похожих ошибок ... пожалуйста, поправьте меня ... Я не уверен, где я ошибаюсь, или есть ли что -то, что я сделал правильно в этом небольшом коде!

Это было полезно?

Решение

Вы должны использовать реальное сообщение 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