Revision: 6809
http://playerstage.svn.sourceforge.net/playerstage/?rev=6809&view=rev
Author: rtv
Date: 2008-07-07 21:29:12 -0700 (Mon, 07 Jul 2008)
Log Message:
-----------
moving things around
Added Paths:
-----------
code/stage/trunk/worlds/benchmark/benchmark.cc
Copied: code/stage/trunk/worlds/benchmark/benchmark.cc (from rev 6802,
code/stage/trunk/examples/ctrl/expand.cc)
===================================================================
--- code/stage/trunk/worlds/benchmark/benchmark.cc
(rev 0)
+++ code/stage/trunk/worlds/benchmark/benchmark.cc 2008-07-08 04:29:12 UTC
(rev 6809)
@@ -0,0 +1,121 @@
+/////////////////////////////////
+// File: stest.c
+// Desc: Stage library test program
+// Created: 2004.9.15
+// Author: Richard Vaughan <[EMAIL PROTECTED]>
+// CVS: $Id: stest.cc,v 1.3 2008-02-01 03:11:02 rtv Exp $
+// License: GPL
+/////////////////////////////////
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "stage.hh"
+using namespace Stg;
+
+typedef struct
+{
+ StgModelLaser* laser;
+ StgModelPosition* position;
+ StgModelRanger* ranger;
+} robot_t;
+
+#define VSPEED 0.5 // meters per second
+#define WGAIN 1.5 // turn speed gain
+#define SAFE_DIST 0.6 // meters
+#define SAFE_ANGLE 1 // radians
+
+// forward declare
+int RangerUpdate( StgModel* mod, robot_t* robot );
+
+// Stage calls this when the model starts up
+extern "C" int Init( StgModel* mod )
+{
+ robot_t* robot = new robot_t;
+ robot->position = (StgModelPosition*)mod;
+
+ // subscribe to the ranger, which we use for navigating
+ robot->ranger = (StgModelRanger*)mod->GetModel( "ranger:0" );
+ assert( robot->ranger );
+ robot->ranger->Subscribe();
+
+ // ask Stage to call into our ranger update function
+ robot->ranger->AddUpdateCallback( (stg_model_callback_t)RangerUpdate, robot
);
+
+ // subscribe to the laser, though we don't use it for navigating
+ //robot->laser = (StgModelLaser*)mod->GetModel( "laser:0" );
+ //assert( robot->laser );
+ //robot->laser->Subscribe();
+
+ return 0; //ok
+}
+
+int RangerUpdate( StgModel* mod, robot_t* robot )
+{
+ StgModelRanger* rgr = robot->ranger;
+
+ if( rgr->samples == NULL )
+ return 0;
+
+ // 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 );
+
+ //printf( "sensor %d angle= %.2f\n", s, rgr->sensors[s].pose.a
);
+ }
+
+ if( (dx == 0) || (dy == 0) )
+ return 0;
+
+ 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;
+
+ //printf( "resultant %.2f turn_speed %.2f\n", resultant_angle, turn_speed );
+
+ int forward = 0 ;
+ // if the front is clear, drive forwards
+ if( (rgr->samples[0] > SAFE_DIST) &&
+ (rgr->samples[1] > SAFE_DIST/2.0) &&
+ (rgr->samples[2] > SAFE_DIST/5.0) &&
+ (rgr->samples[15] > SAFE_DIST/2.0) &&
+ (rgr->samples[14] > SAFE_DIST/5.0) &&
+ (fabs( resultant_angle ) < SAFE_ANGLE) )
+ {
+ forward_speed = VSPEED;
+ }
+
+ //printf( "forward angle = %.2f\n", rgr->sensors[forward].pose.a );
+
+ // // 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
);
+
+ robot->position->SetSpeed( forward_speed, side_speed, turn_speed );
+
+ return 0;
+}
+
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
Studies have shown that voting for your favorite open source project,
along with a healthy diet, reduces your potential for chronic lameness
and boredom. Vote Now at http://www.sourceforge.net/community/cca08
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit