C++ ROS节点订阅未连接

C++ ROS节点订阅未连接,c++,c,ros,robotics,C++,C,Ros,Robotics,我正在使用rosbag发布各种主题,我正在尝试让我的示例程序允许一个节点通过类方法函数订阅这些主题。但在控制台上没有为订阅者打印任何内容。我试过roswtf,结果 WARNING The following node subscriptions are unconnected: * /roscpp_pcl_example: * /camera/depth/points 这是我的程序代码,我不确定问题出在哪里。这些是我对API的参考 //包括ROS库 #包括 //包括pcl #包括 #

我正在使用rosbag发布各种主题,我正在尝试让我的示例程序允许一个节点通过类方法函数订阅这些主题。但在控制台上没有为订阅者打印任何内容。我试过roswtf,结果

 WARNING The following node subscriptions are unconnected:
 * /roscpp_pcl_example:
 * /camera/depth/points
这是我的程序代码,我不确定问题出在哪里。这些是我对API的参考


//包括ROS库
#包括
//包括pcl
#包括
#包括
#包括
//包含PointCloud2消息
#包括
#包括
//话题
静态常量std::string SUB_TOPIC_1=“/ecu_pcl”;
静态常量标准::字符串子主题2=“/velodyne\u back/velodyne\u points”;
静态常量标准::字符串子主题3=“/velodyne\u中心/velodyne\u点”;
静态常量标准::字符串子主题4=“/velodyne\u front/velodyne\u points”
//使用成员函数定义用于回调的类
//允许在同一节点中订阅各种主题
类回调节点{
公众:
void callback1(const std_msgs::String::ConstPtr&msg)
{
ROS_信息流(msg->data.c_str());
}
void callback2(const std_msgs::String::ConstPtr&msg)
{
ROS_信息流(msg->data.c_str());
}
void callback3(const std_msgs::String::ConstPtr&msg)
{
ROS_信息流(msg->data.c_str());
}
void callback4(const std_msgs::String::ConstPtr&msg)
{
ROS_信息流(msg->data.c_str());
}
};
int main(int argc,字符**argv)
{
//初始化ROS节点“roscpp\u pcl\u示例”
ros::init(argc,argv,“roscpp_pcl_示例”);
新罕布什尔州诺德汉德尔;
回调\节点回调\对象;
//将带有节点名称的“Hello”消息打印到终端和ROS日志文件

ROS\u信息流(“来自ROS节点的您好:”我立刻想到的一件事是,你实际上把
std_-msgs::String::ConstPtr
作为主题类型,但是主题
/ecu-pcl
/velodyne\u points
不应该是
std_-msgs::String
类型,而是应该有不同的数据类型,我假设是点云,所以与类似。因此,您必须将回调修改为其正确的数据类型,例如
sensor\u msgs::PointCloud2::ConstPtr

同样让我吃惊的是
roswtf
给你的信息:

WARNING The following node subscriptions are unconnected:
  * /roscpp_pcl_example:
    * /camera/depth/points
这意味着您的节点
roscpp\u pcl\u示例
订阅了一个主题
/camera/depth/points
实际上没有人发布。但是您的代码片段没有提到
/camera/depth/points
。(您是否只显示了节点源代码的一部分,还是忘记了使用
catkin build
重新编译代码?)


无论如何,要调试它,请尝试以下操作:

  • 通过在为以下步骤打开的每个控制台中执行
    $source devel/setup.bash
    ,确保已获得正确的工作区
  • 打开控制台,浏览要播放的
    rosbag
    ,执行
    $rosbag info
    并签入输出。确保节点所需的所有主题都已实际录制
  • 如果是这种情况,请继续使用
    $rostopic play
    播放
  • 现在,打开一个新控制台,搜索工作区并键入
    $rostopic list
    ,检查所有主题是否已正确发布
  • 然后使用
    $rostopic info
    查看此列表中每个主题的类型
  • 最后,请确保您为订阅者使用了正确的主题类型。您可能需要相应地更新
    CMakeLists.txt
    package.xml

事实上,在采购和柳絮制作之后,我仍然得到了那些顽固的/相机/深度/点,这毫无意义。以前我可能已经用它做了一些事情,但我已经做了一个柳絮制作,它不应该在那里。我不确定是否有另一种清洁重建的方式,我不知道,但我刚刚创建了一个新的pkg来运行d它不包含摄像头主题在这种情况下,您可以尝试调用
catkin\u make clean
来清理工作区。这将删除所有以前生成的代码。但很高兴它能以这种方式工作!
WARNING The following node subscriptions are unconnected:
  * /roscpp_pcl_example:
    * /camera/depth/points