31 #include <pcl/point_cloud.h> 33 #include <pcl/common/transforms.h> 35 #include <opencv2/opencv.hpp> 38 #include <sensor_msgs/CameraInfo.h> 50 void callback(
const PointCloud2::ConstPtr& pcl_msg,
const CameraInfoConstPtr& cinfo_msg,
const ImageConstPtr& image_msg){
58 ROS_ERROR(
"cv_bridge exception: %s", e.what());
65 pcl::PointCloud<pcl::PointXYZ>::Ptr pcl_cloud(
new pcl::PointCloud<pcl::PointXYZ>);
66 pcl::PointCloud<pcl::PointXYZ>::Ptr trans_cloud(
new pcl::PointCloud<pcl::PointXYZ>);
67 PointCloudXYZRGB::Ptr coloured = PointCloudXYZRGB::Ptr(
new PointCloudXYZRGB);
72 if(
DEBUG) cout <<
"FRAME ID "<< pcl_cloud->header.frame_id << endl;
78 ROS_WARN(
"[draw_frames] TF exception:\n%s", ex.what());
84 pcl::copyPointCloud(*trans_cloud, *coloured);
86 for (pcl::PointCloud<pcl::PointXYZRGB>::iterator pt = coloured->points.begin(); pt < coloured->points.end(); ++pt)
88 cv::Point3d pt_cv((*pt).x, (*pt).y, (*pt).z);
92 if(uv.x>0 && uv.x < image.cols && uv.y > 0 && uv.y < image.rows){
94 (*pt).b = image.at<cv::Vec3b>(uv)[0];
95 (*pt).g = image.at<cv::Vec3b>(uv)[1];
96 (*pt).r = image.at<cv::Vec3b>(uv)[2];
103 sensor_msgs::PointCloud2 pcl_colour_ros;
105 pcl_colour_ros.header.stamp = pcl_msg->header.stamp ;
106 pcl_pub.
publish(pcl_colour_ros);
109 int main(
int argc,
char **argv){
121 pcl_pub = nh_.
advertise<PointCloud2> (
"velodyne_coloured", 1);
CvImageConstPtr toCvShare(const sensor_msgs::ImageConstPtr &source, const std::string &encoding=std::string())
void publish(const boost::shared_ptr< M > &message) const
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
void fromROSMsg(const sensor_msgs::PointCloud2 &cloud, pcl::PointCloud< T > &pcl_cloud)
ROSCPP_DECL void spin(Spinner &spinner)
void callback(const PointCloud2::ConstPtr &pcl_msg, const CameraInfoConstPtr &cinfo_msg, const ImageConstPtr &image_msg)
Connection registerCallback(C &callback)
pcl::PointCloud< pcl::PointXYZRGB > PointCloudXYZRGB
bool fromCameraInfo(const sensor_msgs::CameraInfo &msg)
bool param(const std::string ¶m_name, T ¶m_val, const T &default_val) const
int main(int argc, char **argv)
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
void transformPointCloud(const pcl::PointCloud< PointT > &cloud_in, pcl::PointCloud< PointT > &cloud_out, const tf::Transform &transform)
void toROSMsg(const sensor_msgs::PointCloud2 &cloud, sensor_msgs::Image &image)
cv::Point2d project3dToPixel(const cv::Point3d &xyz) const