2016-10-28 4 views
6

발견 된 불일치 이미지에서 gpu :: reprojectImageTo3D의 3D 점이 있습니다. 나는이 pointcloud를 보여주고 싶다.포인트 클라우드 시각화

발견 된 포인트 클럭을 OpenCV에서 sensor_msgs/PointCloud2으로 어떻게 변환합니까?

포인트 클라우드를 게시 할 필요가 없습니다. 디버그 시각화 전용입니다. 노드의 이미지 에서처럼 노드를 표시 할 수 있습니까? 예 : pcl? 장치가 RViz (온라인 판독 값 기준)으로 잘 수행되지 않을 수 있으므로이 방법이 최적입니다.

답변

3

가장 좋은 추측은 이렇게하고, cv::mat을 반복하고 pcl에 삽입하여 msg로 변환합니다. 직접적으로 아무 것도 발견하지 못했기 때문에.

#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에서 발견되었습니다.

관련 문제