|
@@ -62,10 +62,22 @@ typedef struct
|
|
|
int id;
|
|
|
} Car;
|
|
|
|
|
|
+typedef struct
|
|
|
+{
|
|
|
+ double mrel_x;
|
|
|
+ double mrel_y;
|
|
|
+ viewer::EntityModel * model;
|
|
|
+} RadarObj;
|
|
|
+
|
|
|
std::vector<Car*> cars;
|
|
|
|
|
|
+std::vector<RadarObj *> gradarobj;
|
|
|
+const int NRADARMX = 100;
|
|
|
+
|
|
|
Car * gADCIV_car;
|
|
|
|
|
|
+viewer::EntityModel * gtestRadar;
|
|
|
+
|
|
|
// Car models used for populating the road network
|
|
|
// path should be relative the OpenDRIVE file
|
|
|
static const char* carModelsFiles_[] =
|
|
@@ -85,6 +97,7 @@ std::vector<osg::ref_ptr<osg::LOD>> carModels_;
|
|
|
|
|
|
#include "modulecomm.h"
|
|
|
#include "gpsimu.pb.h"
|
|
|
+#include "radarobjectarray.pb.h"
|
|
|
#include "gnss_coordinate_convert.h"
|
|
|
|
|
|
double glat0 = 39.1201777;
|
|
@@ -140,6 +153,42 @@ void Listengpsimu(const char * strdata,const unsigned int nSize,const unsigned i
|
|
|
gvehicle_hdg = hdg;
|
|
|
}
|
|
|
|
|
|
+void ListenRADAR(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
|
|
|
+{
|
|
|
+
|
|
|
+ static qint64 oldrecvtime;
|
|
|
+ iv::radar::radarobjectarray xradararray;
|
|
|
+ if(!xradararray.ParseFromArray(strdata,nSize))
|
|
|
+ {
|
|
|
+ std::cout<<"ListenRadar Parse Error."<<std::endl;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ int i;
|
|
|
+ for(i=0;i<xradararray.obj_size();i++)
|
|
|
+ {
|
|
|
+ iv::radar::radarobject * pobj = xradararray.mutable_obj(i);
|
|
|
+ if(i<gradarobj.size())
|
|
|
+ {
|
|
|
+ if(pobj->bvalid())
|
|
|
+ {
|
|
|
+ gradarobj.at(i)->mrel_x = pobj->x();
|
|
|
+ gradarobj.at(i)->mrel_y = pobj->y();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ gradarobj.at(i)->mrel_x = 10000;
|
|
|
+ gradarobj.at(i)->mrel_y = 10000;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for(i=xradararray.obj_size();i<gradarobj.size();i++)
|
|
|
+ {
|
|
|
+ gradarobj.at(i)->mrel_x = 10000;
|
|
|
+ gradarobj.at(i)->mrel_y = 10000;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
void log_callback(const char *str)
|
|
|
{
|
|
@@ -230,6 +279,20 @@ int SetupADCIVCar( viewer::Viewer *viewer)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+int SetupRadar(viewer::Viewer *viewer)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+ for(i=0;i<NRADARMX;i++)
|
|
|
+ {
|
|
|
+ RadarObj * pRadar = new RadarObj;
|
|
|
+ pRadar->mrel_x = 10000;
|
|
|
+ pRadar->mrel_y = 10000;
|
|
|
+ pRadar->model = viewer->AddRadarModel(osg::Vec3(0.5, 0.5, 0.5),"");
|
|
|
+ gradarobj.push_back(pRadar);
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
int SetupCars(roadmanager::OpenDrive *odrManager, viewer::Viewer *viewer)
|
|
|
{
|
|
|
if (density < 1E-10)
|
|
@@ -365,6 +428,26 @@ void updateADCIVCar(Car * car)
|
|
|
head, osg::Vec3(0, 0, 1));
|
|
|
|
|
|
car->model->txNode_->setAttitude(car->model->quat_);
|
|
|
+
|
|
|
+ int k;
|
|
|
+ // head = head +M_PI/2.0;
|
|
|
+ for(k=0;k<gradarobj.size();k++)
|
|
|
+ {
|
|
|
+ double relx,rely;
|
|
|
+ relx = gradarobj.at(k)->mrel_y*cos(head) + gradarobj.at(k)->mrel_x * sin(head);
|
|
|
+ rely = gradarobj.at(k)->mrel_y*sin(head) - gradarobj.at(k)->mrel_x*cos(head);
|
|
|
+
|
|
|
+ gradarobj.at(k)->model->txNode_->setPosition(osg::Vec3(x+relx, y+rely, z));
|
|
|
+
|
|
|
+ gradarobj.at(k)->model->quat_.makeRotate(
|
|
|
+ roll, osg::Vec3(1, 0, 0),
|
|
|
+ pitch, osg::Vec3(0, 1, 0),
|
|
|
+ head, osg::Vec3(0, 0, 1));
|
|
|
+
|
|
|
+ gradarobj.at(k)->model->txNode_->setAttitude(car->model->quat_);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -414,6 +497,7 @@ int main(int argc, char** argv)
|
|
|
|
|
|
|
|
|
void * pa = iv::modulecomm::RegisterRecv("hcp2_gpsimu",Listengpsimu);
|
|
|
+ pa = iv::modulecomm::RegisterRecv("radar",ListenRADAR);
|
|
|
(void)pa;
|
|
|
|
|
|
// Use logger callback
|
|
@@ -547,6 +631,10 @@ int main(int argc, char** argv)
|
|
|
viewer->GetNodeMaskBit(viewer::NodeMask::NODE_MASK_OSI_POINTS) ? "on" : "off");
|
|
|
|
|
|
SetupADCIVCar(viewer);
|
|
|
+ SetupRadar(viewer);
|
|
|
+// gtestRadar = viewer->AddRadarModel(osg::Vec3(0.5, 0.5, 0.5),"");
|
|
|
+// gtestRadar = viewer->AddEntityModel(carModelsFiles_[0], osg::Vec3(0.5, 0.5, 0.5),
|
|
|
+// viewer::EntityModel::EntityType::ENTITY_TYPE_VEHICLE, false, "", 0);
|
|
|
// if (SetupCars(odrManager, viewer) == -1)
|
|
|
// {
|
|
|
// return 4;
|