[ros-users] PCL registration compile errors

Top Page
Attachments:
Message as email
+ (text/plain)
+ tracker.cpp (text/x-c++src)
Delete this message
Reply to this message
Author: Jared Marshall Glover
Date:  
To: ros-users
Old-Topics: Re: [ros-users] pcl temlatization compile issue?
Subject: [ros-users] PCL registration compile errors
Hi,

I just updated cturtle and I'm getting these compile errors in PCL. I've
attached my code (it's a simple registration-based point cloud tracker which
was compiling fine before the update).

Thanks,
Jared


/opt/ros/cturtle/stacks/point_cloud_perception/pcl/src/pcl/features/feature.hpp:326:
error: ?eigen_values? was not declared in this scope
  In file included from
/opt/ros/cturtle/stacks/point_cloud_perception/pcl/include/pcl/sample_consensus/sac_model_registration.h:169,
                   from
/opt/ros/cturtle/stacks/point_cloud_perception/pcl/include/pcl/registration/icp.h:46,
                   from /home/jglov/lis/furniture/src/tracker.cpp:6:


/opt/ros/cturtle/stacks/point_cloud_perception/pcl/src/pcl/sample_consensus/sac_model_registration.hpp:
In member function ?void
pcl::SampleConsensusModelRegistration<PointT>::getSamples(int&,
std::vector<int, std::allocator<int> >&)?:

/opt/ros/cturtle/stacks/point_cloud_perception/pcl/src/pcl/sample_consensus/sac_model_registration.hpp:73:
error: ?Array4f? is not a member of ?Eigen?

/opt/ros/cturtle/stacks/point_cloud_perception/pcl/src/pcl/sample_consensus/sac_model_registration.hpp:73:
error: expected ?;? before ?p1p0?

/opt/ros/cturtle/stacks/point_cloud_perception/pcl/src/pcl/sample_consensus/sac_model_registration.hpp:75:
error: ?Array4f? is not a member of ?Eigen?

/opt/ros/cturtle/stacks/point_cloud_perception/pcl/src/pcl/sample_consensus/sac_model_registration.hpp:75:
error: expected ?;? before ?dy1dy2?

/opt/ros/cturtle/stacks/point_cloud_perception/pcl/src/pcl/sample_consensus/sac_model_registration.hpp:91:
error: ?Array4f? is not a member of ?Eigen?

/opt/ros/cturtle/stacks/point_cloud_perception/pcl/src/pcl/sample_consensus/sac_model_registration.hpp:91:
error: expected ?;? before ?p2p0?

/opt/ros/cturtle/stacks/point_cloud_perception/pcl/src/pcl/sample_consensus/sac_model_registration.hpp:93:
error: ?dy1dy2? was not declared in this scope

/opt/ros/cturtle/stacks/point_cloud_perception/pcl/src/pcl/sample_consensus/sac_model_registration.hpp:93:
error: ?p1p0? was not declared in this scope

/opt/ros/cturtle/stacks/point_cloud_perception/pcl/src/pcl/sample_consensus/sac_model_registration.hpp:93:
error: ?p2p0? was not declared in this scope
  In file included from
/opt/ros/cturtle/stacks/point_cloud_perception/pcl/include/pcl/sample_consensus/sac_model_registration.h:169,
                   from
/opt/ros/cturtle/stacks/point_cloud_perception/pcl/include/pcl/registration/icp.h:46,
                   from /home/jglov/lis/furniture/src/tracker.cpp:6:


/opt/ros/cturtle/stacks/point_cloud_perception/pcl/src/pcl/sample_consensus/sac_model_registration.hpp:102:
error: ?dy1dy2? was not declared in this scope
  In file included from
/opt/ros/cturtle/stacks/point_cloud_perception/pcl/include/pcl/filters/voxel_grid.h:263,
                   from /home/jglov/lis/furniture/src/tracker.cpp:4:


/opt/ros/cturtle/stacks/point_cloud_perception/pcl/src/pcl/filters/voxel_grid.hpp:
In member function ?void pcl::VoxelGrid<PointT>::applyFilter(typename
pcl::Filter<PointT>::PointCloud&) [with PointT = pcl::PointXYZ]?:
/home/jglov/lis/furniture/src/tracker.cpp:95: instantiated from here

/opt/ros/cturtle/stacks/point_cloud_perception/pcl/src/pcl/filters/voxel_grid.hpp:223:
error: ?class Eigen::VectorXf? has no member named ?head?
/home/jglov/lis/furniture/src/tracker.cpp:95: instantiated from here

/opt/ros/cturtle/stacks/point_cloud_perception/pcl/src/pcl/filters/voxel_grid.hpp:265:
error: ?class Eigen::VectorXf? has no member named ?head?
  In file included from
/opt/ros/cturtle/stacks/point_cloud_perception/pcl/include/pcl/sample_consensus/sac_model_registration.h:169,
                   from
/opt/ros/cturtle/stacks/point_cloud_perception/pcl/include/pcl/registration/icp.h:46,
                   from /home/jglov/lis/furniture/src/tracker.cpp:6:


/opt/ros/cturtle/stacks/point_cloud_perception/pcl/src/pcl/sample_consensus/sac_model_registration.hpp:
In member function ?void
pcl::SampleConsensusModelRegistration<PointT>::getSamples(int&,
std::vector<int, std::allocator<int> >&) [with PointT = pcl::PointXYZ]?:
/home/jglov/lis/furniture/src/tracker.cpp:95: instantiated from here

/opt/ros/cturtle/stacks/point_cloud_perception/pcl/src/pcl/sample_consensus/sac_model_registration.hpp:88:
warning: unused variable ?p2?

/opt/ros/cturtle/stacks/point_cloud_perception/pcl/src/pcl/sample_consensus/sac_model_registration.hpp:69:
warning: unused variable ?p0?

/opt/ros/cturtle/stacks/point_cloud_perception/pcl/src/pcl/sample_consensus/sac_model_registration.hpp:70:
warning: unused variable ?p1?
make[3]: *** [CMakeFiles/tracker.dir/src/tracker.o] Error 1
make[3]: Leaving directory `/home/jglov/lis/furniture/build'
make[2]: *** [CMakeFiles/tracker.dir/all] Error 2
make[2]: Leaving directory `/home/jglov/lis/furniture/build'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/jglov/lis/furniture/build'

#include <iostream>

#include <ros/ros.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/point_types.h>
#include <pcl/registration/icp.h>
#include <sensor_msgs/PointCloud.h>
#include <sensor_msgs/PointCloud2.h>
#include <sensor_msgs/point_cloud_conversion.h>
#include <tf/transform_listener.h>

using namespace std;


int main(int argc, char **argv)
{
// init ROS
ros::init(argc, argv, "tracker");
ros::NodeHandle nh;
ros::Publisher pub_downsampled;
pub_downsampled = nh.advertise<sensor_msgs::PointCloud2>("downsampled", 1);
tf::TransformListener tfListener;

// Point clouds
sensor_msgs::PointCloud new_cloud;
sensor_msgs::PointCloud2 new_cloud2;

// PCL objects
pcl::PointCloud<pcl::PointXYZ> cloud, cloud_downsampled, model, registered_model;
pcl::VoxelGrid<pcl::PointXYZ> grid;
grid.setFilterFieldName ("z");
grid.setLeafSize (0.01, 0.01, 0.01);
grid.setFilterLimits (0.4, 1.6);
pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp;
//pcl::IterativeClosestPointNonLinear<pcl::PointXYZ, pcl::PointXYZ> icp;


cout << "Initialized node" << endl;

int nscans = 0;

while (nh.ok ()) {

    // Spin until we get a PointCloud2 message
    sensor_msgs::PointCloudConstPtr cloud_blob_ptr =
      ros::topic::waitForMessage<sensor_msgs::PointCloud>("/narrow_stereo_textured/points");
    nscans++;


    cout << "Received point cloud with " << cloud_blob_ptr->points.size() << " points" << endl;


    // Transform point cloud to base_link coordinates
    try {
      tfListener.transformPointCloud("/base_footprint", *cloud_blob_ptr, new_cloud);
    } catch (tf::TransformException ex) {
      ROS_ERROR("%s",ex.what());
    }    


    cout << "Transformed point cloud to /base_footprint" << endl;


    // Convert to PCL
    sensor_msgs::convertPointCloudToPointCloud2(new_cloud, new_cloud2);
    pcl::fromROSMsg(new_cloud2, cloud);


    cout << "Converted to PCL" << endl;


    // Downsample the data    
    grid.setInputCloud (boost::make_shared<pcl::PointCloud<pcl::PointXYZ> >(cloud));
    grid.filter (cloud_downsampled);


    cout << "Downsampled point cloud to " << cloud_downsampled.points.size() << " points" << endl;



    // Cluster points in XY space
    //pcl::PointCloud<pcl::PointXYZ> 
    //cloud_downsampled.points[]



    // Register the model with the current scan
    if (nscans == 3) {
      model = cloud_downsampled;
      //registered_model = model;
    }
    else if (nscans > 3) {
      icp.setInputCloud (boost::make_shared<pcl::PointCloud<pcl::PointXYZ> >(model));
      icp.setInputTarget (boost::make_shared<pcl::PointCloud<pcl::PointXYZ> >(cloud_downsampled));
      icp.align (registered_model);
    }
    model = registered_model;


    // Publish the data
    pcl::toROSMsg(model, new_cloud2);
    pub_downsampled.publish(new_cloud2);


}
}