【问题标题】:Unable to visualise PointCloud in Rviz (ROS) from publisher and subscriber node无法从发布者和订阅者节点可视化 Rviz (ROS) 中的 PointCloud
【发布时间】:2019-03-01 07:39:17
【问题描述】:

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

【问题讨论】:

  • 您是否已经尝试设置不带斜线的框架 ID,例如 "base_link"
  • 是的,我尝试了两种方式,但不幸的是没有锻炼。
  • rostopic echo /inputrostopic echo /output 在终端上给你什么。如果只是重新发送输入,是否会出现点云?
  • 在终端中运行这两个命令后,我什么也没看到。只是命令运行没有输出。

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


【解决方案1】:

您提到您已将 RViz 中的固定框架设置为 base_link,但在您的代码中,您将输出消息的 frame_id 设置为 baselink(请注意缺少下划线)。您可以双重解决此问题:要么发布具有相同帧 ID(即base_link)的另一个输出,要么通过例如提供从base_linkbaselinktransformation。命令行:

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

【讨论】:

  • 嗨 Tiko,我尝试使用命令行但仍然相同。我也尝试更改 frame_id ="base_link" 但没有运气。
  • 命令中的最后一个参数(1000)是干什么用的?我在教程here没有找到。
【解决方案2】:

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

【讨论】:

  • 我添加了 TF 并且树看起来很好,正如您在我在问题中添加的第二张图片中看到的那样。但仍然 /output pointcloud 看不到。此外,rostopic echo /output 运行但不提供任何输出。请帮我解决问题。
  • 所以我认为您首先需要让消息通过。如果您没有在命令行中看到它,那么不知何故,发布者没有正确发布。当您运行节点时,您是否看到 ROS_DEBUG("Point Cloud Received") 消息?如果您没有看到它们,请尝试将其更改为 ROS_INFO("Point Cloud Received");
猜你喜欢
  • 2022-08-09
  • 2021-07-28
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多