Here's the code that I'm having problems with. I've trimmed it down to what I think is the bare essentials rather than spamming the list with tons of code.

relevant part of the .cfg file

   driver
   (
      name "stage"
      provides ["position2d:0" "sonar:0" "blobfinder:0"]
      model "robot1"
   )

relevant part of the .world file

   include "basic-epuck.inc"
   epuck
   (
      name "robot1"
      color "red"
      pose [-6.5 -6.5 45]
      blobfinder_return 1
   )


basic-epuck.inc

   define epuck_ir ranger
   (
     scount 8

     spose[0] [ 0.22 0.075 0 ]
     spose[1] [ 0.2 0.2 45 ]
     spose[2] [ 0.0 0.23 90 ]
     spose[3] [ -0.2 0.2 150 ]
     spose[4] [ -0.2 -0.2 -150 ]
     spose[5] [ 0.0 -0.23 -90 ]
     spose[6] [ 0.2 -0.2 -45 ]
     spose[7] [ 0.22 -0.075 0 ]
       
     sview [0 5.0 15]
     ssize [0.02 0.005]
   )

   define epuck position
   (
     size [0.4 0.4]
     origin [0.0 0.0 0.0]
     gui_nose 1
     mass 0.6
   
     polygons 1
     polygon[0].points 8
     polygon[0].point[0] [  -0.2  0.2 ]
     polygon[0].point[1] [  0.0  0.28 ]
     polygon[0].point[2] [  0.2  0.2 ]
     polygon[0].point[3] [  0.28  0.0 ]
     polygon[0].point[4] [  0.2 -0.2 ]
     polygon[0].point[5] [  0.0 -0.28 ]
     polygon[0].point[6] [  -0.2 -0.2 ]
     polygon[0].point[7] [  -0.28 0.0 ]

     drive "diff"

     epuck_ir()

     ptz
     (
        blobfinder
        (
            channel_count 6
            channels [ "red" "blue" "green" "cyan" "yellow" "magenta" ]
            image [100 100]
            range_max 6.0
            ptz [0 0 80.0]
            size [1.0 1.0]
        )
     )
   )

Seriously trimmed client control code

   int main(int argc, char **argv)
   {
     parse_args(argc,argv);
     try
    {
       using namespace PlayerCc;
       PlayerClient robot (gHostname, gPort);
       BlobfinderProxy bp(&robot, gIndex);
       int iBlobCount, iLoop;
       int iCentreX, iCentreY;

       std::cout << robot << std::endl;

        // go into read-think-act loop
       for(;;)
       {
          robot.Read();
          iCentreX = (bp.GetWidth())/2;
          iCentreY = (bp.GetHeight())/2;
          iBlobCount = bp.GetCount();
       }
    }
   }

  To restate my problem - the above code works differently under different installations. Under the robotos setup (2.0.4 I think) it works fine. Under 2.1 it compiles and runs but the blobfinder doesn't ever detect any blobs (ie iCentreX & iCentreY get correct values but iBlobCount always gets 0) and the blobfinder viewer doesn't show on screen. Under 3.0 trying to launching the simulation fails.

  I was wondering if the code around the blobfinder had been tightened up over the versions ? Have I written sloppy code that works under 2.0 that needs to be tighter under 2.1 & 3.0 ? Or is it more likely to be some problem with my player/stage installation ? All the installations work with my code if I remove the blobfinder entirely so that suggests to me the installations were okay.

  So where am I going wrong ?

Thanks

Andy