|
@@ -3,11 +3,12 @@
|
|
|
#include <QFile>
|
|
|
#include <QString>
|
|
|
#include <QStringList>
|
|
|
+#include <math.h>
|
|
|
|
|
|
#include "modulecomm.h"
|
|
|
#include "rawpic.pb.h"
|
|
|
#include "chassis.pb.h"
|
|
|
-#include "brainstate.pb.h"
|
|
|
+#include "platform_feedback.pb.h"
|
|
|
#include "gpsimu.pb.h"
|
|
|
|
|
|
extern std::string gstrserverip;
|
|
@@ -17,6 +18,7 @@ extern std::string gstrid;
|
|
|
extern std::string gstrplateNumber;
|
|
|
|
|
|
extern uint8_t gShift_Status;//3 p 4 r 5 n 6 d
|
|
|
+extern uint8_t gCtrlMode_Status; //0 auto 1 remote 2 stop 3 platform
|
|
|
|
|
|
namespace iv {
|
|
|
struct msgunit
|
|
@@ -37,6 +39,9 @@ extern iv::msgunit shmPicFront;
|
|
|
extern iv::msgunit shmPicRear;
|
|
|
extern iv::msgunit shmPicLeft;
|
|
|
extern iv::msgunit shmPicRight;
|
|
|
+extern iv::msgunit shmChassis;
|
|
|
+extern iv::msgunit shmGPSIMU;
|
|
|
+extern iv::msgunit shmPlatformFeedback;
|
|
|
|
|
|
using org::jeecg::defsDetails::grpc::Empty; ///< other message
|
|
|
using org::jeecg::defsDetails::grpc::GPSPoint;
|
|
@@ -67,6 +72,21 @@ void ListenRightData(const char * strdata,const unsigned int nSize,const unsigne
|
|
|
gDataExchangeClient->ListenRightPicMsg(strdata,nSize);
|
|
|
}
|
|
|
|
|
|
+void ListenChassisData(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
|
|
|
+{
|
|
|
+ gDataExchangeClient->ListenChassisMsg(strdata,nSize);
|
|
|
+}
|
|
|
+
|
|
|
+void ListenGPSIMUData(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
|
|
|
+{
|
|
|
+ gDataExchangeClient->ListenGPSIMUMsg(strdata,nSize);
|
|
|
+}
|
|
|
+
|
|
|
+void ListenPlatformFeedbackData(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
|
|
|
+{
|
|
|
+ gDataExchangeClient->ListenPlatformFeedbackMsg(strdata,nSize);
|
|
|
+}
|
|
|
+
|
|
|
DataExchangeClient::DataExchangeClient(std::shared_ptr<Channel> channel)
|
|
|
{
|
|
|
gDataExchangeClient = this;
|
|
@@ -77,6 +97,9 @@ DataExchangeClient::DataExchangeClient(std::shared_ptr<Channel> channel)
|
|
|
shmPicRear.mpa = iv::modulecomm::RegisterRecv(shmPicRear.mstrmsgname,ListenRearData);
|
|
|
shmPicLeft.mpa = iv::modulecomm::RegisterRecv(shmPicLeft.mstrmsgname,ListenLeftData);
|
|
|
shmPicRight.mpa = iv::modulecomm::RegisterRecv(shmPicRight.mstrmsgname,ListenRightData);
|
|
|
+ shmChassis.mpa = iv::modulecomm::RegisterRecv(shmChassis.mstrmsgname,ListenChassisData);
|
|
|
+ shmGPSIMU.mpa = iv::modulecomm::RegisterRecv(shmGPSIMU.mstrmsgname,ListenGPSIMUData);
|
|
|
+ shmPlatformFeedback.mpa = iv::modulecomm::RegisterRecv(shmPlatformFeedback.mstrmsgname,ListenPlatformFeedbackData);
|
|
|
}
|
|
|
|
|
|
DataExchangeClient::~DataExchangeClient(void)
|
|
@@ -144,6 +167,101 @@ void DataExchangeClient::ListenRightPicMsg(const char * strdata,const unsigned i
|
|
|
gMutex_ImageRight.unlock();
|
|
|
}
|
|
|
|
|
|
+void DataExchangeClient::ListenChassisMsg(const char * strdata,const unsigned int nSize) // need a lock
|
|
|
+{
|
|
|
+ iv::chassis xdata;
|
|
|
+ if(!xdata.ParseFromArray(strdata,nSize))
|
|
|
+ {
|
|
|
+ std::cout<<" MainWindow::UpdateSlider parese error."<<std::endl;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ gMutex_Chassis.lock();
|
|
|
+ SOC = xdata.soc();
|
|
|
+ gMutex_Chassis.unlock();
|
|
|
+}
|
|
|
+
|
|
|
+void DataExchangeClient::ListenGPSIMUMsg(const char * strdata,const unsigned int nSize) // need a lock
|
|
|
+{
|
|
|
+ iv::gps::gpsimu xdata;
|
|
|
+ if(!xdata.ParseFromArray(strdata,nSize))
|
|
|
+ {
|
|
|
+ std::cout<<" MainWindow::UpdateSlider parese error."<<std::endl;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ double GPS_Speed = sqrt(xdata.ve()*xdata.ve()+xdata.vd()*xdata.vd()+xdata.vn()*xdata.vn());
|
|
|
+
|
|
|
+ gMutex_GPSIMU.lock();
|
|
|
+ GPSRTKStatus = xdata.rtk_state();
|
|
|
+ positionFeedback.set_latitude(xdata.lat());
|
|
|
+ positionFeedback.set_longitude(xdata.lon());
|
|
|
+ positionFeedback.set_height(xdata.height());
|
|
|
+ pitch = xdata.pitch();
|
|
|
+ roll = xdata.roll();
|
|
|
+ heading = xdata.heading();
|
|
|
+ speed = GPS_Speed;
|
|
|
+ gMutex_GPSIMU.unlock();
|
|
|
+}
|
|
|
+
|
|
|
+void DataExchangeClient::ListenPlatformFeedbackMsg(const char * strdata,const unsigned int nSize) // need a lock
|
|
|
+{
|
|
|
+ iv::platformFeedback xdata;
|
|
|
+ if(!xdata.ParseFromArray(strdata,nSize))
|
|
|
+ {
|
|
|
+ std::cout<<" MainWindow::UpdateSlider parese error."<<std::endl;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ gMutex_PlatformFeedback.lock();
|
|
|
+ switch (xdata.typefeedback()) {
|
|
|
+ case iv::platformFeedback::ctrlType::platformFeedback_ctrlType_AUTO:
|
|
|
+ statusFeedback = VehicleStatus::STATUS_AUTO;
|
|
|
+ modeFeedback = CtrlMode::CMD_AUTO;
|
|
|
+ break;
|
|
|
+ case iv::platformFeedback::ctrlType::platformFeedback_ctrlType_REMOTE:
|
|
|
+ if(gCtrlMode_Status == 1) //remote
|
|
|
+ {
|
|
|
+ statusFeedback = VehicleStatus::STATUS_REMOTE;
|
|
|
+ modeFeedback = CtrlMode::CMD_REMOTE;
|
|
|
+ }
|
|
|
+ else if(gCtrlMode_Status == 3) //platform
|
|
|
+ {
|
|
|
+ statusFeedback = VehicleStatus::STATUS_REMOTE;
|
|
|
+ modeFeedback = CtrlMode::CMD_CLOUD_PLATFORM;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case iv::platformFeedback::ctrlType::platformFeedback_ctrlType_STOP:
|
|
|
+ statusFeedback = VehicleStatus::STATUS_EMERGENCY_STOP;
|
|
|
+ modeFeedback = CtrlMode::CMD_EMERGENCY_STOP;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ switch (xdata.shift()) {
|
|
|
+ case 0: //0N 1D 2R 3P
|
|
|
+ shiftFeedback = ShiftStatus::SHIFT_NEUTRAL;
|
|
|
+ break;
|
|
|
+ case 1: //0N 1D 2R 3P
|
|
|
+ shiftFeedback = ShiftStatus::SHIFT_DRIVE;
|
|
|
+ break;
|
|
|
+ case 2: //0N 1D 2R 3P
|
|
|
+ shiftFeedback = ShiftStatus::SHIFT_REVERSE;
|
|
|
+ break;
|
|
|
+ case 3: //0N 1D 2R 3P
|
|
|
+ shiftFeedback = ShiftStatus::SHIFT_PARKING;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ throttleFeedback = xdata.throttle();
|
|
|
+ brakeFeedback = xdata.brake();
|
|
|
+ steeringWheelAngleFeedback = xdata.steeringwheelangle();
|
|
|
+ gMutex_PlatformFeedback.unlock();
|
|
|
+}
|
|
|
+
|
|
|
std::string DataExchangeClient::uploadVehicleInfo(void)
|
|
|
{
|
|
|
|
|
@@ -151,19 +269,30 @@ std::string DataExchangeClient::uploadVehicleInfo(void)
|
|
|
UplinkRequest request;
|
|
|
request.set_id(id);
|
|
|
request.set_timestamp(timeStamp);
|
|
|
+
|
|
|
+ gMutex_Chassis.lock();
|
|
|
request.set_soc(SOC);
|
|
|
+ gMutex_Chassis.unlock();
|
|
|
+
|
|
|
+ gMutex_PlatformFeedback.lock();
|
|
|
request.set_statusfeedback(statusFeedback);
|
|
|
- request.set_mileage(mileage);
|
|
|
- request.set_speed(speed);
|
|
|
+ request.set_modefeedback(modeFeedback);
|
|
|
request.set_shiftfeedback(shiftFeedback);
|
|
|
request.set_steeringwheelanglefeedback(steeringWheelAngleFeedback);
|
|
|
request.set_throttlefeedback(throttleFeedback);
|
|
|
request.set_brakefeedback(brakeFeedback);
|
|
|
+ gMutex_PlatformFeedback.unlock();
|
|
|
+
|
|
|
+ gMutex_GPSIMU.lock();
|
|
|
+ request.set_mileage(mileage);
|
|
|
+ request.set_speed(speed);
|
|
|
request.set_gpsrtkstatus(GPSRTKStatus);
|
|
|
request.mutable_positionfeedback()->CopyFrom(positionFeedback);
|
|
|
request.set_pitch(pitch);
|
|
|
request.set_roll(roll);
|
|
|
request.set_heading(heading);
|
|
|
+ gMutex_GPSIMU.unlock();
|
|
|
+
|
|
|
gMutex_ImageFront.lock();
|
|
|
request.set_cameraimagefront(cameraImageFront.data(),cameraImageFront.size());
|
|
|
gMutex_ImageFront.unlock();
|
|
@@ -176,6 +305,7 @@ std::string DataExchangeClient::uploadVehicleInfo(void)
|
|
|
gMutex_ImageRight.lock();
|
|
|
request.set_cameraimageright(cameraImageRight.data(),cameraImageRight.size());
|
|
|
gMutex_ImageRight.unlock();
|
|
|
+
|
|
|
request.set_sensorstatusgpsimu(sensorStatusGPSIMU);
|
|
|
request.set_sensorstatuslidar(sensorStatusLidar);
|
|
|
request.set_sensorstatusradar(sensorStatusRadar);
|
|
@@ -185,7 +315,6 @@ std::string DataExchangeClient::uploadVehicleInfo(void)
|
|
|
request.set_sensorstatuscamright(sensorStatusCamRight);
|
|
|
request.set_isarrived(isArrived);
|
|
|
request.set_platenumber(plateNumber);
|
|
|
- request.set_modefeedback(modeFeedback);
|
|
|
|
|
|
// Container for the data we expect from the server.
|
|
|
ResponseMessage reply;
|
|
@@ -264,25 +393,27 @@ std::string DataExchangeClient::uploadPath(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void DataExchangeClient::updateData(void)
|
|
|
+void DataExchangeClient::updateData(uint64_t timeInterval_ms)
|
|
|
{
|
|
|
id = gstrid;
|
|
|
timeStamp = QDateTime::currentMSecsSinceEpoch();
|
|
|
- SOC = 87.5;
|
|
|
- statusFeedback = VehicleStatus::STATUS_REMOTE;
|
|
|
- mileage = 123.45; // kilometer
|
|
|
- speed = 0.1; // m/s
|
|
|
- shiftFeedback = ShiftStatus::SHIFT_DRIVE;
|
|
|
- steeringWheelAngleFeedback = 1.23; //+/-540 degree
|
|
|
- throttleFeedback = 0.12;
|
|
|
- brakeFeedback = 0.34;
|
|
|
- GPSRTKStatus = 6; //GPS-RTK status 0-6 6 is best
|
|
|
- positionFeedback.set_latitude(39.0666552);
|
|
|
- positionFeedback.set_longitude(117.3540963);
|
|
|
- positionFeedback.set_height(0.84);
|
|
|
- pitch = 0.03;
|
|
|
- roll = 0.02;
|
|
|
- heading = 198.4;
|
|
|
+// SOC = 87.5;
|
|
|
+// statusFeedback = VehicleStatus::STATUS_REMOTE;
|
|
|
+ gMutex_GPSIMU.lock();
|
|
|
+ mileage += (speed * timeInterval_ms/1000.0)/1000.0; // kilometer
|
|
|
+ gMutex_GPSIMU.unlock();
|
|
|
+// speed = 0.1; // m/s
|
|
|
+// shiftFeedback = ShiftStatus::SHIFT_DRIVE;
|
|
|
+// steeringWheelAngleFeedback = 1.23; //+/-540 degree
|
|
|
+// throttleFeedback = 0.12;
|
|
|
+// brakeFeedback = 0.34;
|
|
|
+// GPSRTKStatus = 6; //GPS-RTK status 0-6 6 is best
|
|
|
+// positionFeedback.set_latitude(39.0666552);
|
|
|
+// positionFeedback.set_longitude(117.3540963);
|
|
|
+// positionFeedback.set_height(0.84);
|
|
|
+// pitch = 0.03;
|
|
|
+// roll = 0.02;
|
|
|
+// heading = 198.4;
|
|
|
|
|
|
// QFile xFile;
|
|
|
// xFile.setFileName("/home/nvidia/Pictures/123.jpg");
|
|
@@ -325,7 +456,7 @@ void DataExchangeClient::updateData(void)
|
|
|
|
|
|
plateNumber = gstrplateNumber;
|
|
|
|
|
|
- modeFeedback = CtrlMode::CMD_REMOTE; //mode Feedback
|
|
|
+// modeFeedback = CtrlMode::CMD_REMOTE; //mode Feedback
|
|
|
}
|
|
|
|
|
|
void DataExchangeClient::updatePath(std::string pathID, QVector<MapPoint> points)
|
|
@@ -374,7 +505,7 @@ void DataExchangeClient::run()
|
|
|
{
|
|
|
if((xTime.elapsed() - lastTime)>=interval)
|
|
|
{
|
|
|
- updateData();
|
|
|
+ updateData(xTime.elapsed() - lastTime);
|
|
|
std::string reply = uploadVehicleInfo();
|
|
|
std::cout<< reply <<std::endl;
|
|
|
lastTime = xTime.elapsed();
|