vickyTwan 2023-04-04 10:46 采纳率: 60%
浏览 34
已结题

写点云分割的代码出现问题 exit code -11

改写了一段点云分割的代码 ros包编译通过了 但是跑数据集出现如下问题

[plane_ground_filter_node-2] process has died [pid 10263, exit code -11, cmd /home/dwq/pcl_ws/devel/lib/plane_ground_filter/plane_ground_filter_node __name:=plane_ground_filter_node __log:=/home/dwq/.ros/log/26a667a4-d292-11ed-a2c7-21a65bc7d2e3/plane_ground_filter_node-2.log].
log file: /home/dwq/.ros/log/26a667a4-d292-11ed-a2c7-21a65bc7d2e3/plane_ground_filter_node-2*.log

后来为发现问题出现我加代码的位置

ensure_boundary(laserCloudIn,x_boundary);

只要把这句话在主函数中注释掉就能跑了 函数如下

void PlaneGroundFilter::ensure_boundary(const pcl::PointCloud<VPoint> &p,double &x_boundary)
{
     std::vector<double> z_capaticy;
     std::vector<double> x_capaticy;

    

     int y = 5;
     for ( int i = 0 ; i < p.points.size();i++)
     {
         if ( y == p.points[i].y){
             z_capaticy.push_back(p.points[i].z);
             x_capaticy.push_back(p.points[i].x);
         }
     }

     for(int m = 0; m < z_capaticy.size() - 1; m++){
         int n = m + 1;
         double z_diff = z_capaticy[n] - z_capaticy[m];

         if (0.5 < z_diff < 5){
             x_boundary = (x_capaticy[m] + x_capaticy[n]) / 2;
         }

     }

     

 }

请问如何解决?

  • 写回答

1条回答 默认 最新

  • 赵4老师 2023-04-04 11:16
    关注

    有时不将“调用函数名字+各参数值,进入函数后各参数值,中间变量值,退出函数前准备返回的值,返回函数到调用处后函数名字+各参数值+返回值”这些信息写日志到文件中是无论如何也发现不了问题在哪里的,包括捕获各种异常、写日志到屏幕、单步或设断点或生成core或dmp文件、……这些方法都不行! 写日志到文件参考下面:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #ifdef _MSC_VER
        #pragma warning(disable:4996)
        #include <windows.h>
        #include <io.h>
    #else
        #include <unistd.h>
        #include <sys/time.h>
        #include <pthread.h>
        #define  CRITICAL_SECTION   pthread_mutex_t
        #define  _vsnprintf         vsnprintf
    #endif
    //Log{
    #define MAXLOGSIZE 20000000
    #define MAXLINSIZE 16000
    #include <time.h>
    #include <sys/timeb.h>
    #include <stdarg.h>
    char logfilename1[]="MyLog1.log";
    char logfilename2[]="MyLog2.log";
    static char logstr[MAXLINSIZE+1];
    char datestr[16];
    char timestr[16];
    char mss[4];
    CRITICAL_SECTION cs_log;
    FILE *flog;
    #ifdef _MSC_VER
    void Lock(CRITICAL_SECTION *l) {
        EnterCriticalSection(l);
    }
    void Unlock(CRITICAL_SECTION *l) {
        LeaveCriticalSection(l);
    }
    #else
    void Lock(CRITICAL_SECTION *l) {
        pthread_mutex_lock(l);
    }
    void Unlock(CRITICAL_SECTION *l) {
        pthread_mutex_unlock(l);
    }
    #endif
    void LogV(const char *pszFmt,va_list argp) {
        struct tm *now;
        struct timeb tb;
    
        if (NULL==pszFmt||0==pszFmt[0]) return;
        _vsnprintf(logstr,MAXLINSIZE,pszFmt,argp);
        ftime(&tb);
        now=localtime(&tb.time);
        sprintf(datestr,"%04d-%02d-%02d",now->tm_year+1900,now->tm_mon+1,now->tm_mday);
        sprintf(timestr,"%02d:%02d:%02d",now->tm_hour     ,now->tm_min  ,now->tm_sec );
        sprintf(mss,"%03d",tb.millitm);
        printf("%s %s.%s %s",datestr,timestr,mss,logstr);
        flog=fopen(logfilename1,"a");
        if (NULL!=flog) {
            fprintf(flog,"%s %s.%s %s",datestr,timestr,mss,logstr);
            if (ftell(flog)>MAXLOGSIZE) {
                fclose(flog);
                if (rename(logfilename1,logfilename2)) {
                    remove(logfilename2);
                    rename(logfilename1,logfilename2);
                }
            } else {
                fclose(flog);
            }
        }
    }
    void Log(const char *pszFmt,...) {
        va_list argp;
    
        Lock(&cs_log);
        va_start(argp,pszFmt);
        LogV(pszFmt,argp);
        va_end(argp);
        Unlock(&cs_log);
    }
    //Log}
    int main(int argc,char * argv[]) {
        int i;
    #ifdef _MSC_VER
        InitializeCriticalSection(&cs_log);
    #else
        pthread_mutex_init(&cs_log,NULL);
    #endif
        for (i=0;i<10000;i++) {
            Log("This is a Log %04d from FILE:%s LINE:%d\n",i, __FILE__, __LINE__);
        }
    #ifdef _MSC_VER
        DeleteCriticalSection(&cs_log);
    #else
        pthread_mutex_destroy(&cs_log);
    #endif
        return 0;
    }
    //1-79行添加到你带main的.c或.cpp的那个文件的最前面
    //82-86行添加到你的main函数开头
    //90-94行添加到你的main函数结束前
    //在要写LOG的地方仿照第88行的写法写LOG到文件MyLog1.log中
    
    
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月4日
  • 赞助了问题酬金15元 4月4日
  • 创建了问题 4月4日

悬赏问题

  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
  • ¥15 C#中的编译平台的区别影响