|
@@ -35,7 +35,7 @@ iv::decition::BrainDecition * gbrain;
|
|
|
gbrain->UpdateSate();
|
|
|
}
|
|
|
|
|
|
- void ListenHMI(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
|
|
|
+ void ListenHMI(const char * strdata,const unsigned int nSize ,const unsigned int index,const QDateTime * dt,const char * strmemname)
|
|
|
{
|
|
|
gbrain->UpdateHMI(strdata,nSize);
|
|
|
}
|
|
@@ -50,6 +50,11 @@ iv::decition::BrainDecition * gbrain;
|
|
|
gbrain->UpdateGroupInfo(strdata,nSize);
|
|
|
}
|
|
|
|
|
|
+ void ListenFusion(const char *strdata, const unsigned int nSize, const unsigned int index, const QDateTime *dt, const char *strmemname)
|
|
|
+ {
|
|
|
+ gbrain->GetFusion(strdata,nSize);
|
|
|
+ }
|
|
|
+
|
|
|
/* void ListenMap_change_req(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
|
|
|
{
|
|
|
iv::formation_map_index::map map;
|
|
@@ -105,6 +110,8 @@ iv::decition::BrainDecition::BrainDecition()
|
|
|
|
|
|
mpaVechicleState = iv::modulecomm::RegisterSend(gstrmembrainstate.data(),10000,10);
|
|
|
|
|
|
+ mpfusion = iv::modulecomm::RegisterRecv("li_ra_fusion",ListenFusion);
|
|
|
+
|
|
|
|
|
|
mpaToPlatform = iv::modulecomm::RegisterSend("toplatform",10*sizeof(iv::platform::PlatFormMsg),10);
|
|
|
mpaDecition = iv::modulecomm::RegisterSend(gstrmemdecition.data(),10*sizeof(iv::decition::DecitionBasic),1);
|
|
@@ -674,8 +681,15 @@ void iv::decition::BrainDecition::run() {
|
|
|
mfVehSpeedLast=ServiceCarStatus.vehSpeed_st;
|
|
|
}
|
|
|
|
|
|
- iv::LidarGridPtr templidar= obs_lidar_grid_;
|
|
|
+// iv::LidarGridPtr templidar= obs_lidar_grid_;
|
|
|
+
|
|
|
+
|
|
|
+ iv::LidarGridPtr templidar = fusion_ptr_;
|
|
|
+
|
|
|
+
|
|
|
if(templidar == NULL)templidar = old_obs_lidar_grid_;
|
|
|
+
|
|
|
+
|
|
|
// GaussProjCal(gps_data_->gps_lng,gps_data_->gps_lat,&gps_data_->gps_x,&gps_data_->gps_y);
|
|
|
|
|
|
|
|
@@ -710,6 +724,7 @@ void iv::decition::BrainDecition::run() {
|
|
|
|
|
|
mMutexMap.lock();
|
|
|
decition_gps = decitionGps00->getDecideFromGPS(*gps_data_, navigation_data, templidar,*lidar_per,trafficLight); // my dicition=============================
|
|
|
+// free(templidar);
|
|
|
mMutexMap.unlock();
|
|
|
|
|
|
if(mbUseExternMPC)
|
|
@@ -1306,6 +1321,78 @@ void iv::decition::BrainDecition::UpdateChassis(const char *strdata, const unsig
|
|
|
// }
|
|
|
}
|
|
|
|
|
|
+void iv::decition::BrainDecition::GetFusion(const char *pdata, const int ndatasize)
|
|
|
+{
|
|
|
+ std::shared_ptr<iv::fusion::fusionobjectarray> xfusion (new iv::fusion::fusionobjectarray);
|
|
|
+
|
|
|
+ if(ndatasize<1)return;
|
|
|
+ if(false == xfusion->ParseFromArray(pdata,ndatasize))
|
|
|
+ {
|
|
|
+ std::cout<<" Listenesrfront fail."<<std::endl;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ //std::cout<<"srfront byte size: "<<radarobjvec.ByteSize()<<std::endl;
|
|
|
+ }
|
|
|
+
|
|
|
+ iv::decition::BrainDecition::UpdateFusion(xfusion);
|
|
|
+}
|
|
|
+
|
|
|
+void iv::decition::BrainDecition::UpdateFusion(std::shared_ptr<iv::fusion::fusionobjectarray> fusion_obs)
|
|
|
+{
|
|
|
+ mMutex_.lock();
|
|
|
+ fusion_obs.swap(mfusion_obs_);
|
|
|
+
|
|
|
+ fusion_ptr_ = (Obs_grid *)malloc(sizeof(Obs_grid[iv::grx][iv::gry]));
|
|
|
+ memset(fusion_ptr_,0,sizeof(Obs_grid[iv::grx][iv::gry]));
|
|
|
+ for(int i =0; i<iv::grx; i++) //复制到指针数组
|
|
|
+ {
|
|
|
+ for(int j =0; j<iv::gry; j++)
|
|
|
+ {
|
|
|
+ fusion_ptr_[i*(iv::gry)+j].ob = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ for(int i =0; i<mfusion_obs_->obj_size();i++)
|
|
|
+ {
|
|
|
+ iv::fusion::fusionobject xobs = mfusion_obs_->obj(i);
|
|
|
+ for(int j =0; j<xobs.nomal_centroid().size(); j++)
|
|
|
+ {
|
|
|
+ int dx, dy;
|
|
|
+ dx = (xobs.nomal_centroid(j).nomal_x() + gridwide*(double)centerx)/gridwide;
|
|
|
+ dy = (xobs.nomal_centroid(j).nomal_y() + gridwide*(double)centery)/gridwide;
|
|
|
+
|
|
|
+
|
|
|
+ if((dx>=0)&&(dx<iv::grx)&&(dy>=0)&&(dy<iv::gry))
|
|
|
+ {
|
|
|
+ fusion_ptr_[dx*(iv::gry) + dy].id = xobs.id();
|
|
|
+ fusion_ptr_[dx*(iv::gry) + dy].type = xobs.type();
|
|
|
+ fusion_ptr_[dx*(iv::gry) + dy].high = xobs.dimensions().z();
|
|
|
+ fusion_ptr_[dx*(iv::gry) + dy].speed_x = xobs.vel_relative().x();
|
|
|
+ fusion_ptr_[dx*(iv::gry) + dy].speed_y = xobs.vel_relative().y();
|
|
|
+ fusion_ptr_[dx*(iv::gry) + dy].yaw = xobs.yaw();
|
|
|
+ fusion_ptr_[dx*(iv::gry) + dy].pointcount = 5;
|
|
|
+ fusion_ptr_[dx*(iv::gry) + dy].ob = 2;
|
|
|
+
|
|
|
+ if(xobs.centroid().y() < 50 && xobs.centroid().y() >5 )
|
|
|
+ {
|
|
|
+ std::cout<<" x y vy "<<xobs.centroid().x() << " "
|
|
|
+ << xobs.centroid().y()<< " "<<fusion_ptr_[dx*(iv::gry) + dy].speed_y<< " "
|
|
|
+ <<xobs.vel_relative().y()<<std::endl;
|
|
|
+ givlog->debug("brain_decition","SendobsDistance: %f,SendobsSpeed: %f",
|
|
|
+ xobs.centroid().y(),fusion_ptr_[dx*(iv::gry) + dy].speed_y);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ mMutex_.unlock();
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
void iv::decition::BrainDecition::UpdateGroupInfo(const char *pdata, const int ndatasize){
|
|
|
|
|
|
iv::radio::radio_send group_message;
|