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

问题描述 投票:0回答:2

我使用以下代码用于发布者和订阅者。我能够在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

c++ ros point-cloud-library
2个回答
0
投票

您已经提到过将RViz中的固定帧设置为base_link,但是在您的代码中,您将输出消息的frame_id设置为baselink(注意缺少的下划线)。您可以双重解决这个问题:使用相同的帧ID(即base_link)发布其他输出,或者通过例如transformationbase_link提供baselink。命令行:

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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.