Bläddra i källkod

complete sick511

zx 5 år sedan
förälder
incheckning
909871f09a
8 ändrade filer med 44 tillägg och 20 borttagningar
  1. 3 3
      GarageMeasurement.pro.user
  2. 14 4
      laser/Laser.cpp
  3. 2 2
      laser/Laser.h
  4. 2 2
      laser/Sick511FileLaser.cpp
  5. 1 1
      laser/UdpLaser.cpp
  6. 1 1
      main.cpp
  7. 9 3
      mainwindow.cpp
  8. 12 4
      src/measuretask.cpp

+ 3 - 3
GarageMeasurement.pro.user

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.4.1, 2019-10-31T23:14:48. -->
+<!-- Written by QtCreator 4.4.1, 2019-11-05T11:29:48. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
@@ -64,7 +64,7 @@
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.9.2 GCC 64bit</value>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.9.2 GCC 64bit</value>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.592.gcc_64_kit</value>
-   <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
+   <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
    <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
@@ -312,7 +312,7 @@
     <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">GarageMeasurement.pro</value>
     <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
     <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
-    <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory.default">/home/zx/zzw/GarageMeasurement/build-GarageMeasurement-Desktop_Qt_5_9_2_GCC_64bit-Debug</value>
+    <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory.default">/home/zx/zzw/GarageMeasurement/build-GarageMeasurement-Desktop_Qt_5_9_2_GCC_64bit-Release</value>
     <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
     <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
     <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>

+ 14 - 4
laser/Laser.cpp

@@ -6,6 +6,7 @@ CBinaryData::CBinaryData()
 {
 }
 CBinaryData::CBinaryData(const char* buf, int len, DATA_type type)
+    :m_buf(0),m_length(0)
 {
 	if (len > 0)
 	{
@@ -15,6 +16,7 @@ CBinaryData::CBinaryData(const char* buf, int len, DATA_type type)
 	}
 }
 CBinaryData::CBinaryData(const CBinaryData& data)
+    :m_buf(0),m_length(0)
 {
 	if (m_buf)
 	{
@@ -31,7 +33,7 @@ CBinaryData::CBinaryData(const CBinaryData& data)
 }
 CBinaryData::~CBinaryData()
 {
-	if (m_buf)
+    if (m_buf && m_length)
 	{
 		free(m_buf);
 		m_length = 0;
@@ -43,7 +45,7 @@ char* CBinaryData::Data()const {
 int CBinaryData::Length()const {
 	return m_length;
 }
-CBinaryData& CBinaryData::operator=(CBinaryData data)
+CBinaryData& CBinaryData::operator=(const CBinaryData& data)
 {
 	if (m_buf)
 	{
@@ -206,6 +208,7 @@ void CLaser::thread_recv()
 		else
 		{
 			delete data;
+            data=0;
 		}
 		
 	}
@@ -244,6 +247,8 @@ void CLaser::thread_toXYZ()
 		DATA_type type = eUnknow;
 		if (bPop || m_last_data.Length() != 0)
 		{
+            m_queue_laser_data.try_pop();
+
 			std::vector<CPoint3D> cloud;
 			if (bPop)
 			{
@@ -259,7 +264,12 @@ void CLaser::thread_toXYZ()
 			}
 			if (type == eUnknow)
 			{
-				delete pData;
+                if(pData)
+                 {
+
+                    delete pData;
+                    pData=0;
+                }
 				continue;
 			}
 
@@ -298,8 +308,8 @@ void CLaser::thread_toXYZ()
 				m_statu = eLaser_ready;
 			}
 
-			m_queue_laser_data.try_pop();
 			delete pData;
+            pData=0;
 		}
 		
 	}

+ 2 - 2
laser/Laser.h

@@ -24,7 +24,7 @@ public:
 	CBinaryData(const CBinaryData& data);
 	~CBinaryData();
 	CBinaryData(const char* buf, int len, DATA_type type= eUnknow);
-    CBinaryData& operator=(CBinaryData data);
+    CBinaryData& operator=(const CBinaryData& data);
 	bool operator==(const char* str);
 	const char* operator+(int n);
 	CBinaryData& operator+(CBinaryData& data);
@@ -164,7 +164,7 @@ public:
 	///设置数据存储路径
 	void			SetSaveDir(std::string strDir,bool bSave=true);
 	///查询雷达是否空闲
-	bool			IsReady() { return m_statu == eLaser_ready; }
+    bool			IsReady() { return m_statu == eLaser_ready || m_statu==eLaser_connect; }
     eLaserStatu     GetStatu(){return m_statu;}
 	int				ID() { return m_id; }
 protected:

+ 2 - 2
laser/Sick511FileLaser.cpp

@@ -175,8 +175,8 @@ bool CSick511FileLaser::RecvData(CBinaryData& data)
 		m_stream_read.open(m_file.c_str(), ios::in | ios::binary);
 	}
 
-	char buf[1024] = { 0 };
-	m_stream_read.read(buf, 1024);
+    char buf[512] = { 0 };
+    m_stream_read.read(buf, 512);
 	int count = m_stream_read.gcount();
 	if (count > 0)
 	{

+ 1 - 1
laser/UdpLaser.cpp

@@ -181,7 +181,7 @@ DATA_type CUdpLaser::Data2PointXYZ(CBinaryData* pData, std::vector<CPoint3D>& po
 bool CUdpLaser::RecvData(CBinaryData& data)
 {
 	char buf[4096 * 10] = { 0 };
-	int bytesRead = Recv(buf, 4096 * 10);
+    int bytesRead = Recv(buf, 4096);
 	if (bytesRead > 0)
 	{
 		CBinaryData bin_data(buf, bytesRead);

+ 1 - 1
main.cpp

@@ -66,7 +66,7 @@ int main(int argc, char *argv[])
         QMessageBox::about(NULL, "Error", "Read proto failed...");
     }
 
-    m_pProcess=new CProcess(m_laser_calib_param,0);
+    m_pProcess=new CProcess(m_laser_calib_param,&w);
     if(m_pProcess->Init()==false)
     {
         QMessageBox::about(NULL, "Error", m_pProcess->LastError().c_str());

+ 9 - 3
mainwindow.cpp

@@ -32,6 +32,9 @@ void MainWindow::AddLog(std::string log)
     ui->m_log_list->scrollToBottom();
 
 }
+
+#include "qmessagebox.h"
+
 void MainWindow::ProcessSlot(QVariant var)
 {
     QtMessageData data=var.value<QtMessageData>();
@@ -51,16 +54,17 @@ void MainWindow::ProcessSlot(QVariant var)
     else if(data.msg_type==eMeasure)
     {
         std::string msgstr="Laser ID : ";
+
         char buf[255];
         memset(buf,0,255);
         std::vector<int> IDS;
         for(int i=0;i<16;++i)
         {
-            if((0x01<<i) & data.lasers_id !=0)
+            if(((0x01<<i) & data.lasers_id) !=0)
                 IDS.push_back(i);
         }
         for(int i=0;i<IDS.size();++i)
-            sprintf(buf,"%d   ",IDS[i]+1);
+            sprintf(buf+strlen(buf),"%d   ",IDS[i]+1);
         msgstr+=buf;
         msgstr+='\n';
 
@@ -93,7 +97,9 @@ void MainWindow::on_m_test_btn_clicked()
 extern CProcess* m_pProcess;
 void MainWindow::on_m_add_clicked()
 {
+    CBinaryData* data=new CBinaryData();
+    delete data;
 
-    m_pProcess->PushTask(0x01,1,false);
+    m_pProcess->PushTask(0xFF,1,false);
     AddLog(" test tsak ");
 }

+ 12 - 4
src/measuretask.cpp

@@ -313,14 +313,18 @@ void MeasureTask::SetResultCallback(void *ptr, ResultCallback func)
 
 bool msg2result(nnxx::message& msg,std::vector<CarPosition>& positions)
 {
+    positions.clear();
     int size=sizeof(CarPosition);
     if(msg.size()%size!=0)
         return false;
 
     int num=msg.size()/size;
-    if(num<=0) return false;
-    positions.resize(num);
-    memcpy(positions.data(),msg.data(),msg.size());
+    if(num<0) return false;
+    if(num>0)
+    {
+        positions.resize(num);
+        memcpy(positions.data(),msg.data(),msg.size());
+    }
     return true;
 }
 
@@ -358,13 +362,17 @@ void  MeasureTask::Main()
     nnxx::socket client { nnxx::SP, nnxx::REQ };
     client.connect("ipc:///tmp/reqrep.ipc");
 
-    if (client.send((void*)(m_cloud.points.data()),sizeof(PointT)*m_cloud.size()) ==14)
+    size_t bytesize=sizeof(PointT)*m_cloud.size();
+    int rc=client.send((void*)(m_cloud.points.data()),bytesize);
+
+    if (rc==bytesize)
     {
         nnxx::message ret;
         try { nnxx::with_recv_timeout _ { client, std::chrono::seconds(3) };
             ret=client.recv();
           }
           catch (const nnxx::timeout_error &) {
+            LOG(ERROR)<<" Locate time out ....";
           }
           catch (const std::exception &) {