Question about ROS basics [closed]
Hi, I wrote a code about clustering some pointcloud but everytime I tried to run it it gives me this error :
clustering-3] process has died [pid 24822, exit code -11, cmd /home/name/catkin_ws/devel/lib/clustering/clustering_node __name:=clustering __log:=/home/name/.ros/log/a2aa252e-8ee4-11ea-ab03-5800e3afdc5d/clustering-3.log].
I thought at first that I have error in code but I tried to delete some basics line of code that it's surely correct and it worked. Is it possible that my subscriber can't run program fast enough and publish before another messages came. Because my algorithm is not very efficient, I think that complexity is O(n^2). Do you know how to take maybe every 10. messages in subscriber or something similar that could help? Sorry to bother, I'm new in ROS. Kind regards
p.s. I implement function Length of that return number of elements in array and funtions Rangequery that return me pointer of array with indexes (of first pointcloud) of closest neighbours of element My subscriber code is this :
void Cluster_class::DbScan(const sensor_msgs::PointCloud2 &msg ){
pcl::PCLPointCloud2 pcl_pc2;
pcl_conversions::toPCL(msg, pcl_pc2);
pcl::PointCloud<pcl::PointXYZI> cloud;
pcl::fromPCLPointCloud2(pcl_pc2, cloud);
boost::shared_ptr<pcl::PointCloud<pcl::PointXYZI>> scan_cloud(new pcl::PointCloud<pcl::PointXYZI>);
scan_cloud->height = 1;
scan_cloud->is_dense = 1;
scan_cloud->header.frame_id = msg.header.frame_id;
number_of_points= msg.width;
int number_of_clusters=0;
for(int i=0; i<number_of_points; i++){
float coef1=0;
float coef=1./(cloud[i].intensity*10);
float distance =Distance(cloud[i].x,cloud[i].y,cloud[i].z);
if((coef<0.05)&(distance>0.2)){
int *new_neighbors;
int *neighbors=RangeQuery(cloud,0.3,cloud[i].x,cloud[i].y,cloud[i].z);
if(Lenghtof(neighbors)>1){
for(int j=0; j<Lenghtof(neighbors); j++){
int help= *(neighbors + j);
coef1=1./(cloud[help].intensity*10);
if(coef1<0.05){
new_neighbors=RangeQuery(cloud,0.3,cloud[neighbors[j]].x,cloud[neighbors[j]].y,cloud[neighbors[j]].z );
if(Lenghtof(new_neighbors)>2){
neighbors=Add_new(new_neighbors,neighbors);
}
}
}
}
scan_cloud->points[number_of_clusters].x=centralize_x(cloud,neighbors);
scan_cloud->points[number_of_clusters].y=centralize_y(cloud,neighbors);
scan_cloud->points[number_of_clusters].y=centralize_z(cloud,neighbors);
number_of_clusters++;
}
}
scan_cloud->width = number_of_clusters;
scan_cloud->points.resize(scan_cloud->width * scan_cloud->height);
pub.publish(scan_cloud);
}
Compile with debug flags and find the error.
thank you, I found it with help of debug flags. Do you maybe know is there any way to pass velocity parametar for every point via pcl::PointCloud<pcl::pointxyzi> ?
You'd need a different pcl::Point template, you can easily create custom ones. I'd check on PCL docs for examples.
Closing because you found the issue, you're welcome to open a new on on the point thing, but on the PCL forums