Update of /cvsroot/playerstage/code/stage/libstage
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30083
Modified Files:
Tag: opengl
canvas.cc stest.cc
Log Message:
swarm demo now works
Index: stest.cc
===================================================================
RCS file: /cvsroot/playerstage/code/stage/libstage/Attic/stest.cc,v
retrieving revision 1.1.2.14
retrieving revision 1.1.2.15
diff -C2 -d -r1.1.2.14 -r1.1.2.15
*** stest.cc 19 Nov 2007 07:40:41 -0000 1.1.2.14
--- stest.cc 19 Nov 2007 08:18:44 -0000 1.1.2.15
***************
*** 31,36 ****
} robot_t;
! const int POPSIZE = 10;
int main( int argc, char* argv[] )
--- 31,40 ----
} robot_t;
! const int POPSIZE = 100;
+ #define VSPEED 0.4 // meters per second
+ #define WGAIN 1.0 // turn speed gain
+ #define SAFE_DIST 0.35 // meters
+ #define SAFE_ANGLE 0.4 // radians
int main( int argc, char* argv[] )
***************
*** 79,93 ****
robots[i].obs = false;
! sprintf( namebuf, "MyWorld.position:%d", i );
robots[i].position = (StgModelPosition*)world.GetModel( namebuf );
assert(robots[i].position);
robots[i].position->Subscribe();
! sprintf( namebuf, "MyWorld.position:%d.laser:0", i );
! robots[i].laser = (StgModelLaser*)world.GetModel( namebuf );
! assert(robots[i].laser);
! robots[i].laser->Subscribe();
! sprintf( namebuf, "MyWorld.position:%d.ranger:0", i );
robots[i].ranger = (StgModelRanger*)world.GetModel( namebuf );
assert(robots[i].ranger);
--- 83,100 ----
robots[i].obs = false;
! char* base = "r";
! sprintf( namebuf, "%s%02d", base, i );
! printf( "finding robot \"%s\"\n", namebuf );
robots[i].position = (StgModelPosition*)world.GetModel( namebuf );
assert(robots[i].position);
robots[i].position->Subscribe();
! //sprintf( namebuf, "MyWorld.position:%d.laser:0", i );
! //robots[i].laser = (StgModelLaser*)world.GetModel( namebuf );
! //assert(robots[i].laser);
! //robots[i].laser->Subscribe();
! //sprintf( namebuf, "MyWorld.position:%d.ranger:0", i );
! sprintf( namebuf, "%s%02d.ranger:0", base, i );
robots[i].ranger = (StgModelRanger*)world.GetModel( namebuf );
assert(robots[i].ranger);
***************
*** 108,111 ****
--- 115,166 ----
while( world.RealTimeUpdate() )
// while( world.Update() )
+ for( int i=0; i<POPSIZE; i++ )
+ {
+
+ StgModelRanger* rgr = robots[i].ranger;
+
+ // compute the vector sum of the sonar ranges
+ double dx=0, dy=0;
+
+ int num_ranges = rgr->sensor_count;//spp[i]->GetCount();
+ for( int s=0; s<num_ranges; s++ )
+ {
+ //player_pose3d_t spose = spp[i]->GetPose(s);
+ double srange = rgr->sensors[s].range; //spp[i]->GetScan(s);
+
+ dx += srange * cos( rgr->sensors[s].pose.a );
+ dy += srange * sin( rgr->sensors[s].pose.a );
+ }
+
+ double resultant_angle = atan2( dy, dx );
+ //double resultant_magnitude = hypot( dy, dx );
+
+ double forward_speed = 0.0;
+ double side_speed = 0.0;
+ double turn_speed = WGAIN * resultant_angle;
+
+ int forward = num_ranges/2 -1 ;
+ // if the front is clear, drive forwards
+ if( (rgr->sensors[forward-1].range > SAFE_DIST) &&
+ (rgr->sensors[forward ].range > SAFE_DIST) &&
+ (rgr->sensors[forward+1].range > SAFE_DIST) &&
+ (fabs( resultant_angle ) < SAFE_ANGLE) )
+ {
+ forward_speed = VSPEED;
+ }
+
+ // send a command to the robot
+ stg_velocity_t vel;
+ vel.x = forward_speed;
+ vel.y = side_speed;
+ vel.z = 0;
+ vel.a = turn_speed;
+
+ robots[i].position->Do( forward_speed, side_speed, turn_speed );
+
+
+ //ppp[i]->SetSpeed( forward_speed, side_speed, turn_speed );
+ }
+
{
Index: canvas.cc
===================================================================
RCS file: /cvsroot/playerstage/code/stage/libstage/Attic/canvas.cc,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -C2 -d -r1.1.2.1 -r1.1.2.2
*** canvas.cc 19 Nov 2007 07:42:10 -0000 1.1.2.1
--- canvas.cc 19 Nov 2007 08:18:44 -0000 1.1.2.2
***************
*** 34,38 ****
rotating = false;
! showflags = STG_SHOW_CLOCK | STG_SHOW_DATA | STG_SHOW_BLOCKS |
STG_SHOW_GRID;
// start the timer that causes regular redraws
--- 34,39 ----
rotating = false;
! //showflags = STG_SHOW_CLOCK | STG_SHOW_DATA | STG_SHOW_BLOCKS |
STG_SHOW_GRID;
! showflags = STG_SHOW_CLOCK | STG_SHOW_BLOCKS | STG_SHOW_GRID;
// start the timer that causes regular redraws
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit