2016-10-28 13 views
6

विज़ुअलाइज़ करें मेरे पास gpu :: reprojectImageTo3D से 3 डी पॉइंट्स एक असमान असमानता छवि पर हैं। अब मैं इस प्वाइंट क्लाउड को प्रदर्शित करना चाहता हूं।प्वाइंटक्लाउड

मैं OpenCV से sensor_msgs/PointCloud2 पर मिले पॉइंटक्लाउड को कैसे परिवर्तित करूं?

मुझे पॉइंटक्लाउड प्रकाशित करने की आवश्यकता नहीं है, यह केवल डीबग विज़ुअलाइज़ेशन के लिए है। क्या इसे नोड से छवियों के साथ किया जा सकता है? जैसे pcl का उपयोग कर? यह इष्टतम होगा क्योंकि मेरा डिवाइस RViz (ऑनलाइन रीडिंग के आधार पर) के साथ अच्छा प्रदर्शन नहीं कर सकता है।

उत्तर

3

मेरा सबसे अच्छा अनुमान इस तरह करना है, और cv::mat के माध्यम से फिर से शुरू करें और संदेश में कनवर्ट करने के लिए pcl में डालें, क्योंकि मुझे सीधे कुछ भी नहीं मिला है।

#include <ros/ros.h> 
// point cloud headers 
#include <pcl/point_cloud.h> 
//Header which contain PCL to ROS and ROS to PCL conversion functions 
#include <pcl_conversions/pcl_conversions.h> 
//sensor_msgs header for point cloud2 
#include <sensor_msgs/PointCloud2.h> 
main (int argc, char **argv) 
{ 
    ros::init (argc, argv, "pcl_create"); 
    ROS_INFO("Started PCL publishing node"); 
    ros::NodeHandle nh; 
    //Creating publisher object for point cloud 
    ros::Publisher pcl_pub = nh.advertise<sensor_msgs::PointCloud2> ("pcl_output", 1); 
    //Creating a cloud object 
    pcl::PointCloud<pcl::PointXYZ> cloud; 
    //Creating a sensor_msg of point cloud 
    sensor_msgs::PointCloud2 output; 
    //Insert cloud data 
    cloud.width = 50000; 
    cloud.height = 2; 
    cloud.points.resize(cloud.width * cloud.height); 
    //Insert random points on the clouds 
    for (size_t i = 0; i < cloud.points.size(); ++i) 
    { 
     cloud.points[i].x = 512 * rand()/(RAND_MAX + 1.0f); 
     cloud.points[i].y = 512 * rand()/(RAND_MAX + 1.0f); 
     cloud.points[i].z = 512 * rand()/(RAND_MAX + 1.0f); 
    } 
    //Convert the cloud to ROS message 
    pcl::toROSMsg(cloud, output); 
    output.header.frame_id = "point_cloud"; 
    ros::Rate loop_rate(1); 
    while (ros::ok()) 
    { 
     //publishing point cloud data 
     pcl_pub.publish(output); 
     ros::spinOnce(); 
     loop_rate.sleep(); 
    } 
    return 0; 
} 

यह कोड स्निपेट apprize पर पाया गया था।