Невозможно визуализировать PointCloud в Rviz (ROS) от узла издателя и подписчика - PullRequest
0 голосов
/ 01 марта 2019

Я использую приведенный ниже код для издателя и подписчика.Я могу визуализировать PointCloud на Rviz для входного узла, но не смог визуализировать выходной узел.Так как я совсем новичок в 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 голосов
/ 03 марта 2019

Вот несколько шагов для устранения неполадок ...
1. Сначала проверьте в командной строке, что вывод фактически заполнен, запустив: rostopic echo /output, убедитесь, что массив действительно заполнен.
2Убедитесь, что дерево TF между фиксированным кадром в RVIZ и сообщением frame_id завершено.Вы можете проверить это, добавив дерево TF: нажмите кнопку Добавить> По типам отображения> rviz> TF.
Затем откройте дерево, развернув TF>, затем щелкнув дерево.
Если есть проблема, это должно помочь определить ее.
3. Наконец, проверьте состояние сообщения pointcloud, развернув Status.

0 голосов
/ 01 марта 2019

Вы упомянули, что вы установили свой фиксированный кадр в RViz на base_link, но в своем коде вы установили frame_id выходного сообщения на baselink (обратите внимание на отсутствующее подчеркивание).Вы можете решить эту проблему дважды: либо опубликуйте другой вывод с тем же идентификатором кадра (т. Е. base_link), либо предоставьте преобразование из base_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
...