Browse Source

v2xTcpClient add mutex

lijinliang 4 years ago
parent
commit
bf16adc14c

+ 11 - 3
src/v2x/v2xTcpClient/mainwindow.cpp

@@ -304,6 +304,7 @@ void MainWindow::socket_Disconnected()
 {
 
     //修改按键文字
+    m_bIsConnect=false;
     ui->pushButton_connect->setText("connect");
     ui->textEdit_messages->insertPlainText("服务器消息:Disconnected");
 }
@@ -435,7 +436,7 @@ void MainWindow::upVehicleStatus()
             QString::number(mfheading)+"]";
     //QByteArray bytes = test.toUtf8();
     QByteArray bytes = test.toLatin1();
-    socket->write(bytes);    
+    socket->write(bytes);
 }
 void MainWindow::upHardwareStatus()
 {
@@ -486,22 +487,24 @@ void MainWindow::upObstacleDataStatus()
 
 QString MainWindow::getObstacleData(int type)
 {
+    mMutexMap.lock();
     QString message="";
     ObsInfo obs;
     int i;
     if(type==0) {
         for(i=0;i<miRadarObsCount;i++) {
-            obs=mqRadarObsInfo[i];
+            obs=mqRadarObsInfo.at(i);
             message += ",["+QString::number(obs.type)+","+QString::number(obs.lon,'f',9)+","+QString::number(obs.lat,'f',9)+"]";
         }
     } else if(type==1) {
         for(i=0;i<miLidarObsCount;i++) {
-            obs=mqLidarObsInfo[i];
+            obs=mqLidarObsInfo.at(i);
             message += ",["+QString::number(obs.type)+","+QString::number(obs.lon,'f',9)+","+QString::number(obs.lat,'f',9)+"]";
         }
     } else {
         ui->textEdit_messages->insertPlainText("ProcessError消息:Obstacle data type get error!!!\n");
     }
+    mMutexMap.unlock();
     ui->textEdit_messages->insertPlainText("Obstacle Message: "+message);
     return message;
 }
@@ -599,6 +602,7 @@ void MainWindow::UpdateLidarObs(const char * strdata,const unsigned int nSize,co
 
 //    std::vector<iv::lidar::object>  lidarobjvec;
 //    strtolidarobj(lidarobjvec,strdata,nSize);
+    mMutexMap.lock();
     mqLidarObsInfo.clear();
     iv::lidar::objectarray lidarobjvec;
     std::string in;
@@ -623,11 +627,13 @@ void MainWindow::UpdateLidarObs(const char * strdata,const unsigned int nSize,co
         mqLidarObsInfo.append(xobsInfo);
     }
     mistLidar = 0;
+    mMutexMap.unlock();
 }
 
 void MainWindow::UpdateRadarObs(const char * strdata,const unsigned int nSize,const unsigned int index, \
                            const QDateTime * dt,const char * strmemname)
 {
+    mMutexMap.lock();
     mqRadarObsInfo.clear();
     static qint64 oldrecvtime;
     iv::radar::radarobjectarray xradararray;
@@ -664,7 +670,9 @@ void MainWindow::UpdateRadarObs(const char * strdata,const unsigned int nSize,co
         xobsInfo.type = 0;
         mqRadarObsInfo.append(xobsInfo);
     }
+
     mistRadar = 0;
     mistCanRadar = 0;
+    mMutexMap.unlock();
 //    mistLidar = 0;
 }

+ 2 - 0
src/v2x/v2xTcpClient/mainwindow.h

@@ -25,6 +25,7 @@
 #include "gnss_coordinate_convert.h"
 #include <QTimer>
 #include <iostream>
+#include <QMutex>
 namespace Ui {
 class MainWindow;
 }
@@ -99,6 +100,7 @@ private:
     void * mpMemLidar_pc;
     bool m_bEnablePlatform;
     bool m_bIsConnect;
+    QMutex mMutexMap;
     QVector<StationGps> mstationGps;
     iv::GPS_INS mpdata;
     int m_iHeartbeatCount;

+ 62 - 0
src/v2x/v2xTcpClient/obstacle_type.h

@@ -0,0 +1,62 @@
+#pragma once
+#ifndef _IV_COMMON_OBSTACLE_TYPE_
+#define _IV_COMMON_OBSTACLE_TYPE_
+#include <vector>
+#include <boost.h>
+/**
+*障碍物类型
+*/
+namespace iv {
+const int grx = 250, gry = 500, centerx = 125, centery = 250;
+const double gridwide = 0.2;
+struct ObstacleBasic
+{
+    bool valid;
+    float nomal_x;
+    float nomal_y;
+    float nomal_z;
+
+    float speed_relative;
+    float speed_x;
+    float speed_y;
+    float speed_z;
+
+    float high;
+    float low;
+
+    int esr_ID;
+};
+
+typedef boost::shared_ptr<std::vector<iv::ObstacleBasic>> ObsLiDAR;
+typedef boost::shared_ptr<std::vector<iv::ObstacleBasic>> ObsRadar;
+typedef boost::shared_ptr<std::vector<iv::ObstacleBasic>> ObsCamera;
+typedef boost::shared_ptr<std::vector<iv::ObstacleBasic>>ObsRadarPointer;
+struct Obs_grid
+{
+    double high;
+    double low;
+    double obshight;
+    int pointcount;
+    int ob;//障碍物属性,0地面 ,1路沿,2障碍物
+};
+
+typedef Obs_grid LidarGrid;
+typedef Obs_grid* LidarGridPtr;
+
+struct array_360
+{
+    float x;
+    float y;
+    float z;
+};
+
+struct detect_info
+{
+    int light;
+};
+
+typedef detect_info CameraInfo;
+typedef detect_info* CameraInfoPtr;
+}
+
+#endif // !_IV_COMMON_OBSTACLE_TYPE_