Update of /cvsroot/playerstage/code/stage/examples/libstage
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28100/libstage
Added Files:
stest.cc
Log Message:
added missing files
--- NEW FILE: stest.cc ---
/////////////////////////////////
// File: stest.c
// Desc: Stage library test program
// Created: 2004.9.15
// Author: Richard Vaughan <[EMAIL PROTECTED]>
// CVS: $Id: stest.cc,v 1.1 2008/01/15 01:29:10 rtv Exp $
// License: GPL
/////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "stage.hh"
using namespace Stg;
#include "config.h"
double minfrontdistance = 0.750;
double speed = 0.400;
double turnrate = M_PI/3.0;
typedef struct
{
StgModelLaser* laser;
StgModelPosition* position;
StgModelRanger* ranger;
StgModelFiducial* fiducial;
StgModelBlobfinder* blobfinder;
} robot_t;
#define VSPEED 0.4 // meters per second
#define WGAIN 1.0 // turn speed gain
#define SAFE_DIST 0/8 // meters
#define SAFE_ANGLE 0.3 // radians
int main( int argc, char* argv[] )
{
printf( "%s %s benchmarker\n", PACKAGE, VERSION );
if( argc < 3 )
{
puts( "Usage: stest <worldfile> <number of robots>" );
exit(0);
}
const int POPSIZE = atoi(argv[2] );
// initialize libstage
Stg::Init( &argc, &argv );
//StgWorld world;
StgWorldGui world(800, 700, "Stage Benchmark Program");
world.Load( argv[1] );
char namebuf[256];
robot_t* robots = new robot_t[POPSIZE];
for( int i=0; i<POPSIZE; i++ )
{
char* base = "r";
sprintf( namebuf, "%s%d", base, i );
robots[i].position = (StgModelPosition*)world.GetModel( namebuf );
assert(robots[i].position);
robots[i].position->Subscribe();
robots[i].laser = (StgModelLaser*)
robots[i].position->GetUnsubscribedModelOfType( "laser" );
assert(robots[i].laser);
robots[i].laser->Subscribe();
// robots[i].fiducial = (StgModelFiducial*)
// robots[i].position->GetUnsubscribedModelOfType( "fiducial" );
// assert(robots[i].fiducial);
// robots[i].fiducial->Subscribe();
robots[i].ranger = (StgModelRanger*)
robots[i].position->GetUnsubscribedModelOfType( "ranger" );
assert(robots[i].ranger);
robots[i].ranger->Subscribe();
// robots[i].blobfinder = (StgModelBlobfinder*)
// robots[i].position->GetUnsubscribedModelOfType( "blobfinder" );
// assert(robots[i].blobfinder);
// robots[i].blobfinder->Subscribe();
}
// start the clock
//world.Start();
//puts( "done" );
while( ! world.TestQuit() )
if( world.RealTimeUpdate() )
// if( world.Update() )
for( int i=0; i<POPSIZE; i++ )
{
//continue;
StgModelRanger* rgr = robots[i].ranger;
if( rgr->samples == NULL )
continue;
// compute the vector sum of the sonar ranges
double dx=0, dy=0;
for( unsigned int s=0; s< rgr->sensor_count; s++ )
{
double srange = rgr->samples[s];
dx += srange * cos( rgr->sensors[s].pose.a );
dy += srange * sin( rgr->sensors[s].pose.a );
}
if( dy == 0 )
continue;
if( dx == 0 )
continue;
assert( dy != 0 );
assert( dx != 0 );
double resultant_angle = atan2( dy, dx );
double forward_speed = 0.0;
double side_speed = 0.0;
double turn_speed = WGAIN * resultant_angle;
int forward = rgr->sensor_count/2 -1 ;
// if the front is clear, drive forwards
if( (rgr->samples[forward-1] > SAFE_DIST/5.0) &&
(rgr->samples[forward ] > SAFE_DIST) &&
(rgr->samples[forward+1] > SAFE_DIST/5.0) &&
(fabs( resultant_angle ) < SAFE_ANGLE) )
{
forward_speed = VSPEED;
}
// // send a command to the robot
// stg_velocity_t vel;
// bzero(&vel,sizeof(vel));
// vel.x = forward_speed;
// vel.y = side_speed;
// vel.z = 0;
// vel.a = turn_speed;
//printf( "robot %s [%.2f %.2f %.2f %.2f]\n",
//robots[i].position->Token(), vel.x, vel.y, vel.z, vel.a );
// uint32_t bcount=0;
//stg_blobfinder_blob_t* blobs = robots[i].blobfinder->GetBlobs(
&bcount );
//printf( "robot %s sees %u blobs\n", robots[i].blobfinder->Token(),
bcount );
robots[i].position->SetSpeed( forward_speed, side_speed, turn_speed );
}
delete[] robots;
exit( 0 );
}
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit