无法从发布者和订阅者节点可视化Rviz(ROS)中的PointCloud

时间:2019-03-01 07:39:17

标签: c++ ros point-cloud-library

我将以下代码用于发布者和订阅者。我可以在Rviz上可视化PointCloud的输入节点,但无法可视化输出节点。由于我在ROS中还很陌生。我该如何解决这个问题?我什至在Rviz中设置了固定框架:base_link。

ros::Subscriber subPointCloud;
ros::Publisher pubPointCloud;

void DEM(const sensor_msgs::PointCloud2ConstPtr& input)
{
  ROS_DEBUG("Point Cloud Received");
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
  sensor_msgs::PointCloud2 output;

  // Convert from ROS message to PCL point cloud
  pcl::fromROSMsg(*input, *cloud);
  pcl::toROSMsg(*cloud, output);

  output.header.stamp = ros::Time::now();
  output.header.frame_id = "/baselink";
  pubPointCloud.publish(output);

  }


int main(int argc, char** argv)
{
  ROS_INFO("Starting LIDAR Node");
  ros::init(argc, argv, "kitti_lidar_node");
  ros::NodeHandle nh;

  subPointCloud = nh.subscribe<sensor_msgs::PointCloud2>("input", 1, DEM);
  pubPointCloud = nh.advertise<pcl::PointCloud<pcl::PointXYZ> > ("output", 1);

  ros::spin();

  return 0;
}

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:0)

您已经提到您已将RViz中的固定帧设置为base_link,但是在代码中,您将输出消息的frame_id设置为baselink(请注意,下划线会丢失) )。您可以双重解决此问题:发布其他具有相同帧ID的输出(即base_link),或通过以下方式提供从base_linkbaselink的{​​{3}}命令行:

$ rosrun tf static_transform_publisher 0.0 0.0 0.0 0.0 0.0 0.0 1.0 base_link baselink 1000

答案 1 :(得分:0)

以下是一些排查问题的步骤...
 1.首先通过运行以下命令在命令行上检查输出实际上是否已填充:rostopic echo /output,请确保该数组实际上已被填充。
 2.确保RVIZ中的固定帧与消息frame_id之间的TF树完整。您可以通过添加TF树来检查它:单击添加>按显示类型> rviz> TF。
然后通过展开TF>打开树,然后单击树。
如果有问题,这应该有助于识别它。
 3.最后,通过展开状态来检查点云消息的状态。