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