Browse Source

Modify mobileye parse issue

fujiankuan 3 years ago
parent
commit
0b61d7d554
1 changed files with 115 additions and 111 deletions
  1. 115 111
      src/detection/detection_mobileye/main.cpp

+ 115 - 111
src/detection/detection_mobileye/main.cpp

@@ -2,7 +2,7 @@
 
 #include <iostream>
 #include <QDateTime>
-
+#include <QDebug>
 #include "modulecomm.h"
 #include "xmlparam.h"
 #include "ivversion.h"
@@ -74,11 +74,11 @@ void ProcCANMsg(iv::can::canraw xmsg)
         double curv, head, yaw, pitch;
         int ldw_left, ldw_right;
         short ihead;
-        for(int i = 0; i< 8; i++)
-        {
+//        for(int i = 0; i< 8; i++)
+//        {
 
-            gMobEyeIvlog->verbose("mobileye","i:%d %x %d\n ",i, xdata[i], xdata[i]);
-        }
+//            gMobEyeIvlog->verbose("mobileye","i:%d %x %d\n ",i, xdata[i], xdata[i]);
+//        }
         tmp = 0;
         //lane curv
         tmp = (xdata[1] << 8) | xdata[0];
@@ -199,47 +199,51 @@ void ProcCANMsg(iv::can::canraw xmsg)
      *  is_obstacle_brake_lights bool                  /             0,1            0 object's brake light off or not identified, 1 object's brake light on
      *  obstacle_valid           int/enum              /            [1:2]           1 new valid(detected this frame), 2 older valid
      *************************************************************************************************************************************************************/
-    else if((xmsg.id()-0x739)/3 == 0)
+    else if(xmsg.id() > 0x738 && xmsg.id() < 0x766)
     {
-        //obstacle id
-        gobs.set_id(xdata[0]);
+        if((xmsg.id()-0x739)%3 == 0)
+        {
+            //obstacle id
+            gobs.set_id(xdata[0]);
 
-        //obstacle pos x
-        tmp = ((xdata[2] & 0xf) << 8) | xdata[1];
-        gobs.set_pos_x(tmp * 0.0625);
-        tmp = 0;
+            //obstacle pos x
+            tmp = ((xdata[2] & 0xf) << 8) | xdata[1];
+            gobs.set_pos_x(tmp * 0.0625);
+            tmp = 0;
 
-        //obstacle pos y
-        tmp = ((xdata[4] & 0x3) << 8) | xdata[3];
-        tmp <<= 22;
-        tmp >>= 22;
-        gobs.set_pos_y(tmp * 0.0625);
+            //obstacle pos y
+            tmp = ((xdata[4] & 0x3) << 8) | xdata[3];
+            tmp <<= 22;
+            tmp >>= 22;
+            gobs.set_pos_y(tmp * 0.0625);
 
-        //blinker info
-        gobs.set_blinkerinfo((xdata[4] >> 2) & 0x7);
+            //blinker info
+            gobs.set_blinkerinfo((xdata[4] >> 2) & 0x7);
 
-        //cut in and out
-        gobs.set_cutstate(iv::mobileye::obs_CUTSTATE(xdata[4] >> 5));
+            //cut in and out
+            gobs.set_cutstate(iv::mobileye::obs_CUTSTATE(xdata[4] >> 5));
+            //        gobs.set_cutstate(xdata[4] >> 5);
 
-        //obstacle rel vel x
-        tmp = ((xdata[6] & 0xf) << 8) | xdata[5];
-        tmp <<= 20;
-        tmp >>= 20;
-        gobs.set_obs_rel_vel_x(tmp * 0.0625);
+            //obstacle rel vel x
+            tmp = ((xdata[6] & 0xf) << 8) | xdata[5];
+            tmp <<= 20;
+            tmp >>= 20;
+            gobs.set_obs_rel_vel_x(tmp * 0.0625);
 
-        //obstacle type
-        gobs.set_obstype(iv::mobileye::obs_OBSTYPE((xdata[6] >> 4) & 0x7));
+            //obstacle type
+            gobs.set_obstype(iv::mobileye::obs_OBSTYPE((xdata[6] >> 4) & 0x7));
 
-        //obstacle status
-        gobs.set_obssatus(iv::mobileye::obs_OBSSTATE(xdata[7] & 0x7));
+            //obstacle status
+            gobs.set_obssatus(iv::mobileye::obs_OBSSTATE(xdata[7] & 0x7));
 
-        //obstacle brake lights
-        gobs.set_obsbrakelights((xdata[7] >> 3) & 0x1);
+            //obstacle brake lights
+            gobs.set_obsbrakelights((xdata[7] >> 3) & 0x1);
 
-        //obstacle valid
-        gobs.set_obsvalid((xdata[7] >> 6) & 0x7);
-    }
-    /****************************************************  mobileye obstacle data b  ****************************************************************************
+            //obstacle valid
+            gobs.set_obsvalid((xdata[7] >> 6) & 0x7);
+
+        }
+        /****************************************************  mobileye obstacle data b  ****************************************************************************
      *  message ID:0x73a
      *  member:                  type           physical unit       range               note
      *  obstacle_length          double                m           [0,31]           length of the obstacle(longitude axis)
@@ -256,50 +260,50 @@ void ProcCANMsg(iv::can::canraw xmsg)
      *                                                                              vision and radar measurements higher->smaller error, 5 high confidence match
      *  matched_radar_id         int                   /           [0:127]          ID of Primary radar target matched to the vision target if applicable
      *************************************************************************************************************************************************************/
-    else if((xmsg.id()-0x73a)/3 == 0)
-    {
-        //obstacle length
-        tmp = xdata[0];
-        gobs.set_obslen(tmp * 0.5);
-        tmp = 0;
+        else if((xmsg.id()-0x73a)%3 == 0)
+        {
+            //obstacle length
+            tmp = xdata[0];
+            gobs.set_obslen(tmp * 0.5);
+            tmp = 0;
 
-        //obstacle width
-        tmp = xdata[1];
-        gobs.set_obswidth(tmp * 0.05);
+            //obstacle width
+            tmp = xdata[1];
+            gobs.set_obswidth(tmp * 0.05);
 
-        tmp = 0;
+            tmp = 0;
 
-        //obstacle age
-        gobs.set_obsage(xdata[2]);
+            //obstacle age
+            gobs.set_obsage(xdata[2]);
 
-        //obstacle lane
-        gobs.set_obslane(xdata[3] & 0x3);
+            //obstacle lane
+            gobs.set_obslane(xdata[3] & 0x3);
 
-        //is cipv flag
-        gobs.set_cipvflag((xdata[3] >> 2) & 0x1);
+            //is cipv flag
+            gobs.set_cipvflag((xdata[3] >> 2) & 0x1);
 
-        //radar pos x
-        tmp = (xdata[4] << 4) | (xdata[3] >> 4);
-        gobs.set_radarposx(tmp * 0.0625);
+            //radar pos x
+            tmp = (xdata[4] << 4) | (xdata[3] >> 4);
+            gobs.set_radarposx(tmp * 0.0625);
 
-        tmp = 0;
+            tmp = 0;
 
-        //radar vel x
-        tmp = ((xdata[6] & 0xf) << 8) | xdata[5];
-        tmp <<= 20;
-        tmp >>= 20;
-        gobs.set_radarvelx(tmp * 0.0625);
+            //radar vel x
+            tmp = ((xdata[6] & 0xf) << 8) | xdata[5];
+            tmp <<= 20;
+            tmp >>= 20;
+            gobs.set_radarvelx(tmp * 0.0625);
 
-        tmp = 0;
+            tmp = 0;
 
-        //radar match confidence
-        gobs.set_radarmatchconfi((xdata[6] >> 4) & 0x7);
+            //radar match confidence
+            gobs.set_radarmatchconfi((xdata[6] >> 4) & 0x7);
 
-        //matched radar ID
-        gobs.set_matchedradarid(xdata[7] & 0x7f);
+            //matched radar ID
+            gobs.set_matchedradarid(xdata[7] & 0x7f);
 
-    }
-    /****************************************************  mobileye obstacle data c  ****************************************************************************
+        }
+        /****************************************************  mobileye obstacle data c  ****************************************************************************
      *  message ID:0x73b
      *  member:                  type           physical unit       range               note
      *  obstacle_angle_rate      double           degree/s     [-327.68, 327.68]    Angle rate of Center of Obstacle, negative->moved to left
@@ -309,48 +313,48 @@ void ProcCANMsg(iv::can::canraw xmsg)
      *  obstacle_angle           double           degree        [-327.68,327.68]    Angle to Center of Obstacle in degrees, 0 indicates that the obstacle is in
      *                                                                              exactly in front of us, a positive angle indicates that theobstacle is to the right
      *************************************************************************************************************************************************************/
-    else if((xmsg.id()-0x73b)/3 == 0)
-    {
-        //obstacle angle rate
-        tmp = (xdata[1] << 8) | xdata[0];
-        tmp <<= 16;
-        tmp >>= 16;
-        gobs.set_obsangrate(tmp * 0.01);
-
-        tmp = 0;
-
-        //obstacle scale change
-        tmp = (xdata[3] << 8) | xdata[2];
-        tmp <<= 16;
-        tmp >>= 16;
-        gobs.set_obsscalechange(tmp * 0.0002);
-
-        tmp = 0;
-
-        //object accel x
-        tmp = ((xdata[5] & 0x3) << 8) | xdata[4];
-        tmp <<= 22;
-        tmp >>= 22;
-        gobs.set_accelx(tmp * 0.03);
-
-        tmp = 0;
-
-        //obstacle replaced
-        gobs.set_obsreplaced((xdata[5] >> 4) & 0x1);
-
-        //obstacle angle
-        tmp = (xdata[7] << 8) | xdata[6];
-        tmp <<= 16;
-        tmp >>= 16;
-        gobs.set_obsang(tmp * 0.01);
-
-        iv::mobileye::obs * pxobs = gmobileye.add_xobj();
-        pxobs->CopyFrom(gobs);
-        gobs_count++;
-        gMobEyeIvlog->verbose("mobileyeobs", "nums:%d cur_count:%d, obs_id:%d, pos_x:%f, pos_y:%f \n",\
-                              gnum_obstacles, gobs_count, gobs.id(), gobs.pos_x(), gobs.pos_y());
+        else if((xmsg.id()-0x73b)%3 == 0)
+        {
+            //obstacle angle rate
+            tmp = (xdata[1] << 8) | xdata[0];
+            tmp <<= 16;
+            tmp >>= 16;
+            gobs.set_obsangrate(tmp * 0.01);
+
+            tmp = 0;
+
+            //obstacle scale change
+            tmp = (xdata[3] << 8) | xdata[2];
+            tmp <<= 16;
+            tmp >>= 16;
+            gobs.set_obsscalechange(tmp * 0.0002);
+
+            tmp = 0;
+
+            //object accel x
+            tmp = ((xdata[5] & 0x3) << 8) | xdata[4];
+            tmp <<= 22;
+            tmp >>= 22;
+            gobs.set_accelx(tmp * 0.03);
+
+            tmp = 0;
+
+            //obstacle replaced
+            gobs.set_obsreplaced((xdata[5] >> 4) & 0x1);
+
+            //obstacle angle
+            tmp = (xdata[7] << 8) | xdata[6];
+            tmp <<= 16;
+            tmp >>= 16;
+            gobs.set_obsang(tmp * 0.01);
+
+            iv::mobileye::obs * pxobs = gmobileye.add_xobj();
+            pxobs->CopyFrom(gobs);
+            gobs_count++;
+            gMobEyeIvlog->verbose("mobileyeobs", "nums:%d cur_count:%d, obs_id:%d, pos_x:%f, pos_y:%f \n",\
+                                  gnum_obstacles, gobs_count, gobs.id(), gobs.pos_x(), gobs.pos_y());
+        }
     }
-
     /****************************************************  mobileye aftermarket lane  ****************************************************************************
      *  message ID:0x669
      *  member:                  type           physical unit       range               note
@@ -495,8 +499,8 @@ int main(int argc, char *argv[])
 
     iv::xmlparam::Xmlparam xp(strpath.toStdString());
 
-    std::string strmemcan = xp.GetParam("canrecv","canrecv0");
-    std::string strmemsend = xp.GetParam("cansend","cansend0");
+    std::string strmemcan = xp.GetParam("canrecv","canrecv1");
+    std::string strmemsend = xp.GetParam("cansend","cansend1");
     std::string strmemmobileye = xp.GetParam("mobileye","mobileye");
 
     gTime.start();