ソースを参照

fix(driver_KS136A):fis sensor error detection,add some comment

sunjiacheng 3 年 前
コミット
bf41fd8033

+ 13 - 1
src/driver/driver_ultrasonic_dauxi_KS136A/canrecv_consumer.cpp

@@ -5,6 +5,8 @@
 extern setupConfig_t setupConfig;
 extern setupConfig_t setupConfig;
 extern iv::msgunit shmSonar;
 extern iv::msgunit shmSonar;
 
 
+//#define RESULT_OUTPUT_ENABLE
+
 CANRecv_Consumer::CANRecv_Consumer(CAN_Producer_Consumer *pBuf)
 CANRecv_Consumer::CANRecv_Consumer(CAN_Producer_Consumer *pBuf)
 {
 {
     pBuffer = pBuf;
     pBuffer = pBuf;
@@ -105,7 +107,7 @@ void CANRecv_Consumer::run()
                 {
                 {
                     this->Trans_From_CANRaw(tempCANRaw);
                     this->Trans_From_CANRaw(tempCANRaw);
                     tempDist = (CAN_data[0] << 8) | CAN_data[1];
                     tempDist = (CAN_data[0] << 8) | CAN_data[1];
-                    if(tempDist <= 5800 && tempDist >= 135)
+                    if(tempDist <= setupConfig.sonarRange_Max && tempDist >= setupConfig.sonarRange_Min)
                     {
                     {
                         decodeEnableFlag = false;
                         decodeEnableFlag = false;
                         objDist[decodeSensorID] = tempDist;
                         objDist[decodeSensorID] = tempDist;
@@ -159,17 +161,21 @@ void CANRecv_Consumer::Enable_DecodeResult_Slot(bool enableFlag,uint8_t sensorID
 {
 {
     decodeEnableFlag = enableFlag;
     decodeEnableFlag = enableFlag;
     decodeSensorID = sensorID;
     decodeSensorID = sensorID;
+#ifdef RESULT_OUTPUT_ENABLE
     if(decodeSensorID == 0)
     if(decodeSensorID == 0)
         gLastTime = QDateTime::currentMSecsSinceEpoch();
         gLastTime = QDateTime::currentMSecsSinceEpoch();
+#endif
     decodeTimer.restart();
     decodeTimer.restart();
 }
 }
 
 
 void CANRecv_Consumer::UltrasonicData_Ready_Slot(void)
 void CANRecv_Consumer::UltrasonicData_Ready_Slot(void)
 {
 {
     iv::ultrasonic::ultrasonic xmsg;
     iv::ultrasonic::ultrasonic xmsg;
+#ifdef RESULT_OUTPUT_ENABLE
     uint64_t tempLastTime = QDateTime::currentMSecsSinceEpoch();
     uint64_t tempLastTime = QDateTime::currentMSecsSinceEpoch();
     std::cout<<"interval time is "<<tempLastTime - gLastTime<<std::endl;
     std::cout<<"interval time is "<<tempLastTime - gLastTime<<std::endl;
     gLastTime = tempLastTime;
     gLastTime = tempLastTime;
+#endif
     sonarSend_Lock.lock();
     sonarSend_Lock.lock();
     xmsg.set_sigobjdist_flside(objDist_Send[0]);
     xmsg.set_sigobjdist_flside(objDist_Send[0]);
     xmsg.set_sigobjdist_flcorner(objDist_Send[1]);
     xmsg.set_sigobjdist_flcorner(objDist_Send[1]);
@@ -196,6 +202,12 @@ void CANRecv_Consumer::UltrasonicData_Ready_Slot(void)
     xmsg.set_sigsensor_rear_lm(sensorStatus_Send[9]);
     xmsg.set_sigsensor_rear_lm(sensorStatus_Send[9]);
     xmsg.set_sigsensor_rear_l(sensorStatus_Send[10]);
     xmsg.set_sigsensor_rear_l(sensorStatus_Send[10]);
     xmsg.set_sigsensor_rear_ls(sensorStatus_Send[11]);
     xmsg.set_sigsensor_rear_ls(sensorStatus_Send[11]);
+#ifdef RESULT_OUTPUT_ENABLE
+    for(int i=0;i<12;i++)
+    {
+        std::cout<<"sonsor: "<<i+1<<" status: "<<sensorStatus_Send[i]<<" Dist: "<<objDist_Send[i]<<std::endl;
+    }
+#endif
     sonarSend_Lock.unlock();
     sonarSend_Lock.unlock();
 
 
     xmsg.set_timestamp(QDateTime::currentMSecsSinceEpoch());
     xmsg.set_timestamp(QDateTime::currentMSecsSinceEpoch());

+ 2 - 0
src/driver/driver_ultrasonic_dauxi_KS136A/decode_cfg.cpp

@@ -8,6 +8,8 @@ int DecodeSonarCfgFromXML(setupConfig_t &setupConfig , const std::string &xmlFil
     setupConfig.strMemCANSend = xp.GetParam("cansend_shm","cansend0");
     setupConfig.strMemCANSend = xp.GetParam("cansend_shm","cansend0");
     setupConfig.strMemSonar = xp.GetParam("sonar_shm","sonar");
     setupConfig.strMemSonar = xp.GetParam("sonar_shm","sonar");
     setupConfig.sonarCAN_ID = std::strtoul(xp.GetParam("sonarCAN_ID","0x101").c_str(),0,0);
     setupConfig.sonarCAN_ID = std::strtoul(xp.GetParam("sonarCAN_ID","0x101").c_str(),0,0);
+    setupConfig.sonarRange_Max = xp.GetParam("sonarRange_Max",5697);
+    setupConfig.sonarRange_Min = xp.GetParam("sonarRange_Min",135);
 
 
 //    std::cout<<"canrecv_shm : "<<setupConfig.strMemCANRecv<<std::endl;
 //    std::cout<<"canrecv_shm : "<<setupConfig.strMemCANRecv<<std::endl;
 //    std::cout<<"cansend_shm : "<<setupConfig.strMemCANSend<<std::endl;
 //    std::cout<<"cansend_shm : "<<setupConfig.strMemCANSend<<std::endl;

+ 2 - 0
src/driver/driver_ultrasonic_dauxi_KS136A/decode_cfg.h

@@ -12,6 +12,8 @@ struct setupConfig_t
     std::string strMemCANSend = "cansend0";
     std::string strMemCANSend = "cansend0";
     std::string strMemSonar = "sonar";
     std::string strMemSonar = "sonar";
     uint32_t sonarCAN_ID = 0x301;
     uint32_t sonarCAN_ID = 0x301;
+    uint32_t sonarRange_Max = 5697;
+    uint32_t sonarRange_Min = 135;
 };
 };
 
 
 int DecodeSonarCfgFromXML(setupConfig_t &setupConfig , const std::string &xmlFilePath);
 int DecodeSonarCfgFromXML(setupConfig_t &setupConfig , const std::string &xmlFilePath);

+ 3 - 1
src/driver/driver_ultrasonic_dauxi_KS136A/driver_ultrasonic_dauxi_KS136A.xml

@@ -3,6 +3,8 @@
 		<param name="canrecv_shm" value="canrecv0" />
 		<param name="canrecv_shm" value="canrecv0" />
 		<param name="cansend_shm" value="cansend0" />
 		<param name="cansend_shm" value="cansend0" />
 		<param name="sonar_shm" value="sonar" />
 		<param name="sonar_shm" value="sonar" />
-		<param name="sonarCAN_ID" value="0x301" /> <!-- recommend use hex format -->
+		<param name="sonarCAN_ID" value="0x101" /> <!-- recommend use hex format -->
+		<param name="sonarRange_Max" value="5697" /> <!-- incorrect setting may generate sensor status error -->
+		<param name="sonarRange_Min" value="135" />
 	</node>
 	</node>
 </xml>
 </xml>

+ 2 - 0
src/driver/driver_ultrasonic_dauxi_KS136A/main.cpp

@@ -23,6 +23,8 @@
 #include "cansend_consumer.h"
 #include "cansend_consumer.h"
 #include "cansend_producer.h"
 #include "cansend_producer.h"
 
 
+// notice: this programe can not detect sensor line breakdown
+
 QCoreApplication * gApp;
 QCoreApplication * gApp;
 
 
 iv::Ivfault *gfault = nullptr;
 iv::Ivfault *gfault = nullptr;