Sfoglia il codice sorgente

fix(grpc_BS):add front cam upload

fujiankuan 3 anni fa
parent
commit
fa78303357

+ 4 - 2
src/driver/driver_cloud_grpc_client_BS/driver_cloud_grpc_client_BS.pro

@@ -33,7 +33,8 @@ SOURCES += \
         vehicle_control.cpp \
         vehicle_patrol.cpp \
         vehicle_upload.cpp \
-        ../../include/msgtype/remotectrl.pb.cc
+        ../../include/msgtype/remotectrl.pb.cc \
+        ../../include/msgtype/rawpic.pb.cc
 
 
 # Default rules for deployment.
@@ -79,6 +80,7 @@ HEADERS += \
         vehicle_control.h \
         vehicle_patrol.h \
         vehicle_upload.h \
-        ../../include/msgtype/remotectrl.pb.h
+        ../../include/msgtype/remotectrl.pb.h \
+        ../../include/msgtype/rawpic.pb.h
 
 #before compile in ubuntu20.04 : sudo apt install libyaml-cpp-dev libgrpc++-dev

+ 38 - 0
src/driver/driver_cloud_grpc_client_BS/vehicle_upload.cpp

@@ -10,6 +10,24 @@ extern std::string gstruploadInterval;
 extern std::string gstrid;
 extern std::string gstrplateNumber;
 
+namespace iv {
+struct msgunit
+{
+    char mstrmsgname[256];
+    int mnBufferSize = 10000;
+    int mnBufferCount = 1;
+    void * mpa;
+    std::shared_ptr<char> mpstrmsgdata;
+    int mndatasize = 0;
+    bool mbRefresh = false;
+    bool mbImportant = false;
+    int mnkeeptime = 100;
+};
+}
+extern iv::msgunit shmPicFront;
+extern iv::msgunit shmPicRear;
+extern iv::msgunit shmPicLeft;
+extern iv::msgunit shmPicRight;
 
 using org::jeecg::defsDetails::grpc::Empty; ///< other message
 using org::jeecg::defsDetails::grpc::GPSPoint;
@@ -28,6 +46,24 @@ DataExchangeClient::~DataExchangeClient(void)
 
 }
 
+void DataExchangeClient::CameraPicRecv()
+{
+    mpa = new iv::modulecommext::modulecommmsg<iv::vision::rawpic>();
+    ModuleExtFun funext = std::bind(&DataExchangeClient::ListenPicMsg,this,std::placeholders::_1);
+    mpa->RegisterRecvPlus(shmPicFront.mstrmsgname,funext);
+}
+
+void DataExchangeClient::ListenPicMsg(google::protobuf::Message &xmsg) // need a lock
+{
+    iv::vision::rawpic  xdata;
+    xdata.CopyFrom(xmsg);
+    gMutex_ImageFront.lock();
+    cameraImageFront.clear();
+    cameraImageFront.append(xdata.picdata().data());
+    gMutex_ImageFront.unlock();
+//    qDebug("fastrtps: %lld",xdata.time());
+}
+
 std::string DataExchangeClient::uploadVehicleInfo(void)
 {
 
@@ -48,7 +84,9 @@ std::string DataExchangeClient::uploadVehicleInfo(void)
     request.set_pitch(pitch);
     request.set_roll(roll);
     request.set_heading(heading);
+    gMutex_ImageFront.lock();
     request.set_cameraimagefront(cameraImageFront.data(),cameraImageFront.size());
+    gMutex_ImageFront.unlock();
     request.set_cameraimagerear(cameraImageRear.data(),cameraImageRear.size());
     request.set_cameraimageleft(cameraImageLeft.data(),cameraImageLeft.size());
     request.set_cameraimageright(cameraImageRight.data(),cameraImageRight.size());

+ 10 - 0
src/driver/driver_cloud_grpc_client_BS/vehicle_upload.h

@@ -6,6 +6,7 @@
 #include <QDateTime>
 #include <QVector>
 #include <QThread>
+#include <QMutex>
 
 #include <iostream>
 #include <memory>
@@ -16,6 +17,7 @@
 #include "VehicleUpload_service.grpc.pb.h"
 #include "VehicleUpload.grpc.pb.h"
 #include "modulecommext.h"
+#include "rawpic.pb.h"
 
 using grpc::Channel;
 using grpc::ClientContext;
@@ -42,10 +44,17 @@ public:
     void updateData(void);
     void updatePath(std::string pathID,QVector<org::jeecg::defsDetails::grpc::MapPoint> points);
 
+    void CameraPicRecv();
+    iv::modulecommext::modulecommmsg<iv::vision::rawpic> * mpa;
+
+
 protected:
     void run();
 
 private:
+
+    void ListenPicMsg(google::protobuf::Message & xmsg);
+
     std::unique_ptr<DataExchange::Stub> stub_;
 
     std::string id;
@@ -65,6 +74,7 @@ private:
     double heading;
 
     QByteArray cameraImageFront;
+    QMutex gMutex_ImageFront;
     QByteArray cameraImageRear;
     QByteArray cameraImageLeft;
     QByteArray cameraImageRight;