Setting rviz topic (publish <pcl::PointCloud<pcl::PointXYZ> >)
I'm trying to view a .pcd file with rviz.
I wrote a little script to read the file and than publish it. (Yes I included way to many headers)
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl_conversions/pcl_conversions.h>
#include <ros/publisher.h>
#include <ros/ros.h>
#include <pcl_ros/publisher.h>
#include <pcl_ros/point_cloud.h>
#include <string>
pcl::PointCloud<pcl::PointXYZ>::Ptr loadPCDfile() //Laden eines PCD Files
{
//Nach dem Dateipfad fragen
std::string pcdpath;
std::cout << "Bitte Pfad+Name.pcd eingeben: ";
//Einagbe lesen
std::getline(std::cin, pcdpath);
//Ausgabe der Eingabe
//std::cout<< pcdpath << std::endl;
// Erkennen ob es sich um eine gültige Eingabe handelt (http://pointclouds.org/documentation/tutorials/reading_pcd.php)
pcl::PointCloud<pcl::PointXYZ>::Ptr pcdcloud(
new pcl::PointCloud<pcl::PointXYZ>);
if (pcl::io::loadPCDFile<pcl::PointXYZ>(pcdpath, *pcdcloud) == -1) //* load the file
{
std::cout << "Keine pcd Datei gefunden unter: " << pcdpath << std::endl;
}
return pcdcloud;
}
int main(int argc, char **argv) {
pcl::PointCloud<pcl::PointXYZ>::Ptr pcdcloud = loadPCDfile(); //Laden unserer PCD Datei
/*for (size_t i = 0; i < pcdcloud->points.size (); ++i)
std::cout << " " << pcdcloud->points[i].x
<< " " << pcdcloud->points[i].y
<< " " << pcdcloud->points[i].z << std::endl;
*/
// Initialize ROS
ros::init(argc, argv, "pcdcloud");
ros::NodeHandle nh;
// Create a ROS publisher for the output pointcloud
ros::Publisher pubrviz = nh.advertise<pcl::PointCloud<pcl::PointXYZ> >("pcdcloud", 1);
pubrviz.publish(pcdcloud);
ros::Rate loop_rate(10);
loop_rate.sleep();
// Spin
ros::spin();
return (0);
}
The reading Part should be fine, since I get a lot of points returned when I don't comment the for loop out. When I build it I get no error returned.
But I can't get the rviz gui to show the cloud.
I used rosrun tf static_transform_publisher 0 0 0 0 0 0 1 map my_frame 10
to set up the tf map. link
Probably I'm doing something wrong withing with the topic.
Asked by Arnold on 2017-06-29 18:33:13 UTC
Comments
This is not a real solution, but you might be interested in pcd_to_pointcloud.
Asked by gvdhoorn on 2017-06-30 01:45:41 UTC
I saw this, too. But I need to use some segmentation later on in the project, so its no solution. But I can try to use it for the troubleshooting. Thank you.
Asked by Arnold on 2017-06-30 02:39:54 UTC