Revision: 6925
http://playerstage.svn.sourceforge.net/playerstage/?rev=6925&view=rev
Author: jeremy_asher
Date: 2008-07-24 23:28:58 +0000 (Thu, 24 Jul 2008)
Log Message:
-----------
libstageplugin: progress on p_simulation and test, 2D and 3D get/set
implemented, properties need work
Modified Paths:
--------------
code/stage/trunk/libstage/model.cc
code/stage/trunk/libstageplugin/p_driver.cc
code/stage/trunk/libstageplugin/p_simulation.cc
code/stage/trunk/libstageplugin/test/CMakeLists.txt
code/stage/trunk/worlds/lsp_test.world
Added Paths:
-----------
code/stage/trunk/libstageplugin/test/lsp_test_simulation.cc
code/stage/trunk/libstageplugin/test/lsp_test_simulation.hh
Modified: code/stage/trunk/libstage/model.cc
===================================================================
--- code/stage/trunk/libstage/model.cc 2008-07-24 19:34:14 UTC (rev 6924)
+++ code/stage/trunk/libstage/model.cc 2008-07-24 23:28:58 UTC (rev 6925)
@@ -225,6 +225,7 @@
this->gui_mask = this->parent ? 0 : DEFAULT_MASK;
this->callbacks = g_hash_table_new( g_int_hash, g_int_equal );
+ g_datalist_init( &this->props );
this->flag_list = NULL;
this->blinkenlights = g_ptr_array_new();
@@ -260,6 +261,8 @@
world->children = g_list_remove( world->children, this );
if( callbacks ) g_hash_table_destroy( callbacks );
+
+ g_datalist_clear( &props );
g_hash_table_remove( StgModel::modelsbyid, (void*)id );
Modified: code/stage/trunk/libstageplugin/p_driver.cc
===================================================================
--- code/stage/trunk/libstageplugin/p_driver.cc 2008-07-24 19:34:14 UTC (rev
6924)
+++ code/stage/trunk/libstageplugin/p_driver.cc 2008-07-24 23:28:58 UTC (rev
6925)
@@ -311,39 +311,31 @@
ifsrc = new InterfaceBlobfinder( player_addr, this, cf, section );
break;
-// case PLAYER_CAMERA_CODE:
-// ifsrc = new InterfaceCamera( player_addr, this, cf, section );
-// break;
+ case PLAYER_FIDUCIAL_CODE:
+ ifsrc = new InterfaceFiducial( player_addr, this, cf, section
);
+ break;
+ case PLAYER_LASER_CODE:
+ ifsrc = new InterfaceLaser( player_addr, this, cf, section );
+ break;
+
+ case PLAYER_POSITION2D_CODE:
+ ifsrc = new InterfacePosition( player_addr, this, cf, section
);
+ break;
case PLAYER_SIMULATION_CODE:
ifsrc = new InterfaceSimulation( player_addr, this, cf, section );
- break;
+ break;
- case PLAYER_LASER_CODE:
- ifsrc = new InterfaceLaser( player_addr, this, cf, section );
- break;
-
- case PLAYER_POSITION2D_CODE:
- ifsrc = new InterfacePosition( player_addr, this, cf, section );
- break;
-
case PLAYER_SONAR_CODE:
ifsrc = new InterfaceSonar( player_addr, this, cf, section );
break;
-
-// case PLAYER_POWER_CODE:
-// ifsrc = new InterfacePower( player_addr, this, cf, section );
-// break;
+
+ case PLAYER_SPEECH_CODE:
+ ifsrc = new InterfaceSpeech( player_addr, this, cf, section );
+ break;
+
-// case PLAYER_PTZ_CODE:
-// ifsrc = new InterfacePtz( 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;
@@ -366,16 +358,25 @@
// case PLAYER_WIFI_CODE:
// ifsrc = new InterfaceWifi( player_addr, this, cf, section );
-// break;
+// break;
+
+// case PLAYER_CAMERA_CODE:
+// ifsrc = new InterfaceCamera( player_addr, this, cf, section );
+// break;
- case PLAYER_SPEECH_CODE:
- ifsrc = new InterfaceSpeech( player_addr, this, cf, section );
- break;
+// case PLAYER_POWER_CODE:
+// ifsrc = new InterfacePower( player_addr, this, cf, section );
+// break;
+// case PLAYER_PTZ_CODE:
+// ifsrc = new InterfacePtz( player_addr, this, cf, section );
+// break;
+
// case PLAYER_BUMPER_CODE:
// ifsrc = new InterfaceBumper( player_addr, this, cf, section );
// break;
+
default:
PRINT_ERR1( "error: stage driver doesn't support interface type %d\n",
player_addr.interf );
Modified: code/stage/trunk/libstageplugin/p_simulation.cc
===================================================================
--- code/stage/trunk/libstageplugin/p_simulation.cc 2008-07-24 19:34:14 UTC
(rev 6924)
+++ code/stage/trunk/libstageplugin/p_simulation.cc 2008-07-24 23:28:58 UTC
(rev 6925)
@@ -46,7 +46,7 @@
// CODE ------------------------------------------------------------
-#define DEBUG
+//#define DEBUG
#include <libgen.h> // for dirname(3)
#include <libplayercore/globals.h> // for player_argc & player_argv
@@ -147,123 +147,226 @@
player_msghdr_t* hdr,
void* data)
{
- // Is it a request to set a model's pose?
- if(Message::MatchMessage(hdr, PLAYER_MSGTYPE_REQ,
- PLAYER_SIMULATION_REQ_SET_POSE2D,
- this->addr))
- {
- player_simulation_pose2d_req_t* req =
- (player_simulation_pose2d_req_t*)data;
+ // Is it a request to get a model's pose in 2D?
+ if(Message::MatchMessage(hdr, PLAYER_MSGTYPE_REQ,
+
PLAYER_SIMULATION_REQ_GET_POSE2D,
+ this->addr))
+ {
+ player_simulation_pose2d_req_t* req =
+ (player_simulation_pose2d_req_t*)data;
+
+ PRINT_DEBUG1( "Stage: received request for the 2D position of
object \"%s\"\n", req->name );
+
+ // look up the named model
+ StgModel* mod = StgDriver::world->GetModel( req->name );
+
+ if( mod )
+ {
+ stg_pose_t pose = mod->GetPose();
+
+ PRINT_DEBUG3( "Stage: returning location [ %.2f, %.2f,
%.2f ]\n",
+ pose.x, pose.y, pose.a );
+
+ player_simulation_pose2d_req_t reply;
+ memcpy( &reply, req, sizeof(reply));
+ reply.pose.px = pose.x;
+ reply.pose.py = pose.y;
+ reply.pose.pa = pose.a;
+
+ this->driver->Publish( this->addr, resp_queue,
+
PLAYER_MSGTYPE_RESP_ACK,
+
PLAYER_SIMULATION_REQ_GET_POSE2D,
+
(void*)&reply, sizeof(reply), NULL );
+ return(0);
+ }
+ else
+ {
+ PRINT_WARN1( "Stage: GET_POSE2D request: simulation
model \"%s\" not found", req->name );
+ return(-1);
+ }
+ }
+
+ // Is it a request to set a model's pose in 2D?
+ if(Message::MatchMessage(hdr, PLAYER_MSGTYPE_REQ,
+
PLAYER_SIMULATION_REQ_SET_POSE2D,
+ this->addr))
+ {
+ player_simulation_pose2d_req_t* req =
+ (player_simulation_pose2d_req_t*)data;
- stg_pose_t pose;
- pose.x = req->pose.px;
- pose.y = req->pose.py;
- pose.a = req->pose.pa;
+ // look up the named model
+ StgModel* mod = StgDriver::world->GetModel( req->name );
- // look up the named model
+ if( mod )
+ {
+ PRINT_DEBUG4( "Stage: moving \"%s\" to [ %.2f, %.2f,
%.2f ]\n",
+ req->name, req->pose.px,
req->pose.py, req->pose.pa );
+
+ stg_pose_t pose = mod->GetPose();
+ pose.x = req->pose.px;
+ pose.y = req->pose.py;
+ pose.a = req->pose.pa;
+
+ mod->SetPose( pose );
- StgModel* mod = StgDriver::world->GetModel( req->name );
-
- if( mod )
- {
- printf( "Stage: moving \"%s\" to (%.2f,%.2f,%.2f)\n",
- req->name, pose.x, pose.y, pose.a );
+ this->driver->Publish(this->addr, resp_queue,
+ PLAYER_MSGTYPE_RESP_ACK,
+
PLAYER_SIMULATION_REQ_SET_POSE2D);
+ return(0);
+ }
+ else
+ {
+ PRINT_WARN1( "SETPOSE2D request: simulation model
\"%s\" not found", req->name );
+ return(-1);
+ }
+ }
- mod->SetPose( pose );
-
- this->driver->Publish(this->addr, resp_queue,
- PLAYER_MSGTYPE_RESP_ACK,
- PLAYER_SIMULATION_REQ_SET_POSE2D);
- return(0);
- }
- else
- {
- PRINT_WARN1( "SETPOSE2D request: simulation model \"%s\" not found",
req->name );
- return(-1);
- }
- }
- // Is it a request to set a model's pose?
- else if(Message::MatchMessage(hdr, PLAYER_MSGTYPE_REQ,
- PLAYER_SIMULATION_REQ_SET_PROPERTY,
- this->addr))
+ // Is it a request to get a model's pose in 3D?
+ else if(Message::MatchMessage(hdr, PLAYER_MSGTYPE_REQ,
+
PLAYER_SIMULATION_REQ_GET_POSE3D,
+ this->addr))
{
-
- player_simulation_property_req_t* req =
- (player_simulation_property_req_t*)data;
-
- // look up the named model
- StgModel* mod =
- //stg_world_model_name_lookup( StgDriver::world, req->name );
- StgDriver::world->GetModel( req->name );
-
- if( mod )
- {
- int ack =
- mod->SetProperty( req->prop,
- (void*)req->value );
-
- this->driver->Publish(this->addr, resp_queue,
- ack==0 ? PLAYER_MSGTYPE_RESP_ACK :
PLAYER_MSGTYPE_RESP_NACK,
- PLAYER_SIMULATION_REQ_SET_PROPERTY);
- return(0);
+ player_simulation_pose3d_req_t* req =
+ (player_simulation_pose3d_req_t*)data;
+
+ PRINT_DEBUG1( "Stage: received request for the 3D position of
object \"%s\"\n", req->name );
+
+ // look up the named model
+ StgModel* mod = StgDriver::world->GetModel( req->name );
+
+ if( mod )
+ {
+ stg_pose_t pose = mod->GetPose();
+
+ PRINT_DEBUG4( "Stage: returning location [ %.2f, %.2f,
%.2f, %.2f ]\n",
+ pose.x, pose.y, pose.z,
pose.a );
+
+ player_simulation_pose3d_req_t reply;
+ memcpy( &reply, req, sizeof(reply));
+ reply.pose.px = pose.x;
+ reply.pose.py = pose.y;
+ reply.pose.pz = pose.z;
+ reply.pose.proll = 0; // currently unused
+ reply.pose.ppitch = 0; // currently unused
+ reply.pose.pyaw = pose.a;
+ reply.simtime = mod->GetWorld()->SimTimeNow(); // time
in microseconds
+
+ this->driver->Publish( this->addr, resp_queue,
+
PLAYER_MSGTYPE_RESP_ACK,
+
PLAYER_SIMULATION_REQ_GET_POSE3D,
+
(void*)&reply, sizeof(reply), NULL );
+ return(0);
+ }
+ else
+ {
+ PRINT_WARN1( "Stage: GET_POSE3D request: simulation
model \"%s\" not found", req->name );
+ return(-1);
+ }
}
- else
+
+ // Is it a request to set a model's pose in 3D?
+ if(Message::MatchMessage(hdr, PLAYER_MSGTYPE_REQ,
+
PLAYER_SIMULATION_REQ_SET_POSE3D,
+ this->addr))
{
- PRINT_WARN1( "SET_PROPERTY request: simulation model \"%s\" not
found", req->name );
- return(-1);
+ player_simulation_pose3d_req_t* req =
+ (player_simulation_pose3d_req_t*)data;
+
+ // look up the named model
+ StgModel* mod = StgDriver::world->GetModel( req->name );
+
+ if( mod )
+ {
+ PRINT_DEBUG5( "Stage: moving \"%s\" to [ %.2f, %.2f,
%.2f %.2f ]\n",
+ req->name, req->pose.px,
req->pose.py, req->pose.pz, req->pose.pyaw );
+
+ stg_pose_t pose = mod->GetPose();
+ pose.x = req->pose.px;
+ pose.y = req->pose.py;
+ pose.z = req->pose.pz;
+ pose.a = req->pose.pyaw;
+ // roll and pitch are unused
+
+ mod->SetPose( pose );
+
+ this->driver->Publish(this->addr, resp_queue,
+
PLAYER_MSGTYPE_RESP_ACK,
+
PLAYER_SIMULATION_REQ_SET_POSE3D);
+ return(0);
+ }
+ else
+ {
+ PRINT_WARN1( "SETPOSE2D request: simulation model
\"%s\" not found", req->name );
+ return(-1);
+ }
}
- }
- // Is it a request to get a model's pose?
- else if(Message::MatchMessage(hdr, PLAYER_MSGTYPE_REQ,
- PLAYER_SIMULATION_REQ_GET_POSE2D,
- this->addr))
+
+
+ // Is it a request to set a model's property?
+ else if(Message::MatchMessage(hdr, PLAYER_MSGTYPE_REQ,
+ PLAYER_SIMULATION_REQ_SET_PROPERTY,
+ this->addr))
{
- player_simulation_pose2d_req_t* req =
- (player_simulation_pose2d_req_t*)data;
+ player_simulation_property_req_t* req =
+ (player_simulation_property_req_t*)data;
- printf( "Stage: received request for position of object \"%s\"\n",
req->name );
-
- // look up the named model
- StgModel* mod =
- //stg_world_model_name_lookup( StgDriver::world, req->name );
- StgDriver::world->GetModel( req->name );
-
- if( mod )
- {
- stg_pose_t pose = mod->GetPose();
+ // look up the named model
+ StgModel* mod = StgDriver::world->GetModel( req->name );
+
+ if( mod )
+ {
+ int ack =
+ mod->SetProperty( req->prop,
+ (void*)req->value );
- printf( "Stage: returning location (%.2f,%.2f,%.2f)\n",
- pose.x, pose.y, pose.a );
+ this->driver->Publish(this->addr, resp_queue,
+ ack==0 ? PLAYER_MSGTYPE_RESP_ACK :
PLAYER_MSGTYPE_RESP_NACK,
+ PLAYER_SIMULATION_REQ_SET_PROPERTY);
+ return(0);
+ }
+ else
+ {
+ PRINT_WARN1( "SET_PROPERTY request: simulation model
\"%s\" not found", req->name );
+ return(-1);
+ }
+ }
-
- player_simulation_pose2d_req_t reply;
- memcpy( &reply, req, sizeof(reply));
- reply.pose.px = pose.x;
- reply.pose.py = pose.y;
- reply.pose.pa = pose.a;
-
- /*
- printf( "Stage: returning location (%d %d %d)\n",
- reply.x, reply.y, reply.a );
- */
-
- this->driver->Publish( this->addr, resp_queue,
- PLAYER_MSGTYPE_RESP_ACK,
- PLAYER_SIMULATION_REQ_GET_POSE2D,
- (void*)&reply, sizeof(reply), NULL );
- return(0);
- }
- else
+ // Is it a request to get a model's property?
+ else if(Message::MatchMessage(hdr, PLAYER_MSGTYPE_REQ,
+
PLAYER_SIMULATION_REQ_GET_PROPERTY,
+ this->addr))
{
- PRINT_WARN1( "Stage: GET_POSE2D request: simulation model \"%s\" not
found", req->name );
- return(-1);
- }
- }
- else
- {
- // Don't know how to handle this message.
- PRINT_WARN2( "stg_simulation doesn't support msg with type/subtype %d/%d",
- hdr->type, hdr->subtype);
- return(-1);
- }
+ player_simulation_property_req_t* req =
+ (player_simulation_property_req_t*)data;
+
+ // look up the named model
+ StgModel* mod = StgDriver::world->GetModel( req->name );
+
+ if( mod )
+ {
+
+ req->value = (char*)malloc( 2 );
+ req->value[0] = NULL;
+ //(char*)mod->GetProperty( req->prop );
+
+ this->driver->Publish(this->addr, resp_queue,
+
PLAYER_MSGTYPE_RESP_ACK,
+
PLAYER_SIMULATION_REQ_GET_PROPERTY);
+ return(0);
+ }
+ else
+ {
+ PRINT_WARN1( "GET_PROPERTY request: simulation model
\"%s\" not found", req->name );
+ return(-1);
+ }
+ }
+
+
+ else
+ {
+ // Don't know how to handle this message.
+ PRINT_WARN2( "stg_simulation doesn't support msg with
type/subtype %d/%d",
+ hdr->type, hdr->subtype);
+ return(-1);
+ }
}
Modified: code/stage/trunk/libstageplugin/test/CMakeLists.txt
===================================================================
--- code/stage/trunk/libstageplugin/test/CMakeLists.txt 2008-07-24 19:34:14 UTC
(rev 6924)
+++ code/stage/trunk/libstageplugin/test/CMakeLists.txt 2008-07-24 23:28:58 UTC
(rev 6925)
@@ -15,10 +15,12 @@
lsp_test.cc
lsp_test_proxy.cc
lsp_test_proxy.hh
+ lsp_test_simulation.cc
+ lsp_test_simulation.hh
+ lsp_test_speech.cc
+ lsp_test_speech.hh
lsp_test_laser.cc
lsp_test_laser.hh
- lsp_test_speech.cc
- lsp_test_speech.hh
lsp_test_sonar.cc
lsp_test_sonar.hh
lsp_test_fiducial.cc
Added: code/stage/trunk/libstageplugin/test/lsp_test_simulation.cc
===================================================================
--- code/stage/trunk/libstageplugin/test/lsp_test_simulation.cc
(rev 0)
+++ code/stage/trunk/libstageplugin/test/lsp_test_simulation.cc 2008-07-24
23:28:58 UTC (rev 6925)
@@ -0,0 +1,88 @@
+#include "lsp_test_simulation.hh"
+
+using namespace lspTest;
+
+void Simulation::setUp() {
+ connect();
+ simProxy = playerc_simulation_create( client, 0 );
+ CPPUNIT_ASSERT( playerc_simulation_subscribe( simProxy,
PLAYER_OPEN_MODE ) == 0 );
+}
+
+void Simulation::tearDown() {
+ CPPUNIT_ASSERT( playerc_simulation_unsubscribe( simProxy ) == 0 );
+ playerc_simulation_destroy( simProxy );
+ disconnect();
+}
+
+void Simulation::testPose2D() {
+ double x, y, a;
+ double x2, y2, a2;
+
+ // See if the robot "r1" is where it should be according to
lsp_test.world
+ CPPUNIT_ASSERT( playerc_simulation_get_pose2d( simProxy, "r1", &x, &y,
&a ) == 0 );
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "pose (x)", -5.085, x, Delta );
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "pose (y)", -7.193, y, Delta );
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "pose (a)", 3*M_PI/4, a, Delta );
+
+ // Set pose to [ 0, 0, 0 ] and verify
+ CPPUNIT_ASSERT( playerc_simulation_set_pose2d( simProxy, "r1", 0, 0, 0
) == 0 );
+ CPPUNIT_ASSERT( playerc_simulation_get_pose2d( simProxy, "r1", &x2,
&y2, &a2 ) == 0 );
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "pose (x)", 0, x2, Delta );
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "pose (y)", 0, y2, Delta );
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "pose (a)", 0, a2, Delta );
+
+ // Return the robot to its starting point
+ CPPUNIT_ASSERT( playerc_simulation_set_pose2d( simProxy, "r1", x, y, a
) == 0 );
+}
+
+void Simulation::testPose3D() {
+ double x, y, z, roll, pitch, yaw, time;
+ double x2, y2, z2, roll2, pitch2, yaw2, time2;
+
+ // See if the robot "r1" is where it should be according to
lsp_test.world
+ CPPUNIT_ASSERT( playerc_simulation_get_pose3d( simProxy, "r1", &x, &y,
&z, &roll, &pitch, &yaw, &time ) == 0 );
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "pose (x)", -5.085, x, Delta );
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "pose (y)", -7.193, y, Delta );
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "pose (z)", 0, z, Delta );
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "pose (roll)", 0, roll, Delta );
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "pose (pitch)", 0, pitch, Delta );
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "pose (yaw)", 3*M_PI/4, yaw,
Delta );
+ CPPUNIT_ASSERT( time > 0 );
+
+ // Set pose to [ 0, 0, 0.5, M_PI/4, M_PI/4, M_PI/4 ] and verify
+ CPPUNIT_ASSERT( playerc_simulation_set_pose3d( simProxy, "r1", 0, 0,
0.5, M_PI/4, M_PI/4, M_PI/4 ) == 0 );
+ CPPUNIT_ASSERT( playerc_simulation_get_pose3d( simProxy, "r1", &x2,
&y2, &z2, &roll2, &pitch2, &yaw2, &time2 ) == 0 );
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "pose (x)", 0, x2, Delta );
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "pose (y)", 0, y2, Delta );
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "pose (z)", 0.5, z2, Delta );
+ // roll and pitch are currently unused in stage ( returns set to 0 )
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "pose (roll)", 0, roll2, Delta );
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "pose (pitch)", 0, pitch2, Delta
);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "pose (yaw)", M_PI/4, yaw2, Delta
);
+ CPPUNIT_ASSERT( time2 > time );
+
+ // Return the robot to its starting point
+ CPPUNIT_ASSERT( playerc_simulation_set_pose3d( simProxy, "r1", x, y, z,
roll, pitch, yaw ) == 0 );
+}
+
+void Simulation::testProperties() {
+ int r0Agg = 5;
+ int r1Agg = 1;
+ int r1Pow = 125;
+
+ // Set some properties
+ CPPUNIT_ASSERT( playerc_simulation_set_property( simProxy, "r0",
"aggression", &r0Agg, sizeof(r0Agg) ) == 0 );
+ CPPUNIT_ASSERT( playerc_simulation_set_property( simProxy, "r1",
"aggression", &r1Agg, sizeof(r0Agg) ) == 0 );
+ CPPUNIT_ASSERT( playerc_simulation_set_property( simProxy, "r1",
"power", &r1Pow, sizeof(r1Pow) ) == 0 );
+
+ // Get the properties back
+ int r0Agg2, r1Agg2, r1Pow2;
+ CPPUNIT_ASSERT( playerc_simulation_get_property( simProxy, "r0",
"aggression", &r0Agg2, sizeof(r0Agg2) ) == 0 );
+ CPPUNIT_ASSERT( playerc_simulation_get_property( simProxy, "r1",
"aggression", &r1Agg2, sizeof(r0Agg2) ) == 0 );
+ CPPUNIT_ASSERT( playerc_simulation_get_property( simProxy, "r1",
"power", &r1Pow2, sizeof(r1Pow2) ) == 0 );
+
+ // Make sure they're the same
+ CPPUNIT_ASSERT( r0Agg == r0Agg2 );
+ CPPUNIT_ASSERT( r1Agg == r1Agg2 );
+ CPPUNIT_ASSERT( r1Pow == r1Pow2 );
+}
\ No newline at end of file
Added: code/stage/trunk/libstageplugin/test/lsp_test_simulation.hh
===================================================================
--- code/stage/trunk/libstageplugin/test/lsp_test_simulation.hh
(rev 0)
+++ code/stage/trunk/libstageplugin/test/lsp_test_simulation.hh 2008-07-24
23:28:58 UTC (rev 6925)
@@ -0,0 +1,33 @@
+#ifndef _LSP_SIMULATION_TEST_H_
+#define _LSP_SIMULATION_TEST_H_
+
+#include <cppunit/extensions/HelperMacros.h>
+#include <libplayerc/playerc.h>
+
+#include "lsp_test_proxy.hh"
+
+namespace lspTest {
+ class Simulation : public Proxy
+ {
+ CPPUNIT_TEST_SUB_SUITE( Simulation, Proxy );
+ CPPUNIT_TEST( testPose2D );
+ CPPUNIT_TEST( testPose3D );
+ CPPUNIT_TEST( testProperties );
+ CPPUNIT_TEST_SUITE_END();
+
+ protected:
+ playerc_simulation_t* simProxy;
+
+ void testPose2D();
+ void testPose3D();
+ void testProperties();
+
+ public:
+ void setUp();
+ void tearDown();
+ };
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION( lspTest::Simulation );
+
+#endif
\ No newline at end of file
Modified: code/stage/trunk/worlds/lsp_test.world
===================================================================
--- code/stage/trunk/worlds/lsp_test.world 2008-07-24 19:34:14 UTC (rev
6924)
+++ code/stage/trunk/worlds/lsp_test.world 2008-07-24 23:28:58 UTC (rev
6925)
@@ -64,5 +64,5 @@
name "r1"
fiducial_return 2
- pose [ -5.085 -7.193 0 144.304 ]
+ pose [ -5.085 -7.193 0 135 ]
)
\ No newline at end of file
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