Revision: 6866
http://playerstage.svn.sourceforge.net/playerstage/?rev=6866&view=rev
Author: rtv
Date: 2008-07-14 23:06:08 -0700 (Mon, 14 Jul 2008)
Log Message:
-----------
added fiducial interface support to player plugin
Modified Paths:
--------------
code/stage/trunk/libstageplugin/CMakeLists.txt
code/stage/trunk/libstageplugin/p_driver.cc
code/stage/trunk/libstageplugin/p_fiducial.cc
Removed Paths:
-------------
code/stage/trunk/libstageplugin/player_interfaces.h
Modified: code/stage/trunk/libstageplugin/CMakeLists.txt
===================================================================
--- code/stage/trunk/libstageplugin/CMakeLists.txt 2008-07-14 18:49:45 UTC
(rev 6865)
+++ code/stage/trunk/libstageplugin/CMakeLists.txt 2008-07-15 06:06:08 UTC
(rev 6866)
@@ -6,13 +6,13 @@
p_driver.cc
p_simulation.cc
p_laser.cc
+ p_fiducial.cc
p_position.cc
p_sonar.cc
stg_time.cc
)
# p_graphics3d.cc
-# p_fiducial.cc
# p_blobfinder.cc
Modified: code/stage/trunk/libstageplugin/p_driver.cc
===================================================================
--- code/stage/trunk/libstageplugin/p_driver.cc 2008-07-14 18:49:45 UTC (rev
6865)
+++ code/stage/trunk/libstageplugin/p_driver.cc 2008-07-15 06:06:08 UTC (rev
6866)
@@ -311,9 +311,9 @@
//ifsrc = new InterfaceBlobfinder( player_addr, this, cf, section );
//break;
- case PLAYER_SIMULATION_CODE:
- ifsrc = new InterfaceSimulation( player_addr, this, cf, section );
- break;
+ case PLAYER_SIMULATION_CODE:
+ ifsrc = new InterfaceSimulation( player_addr, this, cf, section );
+ break;
case PLAYER_LASER_CODE:
ifsrc = new InterfaceLaser( player_addr, this, cf, section );
@@ -335,10 +335,10 @@
// ifsrc = new InterfacePtz( player_addr, this, cf, section );
// break;
-// case PLAYER_FIDUCIAL_CODE:
-// ifsrc = new InterfaceFiducial( player_addr, this, cf, section );
-// break;
-
+ case PLAYER_FIDUCIAL_CODE:
+ ifsrc = new InterfaceFiducial( player_addr, this, cf, section );
+ break;
+
// case PLAYER_LOCALIZE_CODE:
// ifsrc = new InterfaceLocalize( player_addr, this, cf, section );
// break;
Modified: code/stage/trunk/libstageplugin/p_fiducial.cc
===================================================================
--- code/stage/trunk/libstageplugin/p_fiducial.cc 2008-07-14 18:49:45 UTC
(rev 6865)
+++ code/stage/trunk/libstageplugin/p_fiducial.cc 2008-07-15 06:06:08 UTC
(rev 6866)
@@ -46,84 +46,72 @@
#include "p_driver.h"
-extern "C" {
-int fiducial_init( stg_model_t* mod );
-}
InterfaceFiducial::InterfaceFiducial( player_devaddr_t addr,
StgDriver* driver,
ConfigFile* cf,
int section )
- : InterfaceModel( addr, driver, cf, section, fiducial_init )
+ : InterfaceModel( addr, driver, cf, section, MODEL_TYPE_FIDUCIAL )
{
- // nothing to do...
}
void InterfaceFiducial::Publish( void )
-{
- size_t len = mod->data_len;
- stg_fiducial_t* fids = (stg_fiducial_t*)mod->data;
-
+{
player_fiducial_data_t pdata;
memset( &pdata, 0, sizeof(pdata) );
- if( len > 0 )
+ StgModelFiducial* fidmod = (StgModelFiducial*)this->mod;
+
+ if( fidmod->fiducial_count > 0 )
{
- size_t fcount = len / sizeof(stg_fiducial_t);
- assert( fcount > 0 );
-
- pdata.fiducials_count = fcount;
-
- //printf( "reporting %d fiducials\n",
- // fcount );
+ stg_fiducial_t* fids = fidmod->fiducials;
+ assert( fids );
- if( fcount > PLAYER_FIDUCIAL_MAX_SAMPLES )
- {
- PRINT_WARN2( "A Stage model has detected more fiducials than"
- " will fit in Player's buffer (%d/%d)\n",
- fcount, PLAYER_FIDUCIAL_MAX_SAMPLES );
- fcount = PLAYER_FIDUCIAL_MAX_SAMPLES;
- }
+ pdata.fiducials_count = fidmod->fiducial_count;
- for( int i=0; i<(int)fcount; i++ )
- {
- pdata.fiducials[i].id = fids[i].id;
-
- // 2D x,y only
- double xpos = fids[i].range * cos(fids[i].bearing);
- double ypos = fids[i].range * sin(fids[i].bearing);
-
+ //printf( "reporting %d fiducials\n",
+ // fcount );
+
+ for( int i=0; i<(int)pdata.fiducials_count; i++ )
+ {
+ pdata.fiducials[i].id = fids[i].id;
+
+ // 2D x,y only
+ double xpos = fids[i].range * cos(fids[i].bearing);
+ double ypos = fids[i].range * sin(fids[i].bearing);
+
/*
- pdata.fiducials[i].pos[0] = xpos;
- pdata.fiducials[i].pos[1] = ypos;
-
- // yaw only
- pdata.fiducials[i].rot[2] = fids[i].geom.a;
- // player can't handle per-fiducial size.
- // we leave uncertainty (upose) at zero
- */
-
+ pdata.fiducials[i].pos[0] = xpos;
+ pdata.fiducials[i].pos[1] = ypos;
+
+ // yaw only
+ pdata.fiducials[i].rot[2] = fids[i].geom.a;
+ // player can't handle per-fiducial size.
+ // we leave uncertainty (upose) at zero
+ */
+
// I'm guessing at this, but the above doesn't compile, because
// there's no 'pos' or 'rot' fields - BPG
- pdata.fiducials[i].pose.px = xpos;
- pdata.fiducials[i].pose.py = ypos;
- pdata.fiducials[i].pose.pz = 0.0;
- pdata.fiducials[i].pose.proll = 0.0;
- pdata.fiducials[i].pose.ppitch = 0.0;
- pdata.fiducials[i].pose.pyaw = fids[i].geom.a;
- }
+
+ pdata.fiducials[i].pose.px = fids[i].pose.x;
+ pdata.fiducials[i].pose.py = fids[i].pose.y;
+ pdata.fiducials[i].pose.pz = fids[i].pose.z;
+ pdata.fiducials[i].pose.proll = 0.0;
+ pdata.fiducials[i].pose.ppitch = 0.0;
+ pdata.fiducials[i].pose.pyaw = fids[i].geom.a;
+ }
}
// publish this data
- this->driver->Publish( this->addr, NULL,
- PLAYER_MSGTYPE_DATA,
- PLAYER_FIDUCIAL_DATA_SCAN,
- &pdata, sizeof(pdata), NULL);
+ this->driver->Publish( this->addr,
+
PLAYER_MSGTYPE_DATA,
+
PLAYER_FIDUCIAL_DATA_SCAN,
+ &pdata,
sizeof(pdata), NULL);
}
-int InterfaceFiducial::ProcessMessage(MessageQueue* resp_queue,
- player_msghdr_t* hdr,
- void* data )
+int InterfaceFiducial::ProcessMessage(QueuePointer& resp_queue,
+
player_msghdr_t* hdr,
+
void* data )
{
//printf("got fiducial request\n");
@@ -132,76 +120,76 @@
PLAYER_FIDUCIAL_REQ_GET_GEOM,
this->addr))
{
- stg_geom_t geom;
- stg_model_get_geom( this->mod, &geom );
+ stg_geom_t geom = mod->GetGeom();
+ stg_pose_t pose = mod->GetPose();
- stg_pose_t pose;
- stg_model_get_pose( this->mod, &pose );
-
// fill in the geometry data formatted player-like
player_laser_geom_t pgeom;
pgeom.pose.px = pose.x;
pgeom.pose.py = pose.y;
- pgeom.pose.pa = pose.a;
+ pgeom.pose.pz = pose.z;
+ pgeom.pose.proll = 0.0;
+ pgeom.pose.ppitch = 0.0;
+ pgeom.pose.pyaw = pose.a;
pgeom.size.sl = geom.size.x;
pgeom.size.sw = geom.size.y;
this->driver->Publish(this->addr, resp_queue,
- PLAYER_MSGTYPE_RESP_ACK,
- PLAYER_FIDUCIAL_REQ_GET_GEOM,
- (void*)&pgeom, sizeof(pgeom), NULL);
+
PLAYER_MSGTYPE_RESP_ACK,
+
PLAYER_FIDUCIAL_REQ_GET_GEOM,
+
(void*)&pgeom, sizeof(pgeom), NULL);
return(0);
}
else if(Message::MatchMessage(hdr, PLAYER_MSGTYPE_REQ,
- PLAYER_FIDUCIAL_REQ_SET_ID,
- this->addr))
+
PLAYER_FIDUCIAL_REQ_SET_ID,
+
this->addr))
{
if( hdr->size == sizeof(player_fiducial_id_t) )
- {
- // copy the new ID
- player_fiducial_id_t* incoming = (player_fiducial_id_t*)data;
-
- // Stage uses a simple int for IDs.
- int id = incoming->id;
-
- stg_model_set_fiducial_return( this->mod, id );
-
- player_fiducial_id_t pid;
- pid.id = id;
-
- // acknowledge, including the new ID
- this->driver->Publish(this->addr, resp_queue,
- PLAYER_MSGTYPE_RESP_ACK,
- PLAYER_FIDUCIAL_REQ_SET_ID,
- (void*)&pid, sizeof(pid) );
- }
+ {
+ // copy the new ID
+ player_fiducial_id_t* incoming =
(player_fiducial_id_t*)data;
+
+ // Stage uses a simple int for IDs.
+ int id = incoming->id;
+
+ mod->SetFiducialReturn( id );
+
+ player_fiducial_id_t pid;
+ pid.id = id;
+
+ // acknowledge, including the new ID
+ this->driver->Publish(this->addr, resp_queue,
+
PLAYER_MSGTYPE_RESP_ACK,
+
PLAYER_FIDUCIAL_REQ_SET_ID,
+
(void*)&pid, sizeof(pid) );
+ }
else
- {
- PRINT_ERR2("Incorrect packet size setting fiducial ID (%d/%d)",
- (int)hdr->size, (int)sizeof(player_fiducial_id_t) );
- return(-1); // error - NACK is sent automatically
- }
+ {
+ PRINT_ERR2("Incorrect packet size setting fiducial ID
(%d/%d)",
+ (int)hdr->size,
(int)sizeof(player_fiducial_id_t) );
+ return(-1); // error - NACK is sent automatically
+ }
}
else if(Message::MatchMessage(hdr, PLAYER_MSGTYPE_REQ,
- PLAYER_FIDUCIAL_REQ_GET_ID,
- this->addr))
+
PLAYER_FIDUCIAL_REQ_GET_ID,
+
this->addr))
{
// fill in the data formatted player-like
player_fiducial_id_t pid;
- pid.id = mod->fiducial_return;
+ pid.id = mod->FiducialReturn();
// acknowledge, including the new ID
this->driver->Publish(this->addr, resp_queue,
- PLAYER_MSGTYPE_RESP_ACK,
- PLAYER_FIDUCIAL_REQ_GET_ID,
- (void*)&pid, sizeof(pid) );
+
PLAYER_MSGTYPE_RESP_ACK,
+
PLAYER_FIDUCIAL_REQ_GET_ID,
+
(void*)&pid, sizeof(pid) );
}
/* case PLAYER_FIDUCIAL_SET_FOV:
-
- if( len == sizeof(player_fiducial_fov_t) )
- {
- player_fiducial_fov_t* pfov = (player_fiducial_fov_t*)src;
-
+
+ if( len == sizeof(player_fiducial_fov_t) )
+ {
+ player_fiducial_fov_t* pfov = (player_fiducial_fov_t*)src;
+
// convert from player to stage FOV packets
stg_fiducial_config_t setcfg;
memset( &setcfg, 0, sizeof(setcfg) );
@@ -242,15 +230,15 @@
}
break;
*/
-
+
else
{
// Don't know how to handle this message.
PRINT_WARN2( "stg_fiducial doesn't support msg with type/subtype %d/%d",
- hdr->type, hdr->subtype);
+ hdr->type, hdr->subtype);
return(-1);
}
-
+
return 0;
}
Deleted: code/stage/trunk/libstageplugin/player_interfaces.h
===================================================================
--- code/stage/trunk/libstageplugin/player_interfaces.h 2008-07-14 18:49:45 UTC
(rev 6865)
+++ code/stage/trunk/libstageplugin/player_interfaces.h 2008-07-15 06:06:08 UTC
(rev 6866)
@@ -1,155 +0,0 @@
-#ifndef _STAGE_PLAYER_INTERFACES_H
-#define _STAGE_PLAYER_INTERFACES_H
-
-#include "player_driver.h"
-
-class Interface
-{
- public:
- Interface( player_device_id_t id, StgDriver* driver,ConfigFile* cf, int
section );
-
- virtual ~Interface( void ){ /* TODO: clean up*/ };
-
- player_device_id_t id;
- stg_model_t* mod;
-
- StgDriver* driver; // the driver instance that created this device
-
- size_t data_len;
- size_t cmd_len;
- size_t req_qlen;
- size_t rep_qlen;
-
- // pure virtual methods
- virtual void Command( void* buffer, size_t len ){}; // empty implementation
- virtual void Configure( void* client, void* buffer, size_t len ){}; // empty
implementation
- virtual void Publish( void ){}; // empty implementation
-};
-
-
-class InterfaceSimulation : public Interface
-{
- public:
- InterfaceSimulation( player_device_id_t id, StgDriver* driver,ConfigFile*
cf, int section );
- virtual ~InterfaceSimulation( void ){ /* TODO: clean up*/ };
-
- //virtual void Command( void* buffer, size_t len );
- virtual void Configure( void* client, void* buffer, size_t len );
-};
-
-
-class InterfaceModel : public Interface
-{
- public:
- InterfaceModel( player_device_id_t id,
- StgDriver* driver,
- ConfigFile* cf,
- int section,
- stg_model_type_t modtype );
-
- virtual ~InterfaceModel( void ){ /* TODO: clean up*/ };
-};
-
-class InterfacePosition : public InterfaceModel
-{
- public:
- InterfacePosition( player_device_id_t id, StgDriver* driver, ConfigFile* cf,
int section );
- virtual ~InterfacePosition( void ){ /* TODO: clean up*/ };
- virtual void Command( void* buffer, size_t len );
- virtual void Configure( void* client, void* buffer, size_t len );
- virtual void Publish( void );
-};
-
-class InterfaceLaser : public InterfaceModel
-{
- public:
- InterfaceLaser( player_device_id_t id, StgDriver* driver, ConfigFile* cf,
int section );
- virtual ~InterfaceLaser( void ){ /* TODO: clean up*/ };
- //virtual void Command( void* buffer, size_t len );
- virtual void Configure( void* client, void* buffer, size_t len );
- virtual void Publish( void );
-};
-
-class InterfaceFiducial : public InterfaceModel
-{
- public:
- InterfaceFiducial( player_device_id_t id, StgDriver* driver, ConfigFile* cf,
int section );
- virtual ~InterfaceFiducial( void ){ /* TODO: clean up*/ };
- //virtual void Command( void* buffer, size_t len );
- virtual void Configure( void* client, void* buffer, size_t len );
- virtual void Publish( void );
-};
-
-class InterfaceBlobfinder : public InterfaceModel
-{
- public:
- InterfaceBlobfinder( player_device_id_t id, StgDriver* driver, ConfigFile*
cf, int section );
- virtual ~InterfaceBlobfinder( void ){ /* TODO: clean up*/ };
- //virtual void Command( void* buffer, size_t len );
- virtual void Configure( void* client, void* buffer, size_t len );
- virtual void Publish( void );
-};
-
-class InterfaceSonar : public InterfaceModel
-{
- public:
- InterfaceSonar( player_device_id_t id, StgDriver* driver, ConfigFile* cf,
int section );
- virtual ~InterfaceSonar( void ){ /* TODO: clean up*/ };
- //virtual void Command( void* buffer, size_t len );
- virtual void Configure( void* client, void* buffer, size_t len );
- virtual void Publish( void );
-};
-
-
-// declare a raft of functions that interface between Player and Stage
interfaces
-
-
-// POSITION INTERFACE
-//void PositionCommand( Interface* device, void* buffer, size_t len );
-//void PositionData( Interface* device, void* data, size_t len );
-//int PositionData( stg_model_t* mod, char* name, void* data, size_t len,
void* userp );
-//void PositionConfig( Interface* device, void* client, void* buffer, size_t
len );
-
-// LOCALIZE INTERFACE
-//void LocalizeCommand( Interface* device, void* buffer, size_t len );
-//void LocalizeData( Interface* device, void* data, size_t len );
-//void LocalizeConfig( Interface* device, void* client, void* buffer, size_t
len );
-
-// SONAR INTERFACE
-//void SonarData( Interface* device, void* data, size_t len );
-//void SonarConfig( Interface* device, void* client, void* buffer, size_t len
);
-
-// ENERGY INTERFACE
-//void EnergyData( Interface* device, void* data, size_t len );
-//void EnergyConfig( Interface* device, void* client, void* buffer, size_t len
);
-
-// SIMULATION INTERFACE
-//void SimulationData( Interface* device, void* data, size_t len );
-//void SimulationConfig( player_device_id_t id, void* client, void* buffer,
size_t len);
-
-// BLOBFINDER INTERFACE
-//void BlobfinderData( Interface* device, void* data, size_t len );
-//void BlobfinderConfig( Interface* device, void* client, void* buffer, size_t
len);
-
-// LASER INTERFACE
-//void LaserConfig( Interface* device, void* client, void* buffer, size_t len
);
-//int LaserData( stg_model_t* mod, char* name, void* data, size_t len, void*
userp );
-
-// GRIPPER INTERFACE
-//void GripperCommand( Interface* device, void* src, size_t len );
-//void GripperConfig( Interface* device, void* client, void* buffer, size_t
len );
-//void GripperData( Interface* device, void* data, size_t len );
-
-// FIDUCIAL INTERFACE
-//void FiducialData( Interface* device, void* data, size_t len );
-//int FiducialData( stg_model_t* mod, char* name, void* data, size_t len,
void* userp );
-//void FiducialConfig( Interface* device, void* client, void* buffer, size_t
len );
-
-// MAP INTERFACE
-//void MapData( Interface* device, void* data, size_t len );
-//void MapConfig( Interface* device, void* client, void* buffer, size_t len);
-//void MapConfigInfo( Interface* device, void* client, void* buffer, size_t
len);
-//void MapConfigData( Interface* device, void* client, void* buffer, size_t
len);
-
-
-#endif
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit