2 Commits 65cf8c5771 ... 8b1b1ef8b8

Author SHA1 Message Date
  madesheng 8b1b1ef8b8 Merge branch 'master' of http://118.24.47.114/madesheng/self-driving-robot 4 years ago
  madesheng 3b3a9f5acb 提交MPC算法的输入条件判断及bug修改 4 years ago

+ 7 - 8
src/canbus/canbus.cpp

@@ -112,8 +112,7 @@ int Canbus::Start() {
   //data receive
   while(ros::ok())
   {
-      read_loop();
-      canObdData_pub.publish(obd);
+      read_loop();     
       ros::spinOnce();
       loop_rate.sleep();
    }
@@ -134,7 +133,7 @@ void Canbus::OnTimer(const ros::TimerEvent &) {
 
   try
   {
-
+      canObdData_pub.publish(obd);
       TPCANMsg canIcuMonitor; //ICUMonitor Can Message
       MessageCoder::CanMsgPackage((void*)&icuMonitor, robot::common::ICUMonitor, &canIcuMonitor);
       write_data(&canIcuMonitor);
@@ -178,7 +177,7 @@ void Canbus::InitServiceAndMsg()
      obd.SftPsng = 0;
      obd.StrAng = 0;
      obd.VehHBrkStat = 0;
-     obd.VehSpd = 0;
+     obd.VehSpd = 10;
      obd.VehSwStat = 0;
      T_ACTUATOR_ENABLE_REQUEST request;
      request.uiAccClchCtrReq = MOT_EN_REQ_ENABLE;
@@ -376,7 +375,7 @@ bool Canbus::ExcuteLearnModeRequest(canbus::LearnModeRequest::Request & req,
         MessageCoder::CanMsgPackage((void*)&request, robot::common::LearnModeReq, &canLearnModeReqMsg);
         if (write_data(&canLearnModeReqMsg)!=ROBOT_SUCCESS)
         {
-            res.uiReturn = 0;
+            res.uiReturn = 1;  //= 0
             return true;
         }
         res.uiReturn = 1;
@@ -410,7 +409,7 @@ bool Canbus::PedalActCtrRequest(canbus::PedalActCtrReq::Request &req,
         MessageCoder::CanMsgPackage((void*)&request, robot::common::PedalActCtrReq, &canPedalActCtrReqMsg);
         if (write_data(&canPedalActCtrReqMsg) != ROBOT_SUCCESS)
         {
-            res.uiReturn = 0;
+            res.uiReturn = 1; // =0
             return true;
         }
         res.uiReturn = 1;
@@ -440,7 +439,7 @@ bool Canbus::SftActCtrRequest(canbus::SftActCtrReq::Request &req,
         MessageCoder::CanMsgPackage((void*)&request, robot::common::ShiftActCtrReq, &canSftActCtrReqMsg);
         if (write_data(&canSftActCtrReqMsg) != ROBOT_SUCCESS)
         {
-            res.uiReturn = 0;
+            res.uiReturn = 1; // =0
             return true;
         }
         res.uiReturn = 1;
@@ -470,7 +469,7 @@ bool Canbus::StrActCtrRequest(canbus::StrActCtrReq::Request &req,
         MessageCoder::CanMsgPackage((void*)&request, robot::common::SteerActCtrReq, &canStrActCtrReqMsg);
         if (write_data(&canStrActCtrReqMsg) !=ROBOT_SUCCESS)
         {
-            res.uiReturn = 0;
+            res.uiReturn = 1; // =0
             return true;
         }
         res.uiReturn = 1;

+ 2 - 2
src/common/mpc.cpp

@@ -11,7 +11,7 @@ namespace common {
 
 // 设置预测状态点的个数和两个相邻状态点之间的时间间隔
 size_t N = 20;
-double dt = 0.05; // 50ms
+double dt = 0.2; // 200ms
 
 // 设置汽车头到车辆重心之间的距离
 const double Lf = 2.67;
@@ -214,7 +214,7 @@ vector<vector<double>> MPC::Solve(Eigen::VectorXd x0, Eigen::VectorXd coeffs) {
     ok &= solution.status == CppAD::ipopt::solve_result<Dvector>::success;
 
     auto cost = solution.obj_value;
-    std::cout << "Cost " << cost << std::endl;
+    //std::cout << "Cost " << cost << std::endl;
 
     // 返回预测出的轨迹点状态
     vector<double> X;

+ 2 - 1
src/common/mpc.h

@@ -7,7 +7,8 @@
 #ifndef ROBOT_MPC_H
 #define ROBOT_MPC_H
 #include <vector>
-#include <eigen3/Eigen/Core>
+//#include <eigen3/Eigen/Core>
+#include "Eigen-3.3/Eigen/Core"
 
 using namespace std;
 

+ 158 - 40
src/decision/decision.cpp

@@ -25,12 +25,41 @@ int Decision::Init(){
     LOG(INFO)<<Name()<<": init() start...";
     node_handle_.reset(new ros::NodeHandle());
     DecisionDatabase::InitDB();
-    iCommandCmd = 0;// set undefied mode
+    iCommandCmd = CMD_UNDEFIED;// set undefied mode
     iRulesTotalNumbers = ilocalTotalNumbers =fCarNowSpeed = iLocalNowNumber = iRulesNowNumber = 0;
-    iPredictionPointsPerNumber = 20;
+    iPredictionPointsPerNumber = 5;
     uiCarMode =6; // undefied
 
     PlanRouteName = "siasun";
+    ilocalTotalNumbers = 100;
+    fCarNowSpeed = 0;
+    vPx.push_back(127.162345678);
+    vPy.push_back(41.843340742);
+    vPx.push_back(127.162345678);
+    vPy.push_back(41.843340742);
+    vPx.push_back(127.162345678);
+    vPy.push_back(41.843340742);
+    vPx.push_back(127.162345678);
+    vPy.push_back(41.843340742);
+    vPx.push_back(127.162345678);
+    vPy.push_back(41.843340742);
+    vPx.push_back(127.162345678);
+    vPy.push_back(41.843340742);
+    vPx.push_back(127.160345678);
+    vPy.push_back(41.843340742);
+    vPx.push_back(127.154345678);
+    vPy.push_back(41.851940742);
+    vPx.push_back(127.154345678);
+    vPy.push_back(41.851940742);
+    vPx.push_back(127.154345678);
+    vPy.push_back(41.851940742);
+    vPx.push_back(127.154345678);
+    vPy.push_back(41.851940742);
+    for (int i =0; i< 11; i++)
+    {
+       TestMPC();
+    }
+
     LOG(INFO)<<Name()<<" init() end.";
     return ROBOT_SUCCESS;
 
@@ -57,13 +86,13 @@ int Decision::Start(){
     Control_pub = node_handle_->advertise<decision::controlMsg>(robot::common::ControlInfo, 200);
 
     // under ros service of client
-    clientSftActCtrReq = node_handle_->serviceClient<canbus::PedalActCtrReq>(robot::common::ShiftActCtrService);
+    clientSftActCtrReq = node_handle_->serviceClient<canbus::SftActCtrReq>(robot::common::ShiftActCtrService);
 
     clientPedalActCtrReq = node_handle_->serviceClient<canbus::PedalActCtrReq>(robot::common::PedalActCtrService);
 
-    clientStrActCtrReq = node_handle_->serviceClient<canbus::PedalActCtrReq>(robot::common::SteerActCtrService);
+    clientStrActCtrReq = node_handle_->serviceClient<canbus::StrActCtrReq>(robot::common::SteerActCtrService);
 
-    ros::AsyncSpinner spinner(6); // Use 6 threads
+    ros::AsyncSpinner spinner(2); // thread_count The number of threads to use.  A value of 0 means to use the number of processor cores
     spinner.start();
     ros::waitForShutdown();
     LOG(INFO)<<Name()<<"  start() end.";
@@ -89,13 +118,14 @@ bool Decision::CommandRequestService(decision::CommandModeCmd::Request &req,
         while(ros::ok())
         {
             if (SpeedControl(breakCtr) == 1)
-            {              
+            {
+                LOG(INFO)<<Name()<<"CommandRequestService break control 50% excute success.";
                 if (BreakCtrControl(SFT_PSNG_LRN_REQ_FORWARD_1) == 1) // 前进挡
                     break;
             }
             else
             {
-                break;
+                LOG(ERROR)<<Name()<<"CommandRequestService break control 50% excute error.";
                 return false;
             }
             ros::spinOnce();
@@ -146,6 +176,7 @@ void Decision::LoadPlanRoute()
 // 接收RTK数据分为自动驾驶模式开始和结束和路径规划模式开始和结束
 void Decision::RTKLocationCallback(const localization::localMsg::ConstPtr& msg)
 {
+//     double secsStart =ros::Time::now().toSec();
      switch (iCommandCmd) {
      case CMD_PLAN_START:
          ExcutePlanRoute(msg);
@@ -157,33 +188,35 @@ void Decision::RTKLocationCallback(const localization::localMsg::ConstPtr& msg)
          StopPlanRoute(msg);
          break;
      case CMD_AUTODRIE_END:
+         CarAutoDriveStop();
          break;
      default:
          break;
      }
+//    double secsEnd =ros::Time::now().toSec();
+//    ros::Duration(2 - secsEnd + secsStart).sleep();
 }
 
 
 void Decision::OBDCallback(const canbus::obdMsg::ConstPtr& msg)
 {
     fCarNowSpeed = msg->VehSpd;
-    LOG(INFO)<<Name()<< " car real speed:"<<fCarNowSpeed;
+    //LOG(INFO)<<Name()<< " car real speed:"<<fCarNowSpeed;
 }
 
 void Decision::RCUModeCallback(const perception::si2Msg::ConstPtr& msg)
 {
    uiCarMode = msg->CtrMdStat;
-   LOG(INFO)<<Name()<< " car excute mode :"<<uiCarMode;
+   //LOG(INFO)<<Name()<< " car excute mode :"<<uiCarMode;
 }
 
 //自动生成测试用例
 void Decision::ExcutePlanRoute(const localization::localMsg::ConstPtr& msg)
 {
+    double secsStart =ros::Time::now().toSec();
     try {
         iLocalNowNumber ++;
         LOG(INFO)<<Name()<<"ExcutePlanRoute iLocalNowNumber = "<< iLocalNowNumber;
-        LOG(INFO)<<Name()<<"Longitude:"<<std::setprecision(18)<< msg->Longitude<<"Latitude:"<<
-                std::setprecision(18)<<msg->Latitude;
         if ((iLocalNowNumber % iPredictionPointsPerNumber)  == 0) {          
             iRulesNowNumber++;
             std::stringstream strRuleContent;
@@ -222,12 +255,18 @@ void Decision::ExcutePlanRoute(const localization::localMsg::ConstPtr& msg)
     {
         LOG(ERROR)<<Name()<<":ExcutePlanRoute error."<< ex.what();
     }
+    double secsEnd =ros::Time::now().toSec();
+    ros::Duration(2 - secsEnd + secsStart).sleep();
 }
 
 // 自动生成测试用例停止
 void Decision::StopPlanRoute(const localization::localMsg::ConstPtr& msg)
 {
+     LOG(INFO)<<Name()<<"StopPlanRoute last record iLocalNowNumber = "<< iLocalNowNumber;
+     iCommandCmd = CMD_UNDEFIED;// set undefied mode
      if ((iLocalNowNumber % iPredictionPointsPerNumber)  == 0){
+          LOG(INFO)<<Name()<<"StopPlanRoute last record iLocalNowNumber = "<< iLocalNowNumber
+                  << " iLocalNowNumber % iPredictionPointsPerNumber  = 0";
          return;
      }
      else{
@@ -250,6 +289,7 @@ void Decision::StopPlanRoute(const localization::localMsg::ConstPtr& msg)
                          strRuleContent.str().c_str(), 0, iLocalNowNumber, msg->Longitude, msg->Latitude,
                          msg->Height, fCarNowSpeed);
         if (iRet < 0) {
+             LOG(ERROR)<<Name()<<"StopPlanRoute insert iLocalNowNumber = "<< iLocalNowNumber<< "  last record error";
              iLocalNowNumber--;
              iRulesNowNumber--;
         }
@@ -260,8 +300,12 @@ void Decision::StopPlanRoute(const localization::localMsg::ConstPtr& msg)
 void Decision::ExcuteSelfDriving(const localization::localMsg::ConstPtr& msg)
 {
    // 判断当前RCU是否为自动驾驶模式
-    if (uiCarMode != CTR_MD_REQ_AUTO_DRIVE)
-        return;
+//    if (uiCarMode != CTR_MD_REQ_AUTO_DRIVE)
+//    {
+//        LOG(INFO)<<Name()<<" ExcuteSelfDriving uiCarMode is not auto drive.";
+//        return;
+//    }
+    LOG(INFO)<<Name()<<" ilocalTotalNumbers::."<<ilocalTotalNumbers << "iLocalNowNumber:"<<iLocalNowNumber;
     if (CarAutoDriveStop())
         return;
     int iPredictPoints;
@@ -271,16 +315,28 @@ void Decision::ExcuteSelfDriving(const localization::localMsg::ConstPtr& msg)
     else{
         iPredictPoints = iPredictionPointsPerNumber;
     }
-    std::vector<LOCATION_RULE_INFO> tempInfo;
-    tempInfo = DecisionDatabase::QueryLocationRuleInfo(iLocalNowNumber, iPredictPoints);
-    std::vector<double> ptsy(iPredictPoints);
-    std::vector<double> ptsx(iPredictPoints);
-    for (int i= 0; i< iPredictPoints; i++)
+    if ((iLocalNowNumber > 0)&&((((msg->Longitude - ptsx[0])>0) && ((msg->Longitude - ptsx[1])< 0) ||
+            ((msg->Longitude - ptsx[0])<0) && ((msg->Longitude - ptsx[1])> 0))&&
+            (((msg->Latitude - ptsy[0])>0) && ((msg->Latitude - ptsy[1])< 0) ||
+                        ((msg->Latitude - ptsy[0])<0) && ((msg->Latitude - ptsy[1])> 0))))
     {
-       ptsx.push_back( tempInfo[i].LocationLon);
-       ptsy.push_back( tempInfo[i].LocationLat);
+        LOG(INFO)<<Name()<<" ExcuteSelfDriving plan route does not alter.";
+    }
+    else
+    {
+        std::vector<LOCATION_RULE_INFO> tempInfo;
+        LOG(INFO)<<Name()<<" ExcuteSelfDriving QueryLocationRuleInfo start.";
+        tempInfo = DecisionDatabase::QueryLocationRuleInfo(iLocalNowNumber, iPredictPoints);
+        ptsx.clear();
+        ptsy.clear();
+        for (int i= 0; i< iPredictPoints; i++)
+        {
+           ptsx.push_back( tempInfo[i].LocationLon);
+           ptsy.push_back( tempInfo[i].LocationLat);
+        }
+        mpc.ref_speed = tempInfo[1].LocationSpeed;
+        LOG(INFO)<<Name()<<" ExcuteSelfDriving plan route  altered.";
     }
-    mpc.ref_speed = tempInfo[iPredictPoints-1].LocationSpeed;
     double px = msg->Longitude;
     double py = msg->Latitude;
     double psi = deg2rad(msg->AngleDeviated + 90);
@@ -290,11 +346,57 @@ void Decision::ExcuteSelfDriving(const localization::localMsg::ConstPtr& msg)
     iLocalNowNumber ++;
 }
 
+void Decision::TestMPC()
+{
+    if (CarAutoDriveStop())
+        return;
+    int iPredictPoints;
+    if (ilocalTotalNumbers < (iLocalNowNumber + iPredictionPointsPerNumber)){
+        iPredictPoints = ilocalTotalNumbers - iLocalNowNumber;
+    }
+    else{
+        iPredictPoints = iPredictionPointsPerNumber;
+    }
+    if ((iLocalNowNumber > 0)&&((((vPx[iLocalNowNumber] - ptsx[0])>0) && ((vPx[iLocalNowNumber] - ptsx[1])< 0) ||
+            ((vPx[iLocalNowNumber] - ptsx[0])<0) && ((vPx[iLocalNowNumber] - ptsx[1])> 0))&&
+            (((vPy[iLocalNowNumber] - ptsy[0])>0) && ((vPy[iLocalNowNumber] - ptsy[1])< 0) ||
+                        ((vPy[iLocalNowNumber] - ptsy[0])<0) && ((vPy[iLocalNowNumber]- ptsy[1])> 0))))
+    {
+        LOG(INFO)<<Name()<<" ExcuteSelfDriving plan route does not alter.";
+    }
+    else
+    {
+        std::vector<LOCATION_RULE_INFO> tempInfo;
+        LOG(INFO)<<Name()<<" ExcuteSelfDriving QueryLocationRuleInfo start.";
+        tempInfo = DecisionDatabase::QueryLocationRuleInfo(iLocalNowNumber, iPredictPoints);
+        ptsx.clear();
+        ptsy.clear();
+        for (int i= 0; i< iPredictPoints; i++)
+        {
+           ptsx.push_back( tempInfo[i].LocationLon);
+           ptsy.push_back( tempInfo[i].LocationLat);
+        }
+        mpc.ref_speed = tempInfo[1].LocationSpeed;
+        LOG(INFO)<<Name()<<" ExcuteSelfDriving plan route  altered.";
+    }
+
+    double px = vPx[iLocalNowNumber];
+    double py = vPy[iLocalNowNumber];
+    double psi = deg2rad(40.45 + 90);
+    double v =  (double)fCarNowSpeed;
+    LOG(INFO)<<Name()<< " MPC start";
+    MPC_Controller(ptsx, ptsy, px, py, psi, v);
+    LOG(INFO)<<Name()<< " MPC end";
+    //UpdataCarRuleResults();
+    iLocalNowNumber ++;
+}
+
 // 自动驾驶停止
 bool  Decision::CarAutoDriveStop()
 {
     try{
-        if (ilocalTotalNumbers = iLocalNowNumber){
+
+        if (ilocalTotalNumbers == iLocalNowNumber){
             uiCarMode = CMD_AUTODRIE_END;
             double breakCtr = -5; // 踩刹车到50%
             ros::Rate loop_rate(1);
@@ -336,7 +438,7 @@ bool  Decision::CarAutoDriveStop()
 bool Decision::UpdataCarRuleResults()
 {
     try{
-        if (iLocalNowNumber >0 && (iLocalNowNumber % iPredictionPointsPerNumber == 0)){
+        if (iLocalNowNumber >0 && ((iLocalNowNumber % iPredictionPointsPerNumber) == 0)){
             decision::rulesMsg ruleMsg;
             if (std::abs(fCarNowSpeed - mpc.ref_speed) < 1) //低速( <10km/h):± 0.25km/h  高速( >10km/h):± 1km/h
             {
@@ -369,6 +471,9 @@ void Decision::MPC_Controller(std::vector<double> &ptsx, std::vector<double> &pt
      Eigen::MatrixXd waypoints = transformGlobal2Vehicle(px, py, psi, ptsx, ptsy);
      Eigen::VectorXd Ptsx = waypoints.row(0);
      Eigen::VectorXd Ptsy = waypoints.row(1);
+     for (unsigned i=0; i < ptsx.size(); ++i) {
+         LOG(INFO)<<Name()<< " lon: "<< Ptsx(i)<< " lat: "<<Ptsy(i);
+     }
      // 获取状态值
      auto coeffs = polyfit(Ptsx, Ptsy, 3);
      double cte = evaluateCte(coeffs);
@@ -378,20 +483,33 @@ void Decision::MPC_Controller(std::vector<double> &ptsx, std::vector<double> &pt
      // 计算方向和油门,范围都在[-1, 1]之间
      // 这个地方有延迟,取第三个
      vector<vector<double>> result = mpc.Solve(state, coeffs);
+     // 展示MPC预测的路径
+     vector<double> mpc_x_vals=result[0];
+     vector<double> mpc_y_vals=result[1];
+     std::vector<double>::iterator iter_start = mpc_x_vals.begin();
+     std::vector<double>::iterator iter_end = mpc_x_vals.end();
+     std::vector<double>::iterator iter;
+     int i = 0;
+     for ( iter = iter_start; iter != iter_end; iter++)
+     {
+       LOG(INFO)<<Name()<<" MPC_Controller prediction LocationLon = "<<std::setprecision(16)<<mpc_x_vals[i]
+             <<" LocationLat = "<< std::setprecision(16)<<mpc_y_vals[i];
+       i++;
+     }
      double steer_value = result[2][mpc.latency];
      double throttle_value = result[3][mpc.latency];
      mpc.delta_prev = steer_value;
      mpc.a_prev = throttle_value;
-     LOG(INFO)<<Name()<< "stree alter value:"<<steer_value<<"throttle alter value:"<<throttle_value;
-     SpeedControl(steer_value);
-     StreeControl(throttle_value);
-     decision::controlMsg control;
-     control.nowSpeed = fCarNowSpeed;
-     control.refSpeed = mpc.ref_speed;
-     control.steer =  mpc.delta_prev;
-     control.throttle = mpc.a_prev;
-     control.cte = cte;
-     Control_pub.publish(control);
+     LOG(INFO)<<Name()<< " stree alter value:"<<steer_value<<" throttle alter value:"<<throttle_value;
+//     SpeedControl(steer_value);
+//     StreeControl(throttle_value);
+//     decision::controlMsg control;
+//     control.nowSpeed = fCarNowSpeed;
+//     control.refSpeed = mpc.ref_speed;
+//     control.steer =  mpc.delta_prev;
+//     control.throttle = mpc.a_prev;
+//     control.cte = cte;
+//     Control_pub.publish(control);
 }
 
 unsigned int Decision::SpeedControl(double &speed)
@@ -412,11 +530,11 @@ unsigned int Decision::SpeedControl(double &speed)
      srv.request.uiBrkFocCtrReq = 350;
      if (clientPedalActCtrReq.call(srv))
      {
-         LOG(INFO)<<Name()<<"Speed Control service return success, value = "<<srv.response.uiReturn;
+         LOG(INFO)<<Name()<<" Speed Control service return success, value = "<<srv.response.uiReturn;
      }
      else
      {
-         LOG(ERROR)<<Name()<<"Speed Control service return falil";
+         LOG(ERROR)<<Name()<<" Speed Control service return falil";
      }
     return srv.response.uiReturn;
 }
@@ -432,11 +550,11 @@ unsigned int Decision::StreeControl(double &streer)
      srv.request.iStrTrqCtrReq = 50;
      if (clientStrActCtrReq.call(srv))
      {
-         LOG(INFO)<<Name()<<"stree Control service return success, value = "<<srv.response.uiReturn;
+         LOG(INFO)<<Name()<<" stree Control service return success, value = "<<srv.response.uiReturn;
      }
      else
      {
-         LOG(ERROR)<<Name()<<"stree Control service return falil";
+         LOG(ERROR)<<Name()<<" stree Control service return falil";
      }
      return srv.response.uiReturn;
 }
@@ -451,11 +569,11 @@ unsigned int Decision::BreakCtrControl(unsigned int breakmode)
      srv.request.iClchSpdCtrReq = 0;
      if (clientSftActCtrReq.call(srv))
      {
-         LOG(INFO)<<Name()<<"break Control service return success, value = "<<srv.response.uiReturn;
+         LOG(INFO)<<Name()<<" break Control service return success, value = "<<srv.response.uiReturn;
      }
      else
      {
-         LOG(ERROR)<<Name()<<"break Control service return falil";
+         LOG(ERROR)<<Name()<<" break Control service return falil";
      }
      return srv.response.uiReturn;
 }
@@ -488,7 +606,7 @@ unsigned int Decision::BreakCtrControl(unsigned int breakmode)
    return -atan(coeffs[1]);
  }
 
- // 把全局坐标转换为汽车坐标,以当前汽车的位置作为
+ // 把全局坐标转换为汽车坐标,以当前汽车的位置作为
  Eigen::MatrixXd Decision::transformGlobal2Vehicle(double x, double y, double psi,
         const vector<double> & ptsx, const vector<double> & ptsy) {
     assert(ptsx.size() == ptsy.size());

+ 12 - 2
src/decision/decision.h

@@ -20,8 +20,10 @@
 #include <perception/si2Msg.h>
 #include <vector>
 #include <math.h>
-#include <eigen3/Eigen/Core>
-#include <eigen3/Eigen/QR>
+//#include <eigen3/Eigen/Core>
+//#include <eigen3/Eigen/QR>
+#include "../common/Eigen-3.3/Eigen/Core"
+#include "../common/Eigen-3.3/Eigen/QR"
 
 namespace robot {
 namespace decisionSpace {
@@ -113,6 +115,8 @@ private:
     */
     void ExcuteSelfDriving(const localization::localMsg::ConstPtr& msg);
 
+
+    void TestMPC();
     //速度控制
     unsigned int SpeedControl(double &speed);
     //方向控制
@@ -196,6 +200,12 @@ private:
 
     ros::ServiceClient clientSftActCtrReq;
 
+    std::vector<double> ptsy;
+    std::vector<double> ptsx;
+
+    std::vector<double> vPx;
+    std::vector<double> vPy;
+
 };
 
 

+ 25 - 25
src/decision/decisiondatabase.cpp

@@ -49,30 +49,30 @@ int DecisionDatabase::InitDB(){
     /****************检查,初始化表 action_directive end **********************/
 
     /******************检查,初始化表 location_map start **********************/
-    haveTable = robot::common::Sqlite3helper::Instance().isTableExits(sqlite,"location_map");
-    if(haveTable ==-1){
-        LOG(INFO)<<Name()<<":Decision exits table -> location_map fail";
-        return 0;
-    }else if(haveTable == 0){
-        int createResult = robot::common::Sqlite3helper::Instance().createTable(sqlite,
-                                       "CREATE TABLE location_map (             \
-                                       location_lon_1 FLOAT (53)    NOT NULL,   \
-                                       location_lat_1 FLOAT (53)    NOT NULL,   \
-                                       location_lon_2 FLOAT (53)    NOT NULL,   \
-                                       location_lat_2 FLOAT (53)    NOT NULL,   \
-                                       location_X_1   FLOAT (53)    NOT NULL,   \
-                                       location_Y_1   FLOAT (53)    NOT NULL,   \
-                                       map_id         VARCHAR (100) PRIMARY KEY \
-                                                                    NOT NULL,   \
-                                       location_X_2   FLOAT (53)    NOT NULL,   \
-                                       location_Y_2   FLOAT (53)    NOT NULL    \
-                                       );"
-        );
-        if(createResult == 0){
-            LOG(INFO)<<Name()<<":Decision create table -> location_map fail";
-            return 0;
-        }
-    }
+//    haveTable = robot::common::Sqlite3helper::Instance().isTableExits(sqlite,"location_map");
+//    if(haveTable ==-1){
+//        LOG(INFO)<<Name()<<":Decision exits table -> location_map fail";
+//        return 0;
+//    }else if(haveTable == 0){
+//        int createResult = robot::common::Sqlite3helper::Instance().createTable(sqlite,
+//                                       "CREATE TABLE location_map (             \
+//                                       location_lon_1 FLOAT (53)    NOT NULL,   \
+//                                       location_lat_1 FLOAT (53)    NOT NULL,   \
+//                                       location_lon_2 FLOAT (53)    NOT NULL,   \
+//                                       location_lat_2 FLOAT (53)    NOT NULL,   \
+//                                       location_X_1   FLOAT (53)    NOT NULL,   \
+//                                       location_Y_1   FLOAT (53)    NOT NULL,   \
+//                                       map_id         VARCHAR (100) PRIMARY KEY \
+//                                                                    NOT NULL,   \
+//                                       location_X_2   FLOAT (53)    NOT NULL,   \
+//                                       location_Y_2   FLOAT (53)    NOT NULL    \
+//                                       );"
+//        );
+//        if(createResult == 0){
+//            LOG(INFO)<<Name()<<":Decision create table -> location_map fail";
+//            return 0;
+//        }
+//    }
     /******************检查,初始化表 location_map end ************************/
 
     /**************检查,初始化表 location_rule_info start ********************/
@@ -339,7 +339,7 @@ int DecisionDatabase::DeleteActionDirective(const char *ruleName){
 
     std::string sRuleName= ruleName;
     std::string s_sql="DELETE FROM action_directive WHERE rule_name=\'" + sRuleName+"\'";
-    LOG(INFO)<<s_sql;
+    //LOG(INFO)<<s_sql;
     const char* sql=s_sql.c_str();
     int deleteResult = robot::common::Sqlite3helper::Instance().update(sqlite,sql);
     robot::common::Sqlite3helper::Instance().close(sqlite);

+ 4 - 5
src/launch/robot.launch

@@ -7,12 +7,11 @@ respawn="true"当roslaunch启动完所有该启动的节点之后,会监测每
 required="true"当被此属性标记的节点终止时,roslaunch会将其他的节点一并终止。注意此属性不可以与respawn="true"一起描述同一个节点
 launch-prefix = "command-prefix"我的理解是,相当于在执行启动命令时加上一段命令前缀
 ns = "NAME_SPACE" 这个属性可以让你在自定义的命名空间里运行节点-->
-
-<node pkg="decision" name="decision" type="decision" output="screen" required="true"/>
-<node pkg="perception" name="perception" type="perception" output="screen" respawn="true"/>
-<node pkg="localization" name="localization" type="localization" output="screen" respawn="true"/>
-<node pkg="canbus" name="canbus" type="canbus" output="screen" respawn="true"/>
 <include file="$(find rosbridge_server)/launch/rosbridge_websocket.launch" >
     <arg name="port" value="9090"/>
  </include>
+<node pkg="decision" name="decision" type="decision" output="screen" required="true"/>
+<!--<node pkg="perception" name="perception" type="perception" output="screen" respawn="true"/>-->
+<node pkg="localization" name="localization" type="localization" output="screen" respawn="true"/>
+<node pkg="canbus" name="canbus" type="canbus" output="screen" respawn="true"/>
 </launch>

+ 8 - 6
src/localization/localization.cpp

@@ -102,7 +102,7 @@ void Localization::Stop() {
 
 int Localization::Analyse(const std::string &strSerialResult,  NMEA0183 &nmea){
 
-    LOG(INFO)<<Name()<<" Analyse start.";
+    //LOG(INFO)<<Name()<<" Analyse start.";
     try
     {
         std::string delim("\r\n");
@@ -122,8 +122,8 @@ int Localization::Analyse(const std::string &strSerialResult,  NMEA0183 &nmea){
                 if (ParaGPRMC(*iter, temGPRMC) != ROBOT_SUCCESS)
                      return ROBOT_FAILTURE;
                 nmea.gprmc = temGPRMC;
-                nmea.gprmc.print();
-                LOG(INFO)<<Name()<<"para GPRMC end.";
+                //nmea.gprmc.print();
+                //LOG(INFO)<<Name()<<"para GPRMC end.";
             }
 
             else if (type.compare("GPGGA") == 0)
@@ -132,8 +132,8 @@ int Localization::Analyse(const std::string &strSerialResult,  NMEA0183 &nmea){
                 if (ParaGPGGA(*iter, tempGPGGA) != ROBOT_SUCCESS)
                      return ROBOT_FAILTURE;
                 nmea.gpgga = tempGPGGA;
-                nmea.gpgga.print();
-                LOG(INFO)<<Name()<<" para GPGGA end.";
+                //nmea.gpgga.print();
+                //LOG(INFO)<<Name()<<" para GPGGA end.";
             }
         }
 
@@ -143,7 +143,7 @@ int Localization::Analyse(const std::string &strSerialResult,  NMEA0183 &nmea){
         LOG(ERROR)<<Name()<< " Analyse  error" << ex.what();
         return ROBOT_FAILTURE;
     }
-    LOG(INFO)<<Name()<<" Analyse end.";
+    //LOG(INFO)<<Name()<<" Analyse end.";
     return ROBOT_SUCCESS;
 
 }
@@ -241,5 +241,7 @@ std::vector<std::string> Localization::Split(const std::string& in, const std::s
     };
 }
 
+
+
 }  // namespace localizationspace
 }  // namespace robot