Visualize pointcloud

I have 3D points from gpu :: reprojectImageTo3D on a mismatch image found. Now I would like to display this pointcloud.

How to convert found pointcloud from OpenCV to sensor_msgs/PointCloud2 ?

I do not need to publish pointcloud, this is only for visualization of debugging. Is it possible to display it, as is done with images from node? for example using pcl ? This would be optimal, as my device may not work well with RViz (based on online readings).

+6
source share
1 answer

My best guess is to do so, and just iterate through cv::mat and paste into pcl to convert to msg, since I did not find anything that does directly.

 #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; } 

This piece of code was found in apprize .

+3
source

Source: https://habr.com/ru/post/1011806/


All Articles