Browse Source

fix(controller_midcar):add some info that feedback to plateform.

孙嘉城 3 years ago
parent
commit
715a99d7fa

+ 2 - 0
src/controller/controller_midcar/controller_midcar.pro

@@ -23,6 +23,7 @@ SOURCES += $$PWD/main.cpp \
     ../../include/msgtype/brainstate.pb.cc \
     ../../include/msgtype/canmsg.pb.cc \
     ../../include/msgtype/canraw.pb.cc \
+    ../../include/msgtype/platform_feedback.pb.cc \
     ../../include/msgtype/remotectrl.pb.cc
 
 include($$PWD/control/control.pri)
@@ -50,6 +51,7 @@ HEADERS += \
     ../../include/msgtype/decition.pb.h \
     ../../include/msgtype/canmsg.pb.h \
     ../../include/msgtype/canraw.pb.h \
+    ../../include/msgtype/platform_feedback.pb.h \
     ../../include/msgtype/remotectrl.pb.h
 
 

+ 47 - 2
src/controller/controller_midcar/main.cpp

@@ -16,16 +16,19 @@
 #include <thread>
 
 #include "remotectrl.pb.h"
+#include "platform_feedback.pb.h"
 
 QMutex gMutex;
 
 void * gpacansend;
 void * gpadecition;
 void * gparemote;
+void * gpaPaltformFeedback;
 
 std::string gstrmemdecition;
 std::string gstrmemcansend;
 std::string gstrmemremote; //Remote Ctrl
+std::string gstrmemPaltformFeedback;
 
 bool gbSendRun = true;
 
@@ -39,6 +42,7 @@ bool gbAutoDriving = true; //if true, Auto Driving, false, remote controll
 bool gbChassisEPS = true;
 
 iv::brain::decition gdecition_remote;
+iv::platformFeedback gPlateformFeedback;
 
 qint64 gLastRemoteTime = 0;
 
@@ -51,7 +55,6 @@ int gnIndex = 0;
 
 boost::shared_ptr<iv::control::Controller> gcontroller;	//实际车辆控制器
 
-
 void executeDecition(const iv::brain::decition decition)
 {
     std::cout<<"acc is "<<decition.torque()<<" ang is "<<decition.wheelangle()<<std::endl;
@@ -66,7 +69,27 @@ void executeDecition(const iv::brain::decition decition)
     gcontroller->control_drive_mode(decition.mode());
     gcontroller->control_elec_brake(decition.handbrake());
     gcontroller->control_brake_light(decition.brakelamp());
-    gcontroller->control_dangwei(decition.gear());
+    gcontroller->control_dangwei(decition.gear()); //0P 1D 2R 3N
+
+    switch (decition.gear()) {
+    case 0:
+        gPlateformFeedback.set_shift(3);  //0N 1D 2R 3P
+        break;
+    case 1:
+        gPlateformFeedback.set_shift(1);  //0N 1D 2R 3P
+        break;
+    case 2:
+        gPlateformFeedback.set_shift(2);  //0N 1D 2R 3P
+        break;
+    case 3:
+        gPlateformFeedback.set_shift(0);  //0N 1D 2R 3P
+        break;
+    default:
+        break;
+    }
+    gPlateformFeedback.set_throttle(decition.torque());
+    gPlateformFeedback.set_brake(decition.brake());
+    gPlateformFeedback.set_steeringwheelangle(decition.wheelangle());
 }
 
 
@@ -87,10 +110,12 @@ void ListenRemotectrl(const char * strdata,const unsigned int nSize,const unsign
     if(xrc.ntype() == iv::remotectrl_CtrlType_AUTO)
     {
         gbAutoDriving = true;
+        gPlateformFeedback.set_typefeedback(iv::platformFeedback::ctrlType::platformFeedback_ctrlType_AUTO);
     }
     else if(xrc.ntype() == iv::remotectrl_CtrlType_STOP)
     {
         gbAutoDriving = false;
+        gPlateformFeedback.set_typefeedback(iv::platformFeedback::ctrlType::platformFeedback_ctrlType_STOP);
         xdecition.set_torque(0.0);
         xdecition.set_brake(100.0);
         xdecition.set_wheelangle(0.0);
@@ -111,6 +136,7 @@ void ListenRemotectrl(const char * strdata,const unsigned int nSize,const unsign
     else
     {
         gbAutoDriving = false;
+        gPlateformFeedback.set_typefeedback(iv::platformFeedback::ctrlType::platformFeedback_ctrlType_REMOTE);
         xdecition.set_torque(xrc.acc());
         xdecition.set_brake(xrc.brake());
         xdecition.set_wheelangle(xrc.wheel()*5.5f);
@@ -181,6 +207,16 @@ void ExecSend()
     {
         std::cout<<"MainWindow::onTimer serialize error."<<std::endl;
     }
+
+    int ndatasize = gPlateformFeedback.ByteSize();
+    char * str = new char[ndatasize];
+    std::shared_ptr<char> pstr;pstr.reset(str);
+    if(!gPlateformFeedback.SerializeToArray(str,ndatasize))
+    {
+        std::cout<<"MainWindow::on_horizontalSlider_valueChanged serialize error."<<std::endl;
+        return;
+    }
+    iv::modulecomm::ModuleSendMsg(gpaPaltformFeedback,str,ndatasize);
 }
 
 
@@ -239,6 +275,13 @@ int main(int argc, char *argv[])
     gdecition_def.set_brake(0);
     gdecition_def.set_torque(0);
     gdecition_def.set_speed(105);
+
+    gPlateformFeedback.set_typefeedback(iv::platformFeedback::ctrlType::platformFeedback_ctrlType_AUTO);
+    gPlateformFeedback.set_shift(3);
+    gPlateformFeedback.set_throttle(0.0);
+    gPlateformFeedback.set_brake(0.0);
+    gPlateformFeedback.set_steeringwheelangle(0.0);
+
     gTime.start();
 
     gcontroller = boost::shared_ptr<iv::control::Controller>(new iv::control::Controller());
@@ -248,6 +291,7 @@ int main(int argc, char *argv[])
     gstrmemcansend = xp.GetParam("cansend","cansend0");
     gstrmemdecition = xp.GetParam("dection","deciton");
     gstrmemremote =  xp.GetParam("remotectrl","remotectrl");
+    gstrmemPaltformFeedback = xp.GetParam("paltformFeedback","paltformFeedback");
 
     std::string strremote = xp.GetParam("allowremote","true");
     if(strremote == "true")
@@ -262,6 +306,7 @@ int main(int argc, char *argv[])
 
     if(gbAllowRemote)
     {
+        gpaPaltformFeedback = iv::modulecomm::RegisterSend(gstrmemPaltformFeedback.data(),10000,1);
         gparemote = iv::modulecomm::RegisterRecv(gstrmemremote.data(),ListenRemotectrl);
     }
 

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

@@ -37,6 +37,7 @@ SOURCES += \
         ../../include/msgtype/chassis.pb.cc \
         ../../include/msgtype/brainstate.pb.cc \
         ../../include/msgtype/gpsimu.pb.cc \
+        ../../include/msgtype/platform_feedback.pb.cc \
         ../../include/msgtype/rawpic.pb.cc
 
 
@@ -87,6 +88,7 @@ HEADERS += \
         ../../include/msgtype/chassis.pb.h \
         ../../include/msgtype/brainstate.pb.h \
         ../../include/msgtype/gpsimu.pb.h \
+        ../../include/msgtype/platform_feedback.pb.h \
         ../../include/msgtype/rawpic.pb.h
 
 #before compile in ubuntu20.04 : sudo apt install libyaml-cpp-dev libgrpc++-dev

+ 20 - 0
src/include/proto/platform_feedback.proto

@@ -0,0 +1,20 @@
+syntax = "proto2";
+
+package iv;
+
+message platformFeedback
+{
+  enum ctrlType
+  {
+    AUTO = 0; 
+    REMOTE = 1;
+    STOP = 2;
+  }
+  optional ctrlType typeFeedback = 1;
+  optional int32 shift = 2;  //0N 1D 2R 3P
+  optional double throttle = 3; //0-100
+  optional double brake = 4; //0-100
+  optional double steeringWheelAngle = 5; //-550 to +550
+}
+
+//message trans direction: controller -> plateform client