Ver Fonte

change view_radar4d_2d. add save.

yuchuli há 1 ano atrás
pai
commit
b2e79a1e19

+ 46 - 0
src/tool/view_radar4d_2d/ivradarview.cpp

@@ -4,6 +4,8 @@
 #include <iostream>
 #include <math.h>
 
+
+
 #define VIEW_WIDTH 2000
 #define VIEW_HEIGHT 2000
 
@@ -19,6 +21,9 @@ IVRadarView::IVRadarView()
         mbCheck[i] = true;
     }
 
+    for(i=0;i<NUM_MAX_DETECTTYPE;i++)mbCheckDet[i] = true;
+    for(i=0;i<NUM_MAX_OBJECTTYPE;i++)mbCheckObj[i] = true;
+
     for(i=0;i<NUM_MAX_MSG;i++)
         if(i==0||i==1||i==4) msgCheck[i]=true;
     else msgCheck[i]=false;
@@ -162,6 +167,18 @@ void IVRadarView::paint()
             double xr,yr;
             iv::radar::radar4ddetect * pdet;
             pdet = xdetarray.mutable_mdet(i);
+
+            bool bshow = false;
+            if((mbCheckDet[0])&&(pdet->detection_classification() == iv::radar::radar4ddetect::NoClassification))bshow = true;
+            if((mbCheckDet[1])&&(pdet->detection_classification() == iv::radar::radar4ddetect::Noise))bshow = true;
+            if((mbCheckDet[2])&&(pdet->detection_classification() == iv::radar::radar4ddetect::Ground))bshow = true;
+            if((mbCheckDet[3])&&(pdet->detection_classification() == iv::radar::radar4ddetect::TraversableUnder))bshow = true;
+            if((mbCheckDet[4])&&(pdet->detection_classification() == iv::radar::radar4ddetect::Obstacle))bshow = true;
+            if((mbCheckDet[5])&&(pdet->detection_classification() == iv::radar::radar4ddetect::Invalid))bshow = true;
+
+            if(bshow == false)continue;
+
+
             xr = pdet->detection_radial_distance() * cos(pdet->unaligned_detection_elevation_angle()) * cos(pdet->unaligned_detection_azimuth_angle() + M_PI/2.0);
             yr = pdet->detection_radial_distance() * cos(pdet->unaligned_detection_elevation_angle()) * sin(pdet->unaligned_detection_azimuth_angle() + M_PI/2.0);
 
@@ -186,6 +203,21 @@ void IVRadarView::paint()
             double xr,yr;
             iv::radar::radar4dobject * pobj;
             pobj = xobjarray.mutable_mobj(i);
+
+            bool bShow = false;
+            unsigned int nMinProb = 30;
+            if((mbCheckObj[0])&&(pobj->u_classification_car()>=nMinProb))bShow = true;
+            if((mbCheckObj[1])&&(pobj->u_classification_truck()>=nMinProb))bShow = true;
+            if((mbCheckObj[2])&&(pobj->u_classification_motorcycle()>=nMinProb))bShow = true;
+            if((mbCheckObj[3])&&(pobj->u_classification_bicycle()>=nMinProb))bShow = true;
+            if((mbCheckObj[4])&&(pobj->u_classification_pedestrian()>=nMinProb))bShow = true;
+            if((mbCheckObj[5])&&(pobj->u_classification_animal()>=nMinProb))bShow = true;
+            if((mbCheckObj[6])&&(pobj->u_classification_hazard()>=nMinProb))bShow = true;
+            if((mbCheckObj[7])&&(pobj->u_classification_unknown()>=nMinProb))bShow = true;
+
+            if(bShow == false)continue;
+
+
             xr = pobj->u_position_y() * (-1);
             yr = pobj->u_position_x() * (1);
 
@@ -273,3 +305,17 @@ void IVRadarView::SetRADAR4DObj(iv::radar::radar4dobjectarray & radarobj)
     emit update4d();
 }
 
+void IVRadarView::SetCheckDet(int n,bool bcheck)
+{
+    if(n<0)return;
+    if(n>=NUM_MAX_DETECTTYPE)return;
+    mbCheckDet[n] = bcheck;
+}
+
+void IVRadarView::SetCheckObj(int n,bool bcheck)
+{
+    if(n<0)return;
+    if(n>=NUM_MAX_OBJECTTYPE)return;
+    mbCheckObj[n] = bcheck;
+}
+

+ 9 - 0
src/tool/view_radar4d_2d/ivradarview.h

@@ -8,6 +8,10 @@
 #include "radar4ddetectarray.pb.h"
 #include "radar4dobjectarray.pb.h"
 
+#define NUM_MAX_DETECTTYPE 6
+#define NUM_MAX_OBJECTTYPE 8
+
+
 #define NUM_MAX_RADAR 6
 #define NUM_MAX_MSG 25
 class IVRadarView : public IVView
@@ -57,10 +61,15 @@ private:
     std::mutex mmutexobj;
     bool mbobjupdate = false;
 
+    bool mbCheckDet[NUM_MAX_DETECTTYPE];
+    bool mbCheckObj[NUM_MAX_OBJECTTYPE];
+
 
 public:
 
     void SetCheck(int n,bool bcheck);
+    void SetCheckDet(int n,bool bcheck);
+    void SetCheckObj(int n,bool bcheck);
 
     void SetRADAR(iv::radar::radarobjectarray radarobj,int index);
 

+ 111 - 102
src/tool/view_radar4d_2d/mainwindow.cpp

@@ -5,35 +5,16 @@
 #include <iostream>
 
 
-MainWindow * gw;
+#include "google/protobuf/io/zero_copy_stream_impl.h"
+#include "google/protobuf/text_format.h"
 
-extern std::string gstrmemradar[NUM_MAX_RADAR];
 
-void ListenRadar(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
-{
+#include <QFile>
 
-    if(nSize<1)return;
-    iv::radar::radarobjectarray xobj;
-
-    if(false == xobj.ParseFromArray(strdata,nSize))
-    {
-        std::cout<<"ListenenRadar fail."<<std::endl;
-        return;
-    }
+MainWindow * gw;
 
-    int i;
-    int radarindex = -1;
-    for(i=0;i<NUM_MAX_RADAR;i++)
-    {
-        if(strcmp(strmemname,gstrmemradar[i].data()) == 0)
-        {
-            radarindex =i;
-            break;
-        }
-    }
-    if(index >= 0)gw->UpdateRADAR(xobj,radarindex);
+extern std::string gstrmemradar[NUM_MAX_RADAR];
 
-}
 
 
 
@@ -59,17 +40,12 @@ MainWindow::MainWindow(QWidget *parent) :
     ModuleFun funojbect = std::bind(&MainWindow::UpdateObj,this,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3,std::placeholders::_4,std::placeholders::_5);
     mpaobj = iv::modulecomm::RegisterRecvPlus("radar4dobj",funojbect);
 
-    for(i=0;i<NUM_MAX_RADAR;i++)
-    {
-//        mpa[i] = iv::modulecomm::RegisterRecv(gstrmemradar[i].data(),ListenRadar);
-    }
-//    mpa = iv::modulecomm::RegisterRecv("radar",ListenRadar);
 
     QTimer * xTimer = new QTimer(this);
     connect(xTimer,SIGNAL(timeout()),this,SLOT(onTimer()));
     xTimer->start(10);
 
-    setWindowTitle("View RADAR");
+    setWindowTitle("View 4D RADAR");
 
 
 }
@@ -90,6 +66,7 @@ MainWindow::~MainWindow()
 
 void MainWindow::resizeEvent(QResizeEvent *event)
 {
+    (void)event;
     qDebug("resize");
     QSize sizemain = ui->centralWidget->size();
     qDebug("size x = %d y=%d",sizemain.width(),sizemain.height());
@@ -100,7 +77,7 @@ void MainWindow::resizeEvent(QResizeEvent *event)
 
 void MainWindow::AdjustWPos(QSize sizemain)
 {
-    int i;
+//    int i;
     int width = (sizemain.width() - 300)/2;
     if(width < 0)width = 20;
     int hgt = (sizemain.height()-20)/2;
@@ -140,43 +117,41 @@ void MainWindow::CreateRightView(QGroupBox *pGroup)
 
    QCheckBox * pCheck;
 
-   for(i=0;i<NUM_MAX_RADAR;i++)
+   for(i=0;i<NUM_MAX_DETECTTYPE;i++)
    {
        nXPos = 10;
        nYPos = nYPos + 50;
        pCheck = new QCheckBox(pGroup);
-       pCheck->setText(gstrmemradar[i].data());
+       pCheck->setChecked(true);
+       pCheck->setText(msgDetectType[i]);
        pCheck->setGeometry(nXPos,nYPos,150,30);
-       mpCheck[i] = pCheck;
+       mpCheckDetect[i] = pCheck;
+       connect(pCheck,SIGNAL(clicked(bool)),this,SLOT(onCheckChange()));
    }
 
-   nYPos = nYPos +  300;
+   nYPos = 10;
+   for(i=0;i<NUM_MAX_OBJECTTYPE;i++)
+   {
+       nXPos = 160;
+       nYPos = nYPos + 50;
+       pCheck = new QCheckBox(pGroup);
+       pCheck->setChecked(true);
+       pCheck->setText(msgObjectType[i]);
+       pCheck->setGeometry(nXPos,nYPos,150,30);
+       mpCheckObject[i] = pCheck;
+       connect(pCheck,SIGNAL(clicked(bool)),this,SLOT(onCheckChange()));
+   }
+
+
+
+   nXPos = 10;
+   nYPos = nYPos +  150;
    QPushButton * pSave = new QPushButton(pGroup);
    pSave->setText(tr("Save Frame"));
    pSave->setGeometry(nXPos,nYPos,150,50);
    mpPBSaveFrame = pSave;
    connect(pSave,SIGNAL(clicked()),this,SLOT(onSaveFrame()));
 
-   nYPos=10;
-   for(i=0;i<NUM_MAX_MSG;i++){
-       nXPos = 160;
-       nYPos = nYPos + 20;
-       pCheck = new QCheckBox(pGroup);
-       pCheck->setText(msgbox[i]);
-       pCheck->setGeometry(nXPos,nYPos,150,20);
-       msgCheck[i]=pCheck;
-       if(i==0||i==1||i==4) pCheck->setChecked(true);
-       connect(msgCheck[i],SIGNAL(clicked(bool)),this,SLOT(onCheckChange()));
-
-   }
-
-   for(i=0;i<NUM_MAX_RADAR;i++)
-   {
-       mpCheck[i]->setChecked(true);
-       connect(mpCheck[i],SIGNAL(clicked(bool)),this,SLOT(onCheckChange()));
-   }
-
-//    connect(pSL,SIGNAL(valueChanged())),this,SLOT(onChangeWind());
 }
 
 //void MainWindow::SetRADAR(std::array<iv::ObstacleBasic,OBJ_NUM> xobs)
@@ -184,45 +159,6 @@ void MainWindow::CreateRightView(QGroupBox *pGroup)
 ////    mpRadarView->SetRADAR(xobs);
 //}
 
-void MainWindow::UpdateRADAR(iv::radar::radarobjectarray radarobj,int index)
-{
-    mpRadarView->SetRADAR(radarobj,index);
-
-   if(mbSaveFrame)
-    {
-       QFile xFile;
-       QString filename = QString("./")+QDateTime::currentDateTime().toString("RADARFRAME_yyyy-MM-dd-hh-mm-ss-zzz")+ QString(".txt");
-       xFile.setFileName(filename);
-       if(xFile.open(QIODevice::ReadWrite))
-       {
-            unsigned int i;
-            unsigned  int nobjsize = radarobj.obj_size();
-            char strline[1000];
-            if(nobjsize>0)
-            {
-                iv::radar::radarobject * pobj = radarobj.mutable_obj(0);
-                (void)pobj;
-                snprintf(strline,1000,"x\ty\tvx\t\vy\tvel\n");
-                xFile.write(strline,strnlen(strline,1000));
-            }
-            for(i=0;i<nobjsize;i++)
-            {
-                iv::radar::radarobject * pobj = radarobj.mutable_obj(i);
-                snprintf(strline,1000,"%6.3f\t%6.3f\t%6.3f\t%6.3f\t%6.3f\n",pobj->x(),pobj->y(),pobj->vx(),pobj->vy(),pobj->vel());
-                xFile.write(strline,strnlen(strline,1000));
-            }
-
-            xFile.close();
-       }
-       else
-       {
-            std::cout<<"save radar frame fail. file path: "<<filename.toStdString()<<std::endl;
-       }
-       mbSaveFrame = false;
-    }
-
-
-}
 
 void MainWindow::onCheckChange()
 {
@@ -230,21 +166,29 @@ void MainWindow::onCheckChange()
 
     int i;
     int ncheck = -1;
-    for(i=0;i<NUM_MAX_RADAR;i++)
+
+    for(i=0;i<NUM_MAX_DETECTTYPE;i++)
     {
-        if(pCheck == mpCheck[i])ncheck = i;
+        if(pCheck == mpCheckDetect[i])ncheck = i;
+    }
+
+    if(ncheck >= 0)
+    {
+        mpRadarView->SetCheckDet(ncheck,pCheck->isChecked());
+        return;
     }
 
-    if(ncheck<0)
-    for(i=0;i<NUM_MAX_MSG;i++)
+
+    for(i=0;i<NUM_MAX_OBJECTTYPE;i++)
     {
-        if(pCheck == msgCheck[i])ncheck = i+NUM_MAX_RADAR;
+        if(pCheck == mpCheckObject[i])ncheck = i;
     }
 
-    std::cout<<"check is "<<ncheck<<" "<<pCheck->checkState()<<std::endl;
-    if(ncheck < 0)return;
+    if(ncheck >= 0)
+    {
+        mpRadarView->SetCheckObj(ncheck,pCheck->isChecked());
+    }
 
-    mpRadarView->SetCheck(ncheck,pCheck->isChecked());
 }
 
 
@@ -269,6 +213,8 @@ void MainWindow::onTimer()
 void MainWindow::onSaveFrame()
 {
     mbSaveFrame = true;
+    mbSaveDet = true;
+    mbSaveObj = true;
 }
 
 
@@ -281,11 +227,43 @@ void MainWindow::UpdateDet(const char * strdata,const unsigned int nSize,const u
     if(xdetarray.ParseFromArray(strdata,(int)nSize))
     {
         mpRadarView->SetRADAR4DDet(xdetarray);
+        if(mbSaveDet){
+            mbSaveDet = false;
+            using google::protobuf::TextFormat;
+            using google::protobuf::io::FileOutputStream;
+            using google::protobuf::io::ZeroCopyOutputStream;
+            std::string strout;
+            ZeroCopyOutputStream *output = new google::protobuf::io::StringOutputStream(&strout);//new FileOutputStream(file_descriptor);
+
+            bool success = TextFormat::Print(xdetarray, output);
+            if(success)
+            {
+                std::cout<<std::chrono::system_clock::now().time_since_epoch().count()<<" Detect:"<<std::endl;
+                std::cout<<strout.data()<<std::endl;
+                //               qDebug(strout.data());
+                QFile xFile;
+                QString strfilename = QString("Detect-") + QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss-zzz.txt");
+                xFile.setFileName(strfilename);
+                if(xFile.open(QIODevice::ReadWrite))
+                {
+                    xFile.write(strout.data(),strout.length());
+                }
+                else
+                {
+                    std::cout<<"open file : "<<strfilename.toLatin1().data()<<" fail. "<<std::endl;
+                }
+            }
+
+        }
     }
     else
     {
         std::cout<<"detection parse fail."<<std::endl;
     }
+
+
+
+
 }
 
 void MainWindow::UpdateObj(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
@@ -297,9 +275,40 @@ void MainWindow::UpdateObj(const char * strdata,const unsigned int nSize,const u
     if(xobjarray.ParseFromArray(strdata,(int)nSize))
     {
         mpRadarView->SetRADAR4DObj(xobjarray);
+        if(mbSaveObj){
+            mbSaveObj = false;
+            using google::protobuf::TextFormat;
+            using google::protobuf::io::FileOutputStream;
+            using google::protobuf::io::ZeroCopyOutputStream;
+            std::string strout;
+            ZeroCopyOutputStream *output = new google::protobuf::io::StringOutputStream(&strout);//new FileOutputStream(file_descriptor);
+
+            bool success = TextFormat::Print(xobjarray, output);
+            if(success)
+            {
+                std::cout<<std::chrono::system_clock::now().time_since_epoch().count()<<" Object:"<<std::endl;
+                std::cout<<strout.data()<<std::endl;
+                //               qDebug(strout.data());
+
+                QFile xFile;
+                QString strfilename = QString("Object-") + QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss-zzz.txt");
+                xFile.setFileName(strfilename);
+                if(xFile.open(QIODevice::ReadWrite))
+                {
+                    xFile.write(strout.data(),strout.length());
+                }
+                else
+                {
+                    std::cout<<"open file : "<<strfilename.toLatin1().data()<<" fail. "<<std::endl;
+                }
+            }
+
+        }
     }
     else
     {
         std::cout<<"object parse fail."<<std::endl;
     }
+
+
 }

+ 9 - 1
src/tool/view_radar4d_2d/mainwindow.h

@@ -51,6 +51,9 @@ private:
     QCheckBox * msgCheck[NUM_MAX_MSG];
     QGroupBox * mpGroup;
 
+    QCheckBox * mpCheckDetect[NUM_MAX_DETECTTYPE];
+    QCheckBox * mpCheckObject[NUM_MAX_OBJECTTYPE];
+
     QPushButton * mpPBSaveFrame;
 
     MyView *myview;
@@ -63,14 +66,19 @@ private:
     void * mpa[NUM_MAX_RADAR];
 
     bool mbSaveFrame = false;
+    bool mbSaveDet = false;
+    bool mbSaveObj = false;
 
 public:
+
+    QString msgDetectType[NUM_MAX_DETECTTYPE] = {"NoClassification","Noise","Ground","TraversableUnder","Obstacle","Invalid"};
+    QString msgObjectType[NUM_MAX_OBJECTTYPE] = {"Car","Truck","Motorcycle","Bicycle","Pedestrian","Animal","Hazard","Unknown"};
+
     QString msgbox[NUM_MAX_MSG]={"x","y","vx","vy","速度标量",
                        "数据可信标志","极坐标下距离","纵向速度","纵向加速度","位置角度",
                        "宽度","组别变化","相向移动","横向速度","目标被追踪模式",
                        "追踪状态","桥梁标志","运动","快速运动","慢速运动",
                        "信号反射强度","目标置信度","目标检测状态","长距雷达","中距雷达"};
-    void UpdateRADAR(iv::radar::radarobjectarray radarobj,int index);
 
 private:
     void * mpadet;