|
@@ -26,7 +26,10 @@ vtd_pilot::vtd_pilot(std::string strfromvtd,std::string strtovtd)
|
|
|
|
|
|
mpaegostate = iv::modulecomm::RegisterSend("egostate",10000,1);
|
|
mpaegostate = iv::modulecomm::RegisterSend("egostate",10000,1);
|
|
|
|
|
|
|
|
+ mpafusion = iv::modulecomm::RegisterSend("fusion",10000000,1);
|
|
|
|
+
|
|
mpthread = new std::thread(&vtd_pilot::threadego,this);
|
|
mpthread = new std::thread(&vtd_pilot::threadego,this);
|
|
|
|
+ mpthreadfusion = new std::thread(&vtd_pilot::threadobject,this);
|
|
|
|
|
|
memset( &sOwnObjectState, 0, sizeof( RDB_OBJECT_STATE_t ) );
|
|
memset( &sOwnObjectState, 0, sizeof( RDB_OBJECT_STATE_t ) );
|
|
}
|
|
}
|
|
@@ -58,6 +61,7 @@ void vtd_pilot::ConvertToObjectArray(std::vector<iv::vtd::rdbdata> &xvectorrdbda
|
|
{
|
|
{
|
|
int i;
|
|
int i;
|
|
int j;
|
|
int j;
|
|
|
|
+ std::cout<<" obj size: "<<xvectorrdbdata.size()<<std::endl;
|
|
for(i=0;i<(int)xvectorrdbdata.size();i++)
|
|
for(i=0;i<(int)xvectorrdbdata.size();i++)
|
|
{
|
|
{
|
|
iv::vtd::rdbdata * prdbdata = &xvectorrdbdata[i];
|
|
iv::vtd::rdbdata * prdbdata = &xvectorrdbdata[i];
|
|
@@ -69,54 +73,65 @@ void vtd_pilot::ConvertToObjectArray(std::vector<iv::vtd::rdbdata> &xvectorrdbda
|
|
RDB_OBJECT_STATE_t xobj;
|
|
RDB_OBJECT_STATE_t xobj;
|
|
// std::cout<<" structure RDB_OBJECT_STATE_t size: "<<sizeof(xobj)<<"data size: "<<xrdbitem.mnpkgdatasize<<std::endl;
|
|
// std::cout<<" structure RDB_OBJECT_STATE_t size: "<<sizeof(xobj)<<"data size: "<<xrdbitem.mnpkgdatasize<<std::endl;
|
|
memcpy(&xobj,pitem->pkgdata().data(),sizeof(RDB_OBJECT_STATE_t));
|
|
memcpy(&xobj,pitem->pkgdata().data(),sizeof(RDB_OBJECT_STATE_t));
|
|
- std::cout<<"id:"<<xobj.base.id<<" name:"<<xobj.base.name<< " pos : x "<<xobj.base.pos.x<<" y "<<xobj.base.pos.y<<" z "<<xobj.base.pos.z<<std::endl;
|
|
|
|
- iv::fusion::fusionobject * pobject = NULL;
|
|
|
|
- int k;
|
|
|
|
- for(k=0;k<xfusionarray.obj_size();k++)
|
|
|
|
|
|
+ // std::cout<<"id:"<<xobj.base.id<<" name:"<<xobj.base.name<< " pos : x "<<xobj.base.pos.x<<" y "<<xobj.base.pos.y<<" z "<<xobj.base.pos.z<<std::endl;
|
|
|
|
+ if(xobj.base.id == 1)
|
|
{
|
|
{
|
|
- if(xfusionarray.mutable_obj(k)->id() == xobj.base.id)
|
|
|
|
- {
|
|
|
|
- pobject = xfusionarray.mutable_obj(k);
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ mfX = xobj.base.pos.x;
|
|
|
|
+ mfY = xobj.base.pos.y;
|
|
|
|
+ mfHeading = xobj.base.pos.h;
|
|
}
|
|
}
|
|
- if(pobject == NULL)
|
|
|
|
|
|
+ else
|
|
{
|
|
{
|
|
- pobject = xfusionarray.add_obj();
|
|
|
|
|
|
+ iv::fusion::fusionobject * pobject = NULL;
|
|
|
|
+ int k;
|
|
|
|
+ for(k=0;k<xfusionarray.obj_size();k++)
|
|
|
|
+ {
|
|
|
|
+ if(xfusionarray.mutable_obj(k)->id() == xobj.base.id)
|
|
|
|
+ {
|
|
|
|
+ pobject = xfusionarray.mutable_obj(k);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if(pobject == NULL)
|
|
|
|
+ {
|
|
|
|
+ pobject = xfusionarray.add_obj();
|
|
|
|
+ }
|
|
|
|
+ pobject->set_id(xobj.base.id);
|
|
|
|
+ double x,y;
|
|
|
|
+ x = xobj.base.pos.x - mfX;
|
|
|
|
+ y = xobj.base.pos.y - mfY;
|
|
|
|
+ double relx,rely;
|
|
|
|
+ double beta = mfHeading*(-1.0);
|
|
|
|
+ relx = x*cos(beta) - y*sin(beta);
|
|
|
|
+ rely = x*sin(beta) + y*cos(beta);
|
|
|
|
+ double vx,vy;
|
|
|
|
+ vx = xobj.ext.speed.x;
|
|
|
|
+ vy = xobj.ext.speed.y;
|
|
|
|
+ vx = vx - mfvx;
|
|
|
|
+ vy = vy - mfvy;
|
|
|
|
+ double relvx,relvy;
|
|
|
|
+ relvx = vx*cos(beta) - vy*sin(beta);
|
|
|
|
+ relvy = vx*sin(beta) + vy*sin(beta);
|
|
|
|
+ double fobjheading = xobj.base.pos.h;
|
|
|
|
+ fobjheading = fobjheading - mfHeading;
|
|
|
|
+ pobject->set_lifetime(100);
|
|
|
|
+ pobject->set_prob(1.0);
|
|
|
|
+ pobject->set_sensor_type(1);
|
|
|
|
+ pobject->set_yaw(fobjheading);
|
|
|
|
+ iv::fusion::PointXYZ * ppointxyz = new iv::fusion::PointXYZ;
|
|
|
|
+ ppointxyz->set_x(relx);
|
|
|
|
+ ppointxyz->set_y(rely);
|
|
|
|
+ ppointxyz->set_z(0);
|
|
|
|
+ iv::fusion::Dimension * pdim = new iv::fusion::Dimension;
|
|
|
|
+ pdim->set_x(xobj.base.geo.dimX);
|
|
|
|
+ pdim->set_y(xobj.base.geo.dimY);
|
|
|
|
+ pdim->set_z(xobj.base.geo.dimZ);
|
|
|
|
+ pobject->set_allocated_centroid(ppointxyz);
|
|
|
|
+ pobject->set_allocated_dimensions(pdim);
|
|
|
|
+ pobject->set_velocity_linear_x(sqrt(pow(relvx,2)+pow(relvy,2)));
|
|
|
|
+
|
|
|
|
+ std::cout<<" x: "<<relx<<" y: "<<rely<<std::endl;
|
|
}
|
|
}
|
|
- pobject->set_id(xobj.base.id);
|
|
|
|
- double x,y;
|
|
|
|
- x = xobj.base.pos.x - mfX;
|
|
|
|
- y = xobj.base.pos.y - mfY;
|
|
|
|
- double relx,rely;
|
|
|
|
- double beta = mfHeading*(-1.0);
|
|
|
|
- relx = x*cos(beta) - y*sin(beta);
|
|
|
|
- rely = x*sin(beta) + y*sin(beta);
|
|
|
|
- double vx,vy;
|
|
|
|
- vx = xobj.ext.speed.x;
|
|
|
|
- vy = xobj.ext.speed.y;
|
|
|
|
- vx = vx - mfvx;
|
|
|
|
- vy = vy - mfvy;
|
|
|
|
- double relvx,relvy;
|
|
|
|
- relvx = vx*cos(beta) - vy*sin(beta);
|
|
|
|
- relvy = vx*sin(beta) + vy*sin(beta);
|
|
|
|
- double fobjheading = xobj.base.pos.h;
|
|
|
|
- fobjheading = fobjheading - mfHeading;
|
|
|
|
- pobject->set_lifetime(100);
|
|
|
|
- pobject->set_prob(1.0);
|
|
|
|
- pobject->set_sensor_type(1);
|
|
|
|
- pobject->set_yaw(fobjheading);
|
|
|
|
- iv::fusion::PointXYZ * ppointxyz = new iv::fusion::PointXYZ;
|
|
|
|
- ppointxyz->set_x(relx);
|
|
|
|
- ppointxyz->set_y(rely);
|
|
|
|
- ppointxyz->set_z(0);
|
|
|
|
- iv::fusion::Dimension * pdim = new iv::fusion::Dimension;
|
|
|
|
- pdim->set_x(xobj.base.geo.dimX);
|
|
|
|
- pdim->set_y(xobj.base.geo.dimY);
|
|
|
|
- pdim->set_z(xobj.base.geo.dimZ);
|
|
|
|
- pobject->set_allocated_centroid(ppointxyz);
|
|
|
|
- pobject->set_allocated_dimensions(pdim);
|
|
|
|
- pobject->set_velocity_linear_x(sqrt(pow(relvx,2)+pow(relvy,2)));
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
@@ -129,7 +144,7 @@ void vtd_pilot::threadobject()
|
|
std::vector<iv::vtd::rdbdata> xvectorrdbdata;
|
|
std::vector<iv::vtd::rdbdata> xvectorrdbdata;
|
|
int64_t nlastsharetime = std::chrono::system_clock::now().time_since_epoch().count();
|
|
int64_t nlastsharetime = std::chrono::system_clock::now().time_since_epoch().count();
|
|
// int nmaxobjid = 2;
|
|
// int nmaxobjid = 2;
|
|
- int nshareinter = 100; //100 ms share a data.
|
|
|
|
|
|
+ int nshareinter = 20; //100 ms share a data.
|
|
bool bshare = false;
|
|
bool bshare = false;
|
|
while(mbRun)
|
|
while(mbRun)
|
|
{
|
|
{
|
|
@@ -141,6 +156,28 @@ void vtd_pilot::threadobject()
|
|
}
|
|
}
|
|
if(bshare)
|
|
if(bshare)
|
|
{
|
|
{
|
|
|
|
+ iv::fusion::fusionobjectarray xfusionarray;
|
|
|
|
+ ConvertToObjectArray(xvectorrdbdata,xfusionarray);
|
|
|
|
+
|
|
|
|
+ if(xfusionarray.obj_size()>=1)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ std::cout<<" now : "<<now/1000000<<std::endl;
|
|
|
|
+
|
|
|
|
+ int nbytesize = xfusionarray.ByteSizeLong();
|
|
|
|
+
|
|
|
|
+ std::shared_ptr<char> pstr_ptr = std::shared_ptr<char>(new char[nbytesize]);
|
|
|
|
+
|
|
|
|
+ if(xfusionarray.SerializeToArray(pstr_ptr.get(),nbytesize))
|
|
|
|
+ {
|
|
|
|
+ iv::modulecomm::ModuleSendMsg(mpafusion,pstr_ptr.get(),nbytesize);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ std::cout<<"no object. "<<std::endl;
|
|
|
|
+ }
|
|
//share object data.
|
|
//share object data.
|
|
bshare = false;
|
|
bshare = false;
|
|
nlastsharetime = now;
|
|
nlastsharetime = now;
|
|
@@ -163,7 +200,12 @@ void vtd_pilot::threadobject()
|
|
{
|
|
{
|
|
xvectorrdbdata.push_back(mvectorrdbdata[i]);
|
|
xvectorrdbdata.push_back(mvectorrdbdata[i]);
|
|
}
|
|
}
|
|
|
|
+ mvectorrdbdata.clear();
|
|
mmutexrdb.unlock();
|
|
mmutexrdb.unlock();
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -180,16 +222,17 @@ void vtd_pilot::UpdateVTD(const char *strdata, const unsigned int nSize, const u
|
|
mvectorrdbdata.push_back(xrdbdata);
|
|
mvectorrdbdata.push_back(xrdbdata);
|
|
mmutexrdb.unlock();
|
|
mmutexrdb.unlock();
|
|
mcvrdb.notify_all();
|
|
mcvrdb.notify_all();
|
|
- if(xrdbdata.mrdbitem_size()>0)
|
|
|
|
- {
|
|
|
|
- iv::vtd::rdbitem * pitem = xrdbdata.mutable_mrdbitem(0);
|
|
|
|
- msimFrame = pitem->simframe();
|
|
|
|
- msimTime = pitem->simtime();
|
|
|
|
- if(pitem->pkgid() == RDB_PKG_ID_OBJECT_STATE)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ // std::cout<<"notify"<<std::endl;
|
|
|
|
+// if(xrdbdata.mrdbitem_size()>0)
|
|
|
|
+// {
|
|
|
|
+// iv::vtd::rdbitem * pitem = xrdbdata.mutable_mrdbitem(0);
|
|
|
|
+// msimFrame = pitem->simframe();
|
|
|
|
+// msimTime = pitem->simtime();
|
|
|
|
+// if(pitem->pkgid() == RDB_PKG_ID_OBJECT_STATE)
|
|
|
|
+// {
|
|
|
|
+
|
|
|
|
+// }
|
|
|
|
+// }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|