Подписчик и издатель в одном файле в ROS

Как сделать подписчика и издателя в ROS на C++ в одном файле? Я попробовал это, и издатель работает, но функция обратного вызова подписчика не вызывается

#include <ros/ros.h>
#include <iostream>
#include <std_msgs/UInt16.h>
#include <math.h>

int error = 0;

void error_sub(const std_msgs::UInt16::ConstPtr& msg)
 {
    ROS_INFO("I heard: [%d]", msg->data);
    error = msg->data;
 }

int main(int argc, char** argv)
{
    ros::init(argc, argv, "lighter");
    ros::NodeHandle nh;

    ros::Publisher connected =nh.advertise<std_msgs::UInt16>("/robot/sonar/head_sonar/lights/set_lights",1);

    ros::Subscriber sub = nh.subscribe("/plc/error", 1000, error_sub);
    std_msgs::UInt16 msg;

    while(ros::ok())
    {
        if(error >= 0)
        {
            msg.data = 36863;
            connected.publish(msg);
        }
        ros::spinOnce();
    }
}

person Community    schedule 27.04.2016    source источник
comment
Вы уверены, что у вас есть входящие сообщения в теме "/plc/error". вы можете проверить это, используя rostopic echo "/plc/error". это должно работать иначе!   -  person Vtik    schedule 02.05.2016


Ответы (1)


У меня не работает из-за плохого типа сообщения. Это должно быть Int8 вместо UInt16 в функции обратного вызова.

person Community    schedule 27.04.2016