Revision: 8062
          http://playerstage.svn.sourceforge.net/playerstage/?rev=8062&view=rev
Author:   gbiggs
Date:     2009-07-21 03:47:16 +0000 (Tue, 21 Jul 2009)

Log Message:
-----------
Updated playerv to the new ranger interface

Modified Paths:
--------------
    code/player/trunk/server/drivers/camera/sphere/sphere_mixed.h
    code/player/trunk/server/drivers/camera/v4l/camerav4l.cc
    code/player/trunk/server/drivers/gps/gbxgarminacfr.cc
    code/player/trunk/server/drivers/joystick/linuxjoy.cc
    code/player/trunk/server/drivers/laser/pbs_driver.cc
    code/player/trunk/server/drivers/laser/sickLDMRS.cc
    code/player/trunk/server/drivers/laser/sicklms200.cc
    code/player/trunk/server/drivers/mixed/reb/reb.cc
    code/player/trunk/server/drivers/mixed/rflex/rflex.cc
    code/player/trunk/server/drivers/position/globalize/globalize.cc
    code/player/trunk/server/drivers/position/goto/goto.cc
    code/player/trunk/server/drivers/position/motionmind/motionmind.cc
    code/player/trunk/server/drivers/power/oceanserver.cc
    code/player/trunk/server/drivers/ranger/gbxsickacfr.cc
    code/player/trunk/server/drivers/vectormap/robotracker.cc
    code/player/trunk/server/drivers/wifi/aodv.cc
    code/player/trunk/server/drivers/wifi/iwspy.cc
    code/player/trunk/server/drivers/wifi/linuxwifi.cc
    code/player/trunk/utils/playerv/playerv.h
    code/player/trunk/utils/playerv/pv_dev_ranger.c

Modified: code/player/trunk/server/drivers/camera/sphere/sphere_mixed.h
===================================================================
--- code/player/trunk/server/drivers/camera/sphere/sphere_mixed.h       
2009-07-21 01:49:26 UTC (rev 8061)
+++ code/player/trunk/server/drivers/camera/sphere/sphere_mixed.h       
2009-07-21 03:47:16 UTC (rev 8062)
@@ -28,9 +28,6 @@
 #define PLAYER_CAMERA_FORMAT_RGB 6
 #define PLAYER_CAMERA_FORMAT_YUV420P 7
 
-// Time for timestamps
-extern PlayerTime *GlobalTime;
-
 
////////////////////////////////////////////////////////////////////////////////
 // The class for the driver
 class SphereDriver : public ThreadedDriver

Modified: code/player/trunk/server/drivers/camera/v4l/camerav4l.cc
===================================================================
--- code/player/trunk/server/drivers/camera/v4l/camerav4l.cc    2009-07-21 
01:49:26 UTC (rev 8061)
+++ code/player/trunk/server/drivers/camera/v4l/camerav4l.cc    2009-07-21 
03:47:16 UTC (rev 8062)
@@ -185,9 +185,6 @@
 #include "v4lcapture.h"  // For Gavin's libfg; should integrate this
 #include "ccvt.h"        // For YUV420P-->RGB conversion
 
-// Time for timestamps
-extern PlayerTime *GlobalTime;
-
 // Driver for detecting laser retro-reflectors.
 class CameraV4L : public ThreadedDriver
 {

Modified: code/player/trunk/server/drivers/gps/gbxgarminacfr.cc
===================================================================
--- code/player/trunk/server/drivers/gps/gbxgarminacfr.cc       2009-07-21 
01:49:26 UTC (rev 8061)
+++ code/player/trunk/server/drivers/gps/gbxgarminacfr.cc       2009-07-21 
03:47:16 UTC (rev 8062)
@@ -70,12 +70,6 @@
  - debug (int)
    - Default: 0
    - Debugging level of the underlying library to get verbose output.
- - pose (float 6-tuple: (m, m, m, rad, rad, rad))
-   - Default: [0.0 0.0 0.0 0.0 0.0 0.0]
-   - Pose (x, y, z, roll, pitch, yaw) of the laser relative to its parent 
object (e.g. the robot).
- - size (float 3-tuple: (m, m, m))
-   - Default: [0.0 0.0 0.0]
-   - Size of the laser in metres.
 
 @par Example
 
@@ -117,10 +111,6 @@
         // Configuration parameters
         gbxgarminacfr::Config _config;
         unsigned int _debug;
-        // Geometry
-        player_ranger_geom_t _geom;
-        player_pose3d_t _sensorPose;
-        player_bbox3d_t _sensorSize;
         // Data storage
         player_gps_data_t _gpsData;
         // The hardware device itself
@@ -151,22 +141,6 @@
     _config.ignoreUnknown = cf->ReadInt (section, "ignore_unknown", false);
     _config.device = cf->ReadString (section, "port", "/dev/ttyS0");
     _debug = cf->ReadBool (section, "debug", 0);
-    // Set up geometry information
-    _geom.pose.px = cf->ReadTupleLength (section, "pose", 0, 0.0f);
-    _geom.pose.py = cf->ReadTupleLength (section, "pose", 1, 0.0f);
-    _geom.pose.pz = cf->ReadTupleLength (section, "pose", 2, 0.0f);
-    _geom.pose.proll = cf->ReadTupleAngle (section, "pose", 3, 0.0f);
-    _geom.pose.ppitch = cf->ReadTupleAngle (section, "pose", 4, 0.0f);
-    _geom.pose.pyaw = cf->ReadTupleAngle (section, "pose", 5, 0.0f);
-    _geom.size.sw = cf->ReadTupleLength (section, "size", 0, 0.0f);
-    _geom.size.sl = cf->ReadTupleLength (section, "size", 1, 0.0f);
-    _geom.size.sh = cf->ReadTupleLength (section, "size", 2, 0.0f);
-    _geom.sensor_poses_count = 1;
-    _geom.sensor_poses = &_sensorPose;
-    memcpy (_geom.sensor_poses, &_geom.pose, sizeof (_geom.pose));
-    _geom.sensor_sizes_count = 1;
-    _geom.sensor_sizes = &_sensorSize;
-    memcpy (_geom.sensor_sizes, &_geom.size, sizeof (_geom.size));
 
     memset (&_gpsData, 0, sizeof (_gpsData));
 }

Modified: code/player/trunk/server/drivers/joystick/linuxjoy.cc
===================================================================
--- code/player/trunk/server/drivers/joystick/linuxjoy.cc       2009-07-21 
01:49:26 UTC (rev 8061)
+++ code/player/trunk/server/drivers/joystick/linuxjoy.cc       2009-07-21 
03:47:16 UTC (rev 8062)
@@ -223,8 +223,6 @@
 #include <replace/replace.h> // for poll(2)
 #include <libplayercore/playercore.h>
 
-extern PlayerTime *GlobalTime;
-
 #define XAXIS 1
 #define YAXIS 2
 #define YAWAXIS 0

Modified: code/player/trunk/server/drivers/laser/pbs_driver.cc
===================================================================
--- code/player/trunk/server/drivers/laser/pbs_driver.cc        2009-07-21 
01:49:26 UTC (rev 8061)
+++ code/player/trunk/server/drivers/laser/pbs_driver.cc        2009-07-21 
03:47:16 UTC (rev 8062)
@@ -93,8 +93,6 @@
 #include <libplayercore/globals.h>
 
 
-extern PlayerTime* GlobalTime;
-
 #define DWORD unsigned int
 #define DEFAULT_PBS_PORT "/dev/ttyS0"
 #define NUMBER_OF_RANGE_READINGS 121

Modified: code/player/trunk/server/drivers/laser/sickLDMRS.cc
===================================================================
--- code/player/trunk/server/drivers/laser/sickLDMRS.cc 2009-07-21 01:49:26 UTC 
(rev 8061)
+++ code/player/trunk/server/drivers/laser/sickLDMRS.cc 2009-07-21 03:47:16 UTC 
(rev 8062)
@@ -93,8 +93,6 @@
 
 #define MESSAGE_LEN 38U
 
-//extern PlayerTime *GlobalTime;
-
 ///////////////////////////////////////////////////////////////////////////////
 // The class for the driver
 class sickLDMRS : public ThreadedDriver

Modified: code/player/trunk/server/drivers/laser/sicklms200.cc
===================================================================
--- code/player/trunk/server/drivers/laser/sicklms200.cc        2009-07-21 
01:49:26 UTC (rev 8061)
+++ code/player/trunk/server/drivers/laser/sicklms200.cc        2009-07-21 
03:47:16 UTC (rev 8062)
@@ -215,7 +215,6 @@
 #include <libplayercore/playercore.h>
 #include <libplayerinterface/playerxdr.h>
 #include <replace/replace.h>
-extern PlayerTime* GlobalTime;
 
 #define DEFAULT_LASER_PORT "/dev/ttyS1"
 #define DEFAULT_LASER_CONNECT_RATE 9600

Modified: code/player/trunk/server/drivers/mixed/reb/reb.cc
===================================================================
--- code/player/trunk/server/drivers/mixed/reb/reb.cc   2009-07-21 01:49:26 UTC 
(rev 8061)
+++ code/player/trunk/server/drivers/mixed/reb/reb.cc   2009-07-21 03:47:16 UTC 
(rev 8062)
@@ -161,7 +161,6 @@
 #include <reb.h>
 
 #include <libplayercore/playercore.h>
-extern PlayerTime* GlobalTime;
 
 // so we can access the deviceTable and extract pointers to the sonar
 // and position objects

Modified: code/player/trunk/server/drivers/mixed/rflex/rflex.cc
===================================================================
--- code/player/trunk/server/drivers/mixed/rflex/rflex.cc       2009-07-21 
01:49:26 UTC (rev 8061)
+++ code/player/trunk/server/drivers/mixed/rflex/rflex.cc       2009-07-21 
03:47:16 UTC (rev 8062)
@@ -315,7 +315,6 @@
 
 #include <libplayercore/playercore.h>
 #include <libplayerinterface/playerxdr.h>
-extern PlayerTime* GlobalTime;
 
 extern int               RFLEX::joy_control;
 

Modified: code/player/trunk/server/drivers/position/globalize/globalize.cc
===================================================================
--- code/player/trunk/server/drivers/position/globalize/globalize.cc    
2009-07-21 01:49:26 UTC (rev 8061)
+++ code/player/trunk/server/drivers/position/globalize/globalize.cc    
2009-07-21 03:47:16 UTC (rev 8062)
@@ -73,8 +73,6 @@
 
 #define RQ_QUEUE_LEN 10
 
-extern PlayerTime * GlobalTime;
-
 class Globalize : public Driver
 {
   public:

Modified: code/player/trunk/server/drivers/position/goto/goto.cc
===================================================================
--- code/player/trunk/server/drivers/position/goto/goto.cc      2009-07-21 
01:49:26 UTC (rev 8061)
+++ code/player/trunk/server/drivers/position/goto/goto.cc      2009-07-21 
03:47:16 UTC (rev 8062)
@@ -127,8 +127,6 @@
 
 #define RQ_QUEUE_LEN 10
 
-extern PlayerTime * GlobalTime;
-
 class Goto : public Driver
 {
   public:

Modified: code/player/trunk/server/drivers/position/motionmind/motionmind.cc
===================================================================
--- code/player/trunk/server/drivers/position/motionmind/motionmind.cc  
2009-07-21 01:49:26 UTC (rev 8061)
+++ code/player/trunk/server/drivers/position/motionmind/motionmind.cc  
2009-07-21 03:47:16 UTC (rev 8062)
@@ -148,8 +148,6 @@
 // Register indexes for WRITE and WRITE STORE commands
 #define MM_REG_POSITION        0x00
 
-extern PlayerTime *GlobalTime;
-
 ///////////////////////////////////////////////////////////////////////////////
 // The class for the driver
 class MotionMind : public ThreadedDriver

Modified: code/player/trunk/server/drivers/power/oceanserver.cc
===================================================================
--- code/player/trunk/server/drivers/power/oceanserver.cc       2009-07-21 
01:49:26 UTC (rev 8061)
+++ code/player/trunk/server/drivers/power/oceanserver.cc       2009-07-21 
03:47:16 UTC (rev 8062)
@@ -103,10 +103,6 @@
         // Configuration parameters
         std::string _port;
         unsigned int _debug;
-        // Geometry
-        player_ranger_geom_t _geom;
-        player_pose3d_t _sensorPose;
-        player_bbox3d_t _sensorSize;
         // The hardware device itself
         std::auto_ptr<gbxsmartbatteryacfr::OceanServer> _device;
         // Objects to handle messages from the driver
@@ -130,22 +126,6 @@
     // Setup config object
     _port = cf->ReadString (section, "port", "/dev/ttyS0");
     _debug = cf->ReadBool (section, "debug", 0);
-    // Set up geometry information
-    _geom.pose.px = cf->ReadTupleLength (section, "pose", 0, 0.0f);
-    _geom.pose.py = cf->ReadTupleLength (section, "pose", 1, 0.0f);
-    _geom.pose.pz = cf->ReadTupleLength (section, "pose", 2, 0.0f);
-    _geom.pose.proll = cf->ReadTupleAngle (section, "pose", 3, 0.0f);
-    _geom.pose.ppitch = cf->ReadTupleAngle (section, "pose", 4, 0.0f);
-    _geom.pose.pyaw = cf->ReadTupleAngle (section, "pose", 5, 0.0f);
-    _geom.size.sw = cf->ReadTupleLength (section, "size", 0, 0.0f);
-    _geom.size.sl = cf->ReadTupleLength (section, "size", 1, 0.0f);
-    _geom.size.sh = cf->ReadTupleLength (section, "size", 2, 0.0f);
-    _geom.sensor_poses_count = 1;
-    _geom.sensor_poses = &_sensorPose;
-    memcpy (_geom.sensor_poses, &_geom.pose, sizeof (_geom.pose));
-    _geom.sensor_sizes_count = 1;
-    _geom.sensor_sizes = &_sensorSize;
-    memcpy (_geom.sensor_sizes, &_geom.size, sizeof (_geom.size));
 }
 
 OceanServer::~OceanServer (void)

Modified: code/player/trunk/server/drivers/ranger/gbxsickacfr.cc
===================================================================
--- code/player/trunk/server/drivers/ranger/gbxsickacfr.cc      2009-07-21 
01:49:26 UTC (rev 8061)
+++ code/player/trunk/server/drivers/ranger/gbxsickacfr.cc      2009-07-21 
03:47:16 UTC (rev 8062)
@@ -138,8 +138,8 @@
         unsigned int connectionDelay;
         // Geometry
         player_ranger_geom_t geom;
-        player_pose3d_t sensorPose;
-        player_bbox3d_t sensorSize;
+        player_pose3d_t elementPose;
+        player_bbox3d_t elementSize;
         // Data storage
         float *rawRanges;
         double *ranges;
@@ -190,12 +190,12 @@
     geom.size.sw = cf->ReadTupleLength (section, "size", 0, 0.0f);
     geom.size.sl = cf->ReadTupleLength (section, "size", 1, 0.0f);
     geom.size.sh = cf->ReadTupleLength (section, "size", 2, 0.0f);
-    geom.sensor_poses_count = 1;
-    geom.sensor_poses = &sensorPose;
-    memcpy (geom.sensor_poses, &geom.pose, sizeof (geom.pose));
-    geom.sensor_sizes_count = 1;
-    geom.sensor_sizes = &sensorSize;
-    memcpy (geom.sensor_sizes, &geom.size, sizeof (geom.size));
+    geom.element_poses_count = 1;
+    geom.element_poses = &elementPose;
+    memcpy (geom.element_poses, &geom.pose, sizeof (geom.pose));
+    geom.element_sizes_count = 1;
+    geom.element_sizes = &elementSize;
+    memcpy (geom.element_sizes, &geom.size, sizeof (geom.size));
 }
 
 GbxSickAcfr::~GbxSickAcfr (void)
@@ -331,7 +331,7 @@
         player_ranger_config_t rangerConfig;
         rangerConfig.min_angle = config.startAngle;
         rangerConfig.max_angle = config.startAngle + config.fieldOfView;
-        rangerConfig.resolution = config.fieldOfView / static_cast<double> 
(config.numberOfSamples - 1);
+        rangerConfig.angular_res = config.fieldOfView / static_cast<double> 
(config.numberOfSamples - 1);
         rangerConfig.max_range = config.maxRange;
         rangerConfig.range_res = 0.0f;
         rangerConfig.frequency = 0.0f;

Modified: code/player/trunk/server/drivers/vectormap/robotracker.cc
===================================================================
--- code/player/trunk/server/drivers/vectormap/robotracker.cc   2009-07-21 
01:49:26 UTC (rev 8061)
+++ code/player/trunk/server/drivers/vectormap/robotracker.cc   2009-07-21 
03:47:16 UTC (rev 8062)
@@ -130,8 +130,6 @@
 
 #define EPS 0.00000000000001
 
-extern PlayerTime * GlobalTime;
-
 class RoboTracker : Driver
 {
 public:

Modified: code/player/trunk/server/drivers/wifi/aodv.cc
===================================================================
--- code/player/trunk/server/drivers/wifi/aodv.cc       2009-07-21 01:49:26 UTC 
(rev 8061)
+++ code/player/trunk/server/drivers/wifi/aodv.cc       2009-07-21 03:47:16 UTC 
(rev 8062)
@@ -77,8 +77,6 @@
 
 #include <libplayercore/playercore.h>
 
-extern PlayerTime *GlobalTime;
-
 #define AODV_INFO_FILE "/proc/aodv/route_table"
 
 class Aodv : public Driver

Modified: code/player/trunk/server/drivers/wifi/iwspy.cc
===================================================================
--- code/player/trunk/server/drivers/wifi/iwspy.cc      2009-07-21 01:49:26 UTC 
(rev 8061)
+++ code/player/trunk/server/drivers/wifi/iwspy.cc      2009-07-21 03:47:16 UTC 
(rev 8062)
@@ -95,8 +95,6 @@
 
 #include <libplayercore/playercore.h>
 
-extern PlayerTime *GlobalTime;
-
 class Iwspy : public ThreadedDriver
 {
   public: Iwspy( ConfigFile *cf, int section);

Modified: code/player/trunk/server/drivers/wifi/linuxwifi.cc
===================================================================
--- code/player/trunk/server/drivers/wifi/linuxwifi.cc  2009-07-21 01:49:26 UTC 
(rev 8061)
+++ code/player/trunk/server/drivers/wifi/linuxwifi.cc  2009-07-21 03:47:16 UTC 
(rev 8062)
@@ -95,8 +95,6 @@
 
 #include <libplayercore/playercore.h>
 
-extern PlayerTime *GlobalTime;
-
 #define WIFI_INFO_FILE "/proc/net/wireless"
 
 #define WIFI_UPDATE_INTERVAL 1000 // in milliseconds

Modified: code/player/trunk/utils/playerv/playerv.h
===================================================================
--- code/player/trunk/utils/playerv/playerv.h   2009-07-21 01:49:26 UTC (rev 
8061)
+++ code/player/trunk/utils/playerv/playerv.h   2009-07-21 03:47:16 UTC (rev 
8062)
@@ -604,7 +604,6 @@
   rtk_menuitem_t *subscribe_item;
   rtk_menuitem_t *style_item;
   rtk_menuitem_t *intns_item;
-  rtk_menuitem_t *device_item;
   // Figure for drawing the scan
   rtk_fig_t **scan_fig;
   // Need to track this for creating figures
@@ -612,7 +611,7 @@
 
   // Properties from the device that may be necessary
   double start_angle;
-  double resolution;
+  double angular_res;
 
 } ranger_t;
 

Modified: code/player/trunk/utils/playerv/pv_dev_ranger.c
===================================================================
--- code/player/trunk/utils/playerv/pv_dev_ranger.c     2009-07-21 01:49:26 UTC 
(rev 8061)
+++ code/player/trunk/utils/playerv/pv_dev_ranger.c     2009-07-21 03:47:16 UTC 
(rev 8062)
@@ -48,9 +48,8 @@
   snprintf(label, sizeof(label), "ranger:%d (%s)", index, ranger->drivername);
   ranger->menu = rtk_menu_create_sub(mainwnd->device_menu, label);
   ranger->subscribe_item = rtk_menuitem_create(ranger->menu, "Subscribe", 1);
-  ranger->style_item = rtk_menuitem_create(ranger->menu, "Filled", 0);
+  ranger->style_item = rtk_menuitem_create(ranger->menu, "Filled", 1);
   ranger->intns_item = rtk_menuitem_create(ranger->menu, "Draw intensity 
data", 1);
-  ranger->device_item = rtk_menuitem_create(ranger->menu, "Singular", 1);
 
   // Set the initial menu state
   rtk_menuitem_check(ranger->subscribe_item, subscribe);
@@ -70,7 +69,7 @@
 
   if (ranger->scan_fig != NULL)
   {
-    for (ii = 0; ii < ranger->proxy->sensor_count; ii++)
+    for (ii = 0; ii < ranger->proxy->element_count; ii++)
       rtk_fig_destroy(ranger->scan_fig[ii]);
     free(ranger->scan_fig);
     ranger->scan_fig = NULL;
@@ -90,7 +89,6 @@
   rtk_menuitem_destroy(ranger->subscribe_item);
   rtk_menuitem_destroy(ranger->style_item);
   rtk_menuitem_destroy(ranger->intns_item);
-  rtk_menuitem_destroy(ranger->device_item);
   rtk_menu_destroy(ranger->menu);
 
   free(ranger->drivername);
@@ -121,29 +119,45 @@
       {
         PRINT_ERR1("libplayerc error: %s", playerc_error_str());
         ranger->start_angle = 0.0f;
-        ranger->resolution = 0.0f;
+        ranger->angular_res = 0.0f;
       }
       else
       {
         ranger->start_angle = ranger->proxy->min_angle;
-        ranger->resolution = ranger->proxy->resolution;
+        ranger->angular_res = ranger->proxy->angular_res;
       }
 
       // Delete any current figures
       ranger_delete_figures(ranger);
       // Create the figures
-      if ((ranger->scan_fig = malloc(ranger->proxy->sensor_count * 
sizeof(rtk_fig_t*))) == NULL )
+      if (ranger->proxy->element_count == 1)
       {
-        PRINT_ERR1("Failed to allocate memory for %d figures to display 
ranger", ranger->proxy->sensor_count);
-        return;
+        if ((ranger->scan_fig = malloc(sizeof(rtk_fig_t*))) == NULL )
+        {
+          PRINT_ERR("Failed to allocate memory for a figure to display 
ranger");
+          return;
+        }
+        ranger->scan_fig[0] = rtk_fig_create(ranger->mainwnd->canvas, 
ranger->mainwnd->robot_fig, 1);
+        rtk_fig_origin(ranger->scan_fig[0],
+                       ranger->proxy->device_pose.px,
+                       ranger->proxy->device_pose.py,
+                       ranger->proxy->device_pose.pyaw);
       }
-      for (ii = 0; ii < ranger->proxy->sensor_count; ii++)
+      else
       {
-        ranger->scan_fig[ii] = rtk_fig_create(ranger->mainwnd->canvas, 
ranger->mainwnd->robot_fig, 1);
-        rtk_fig_origin(ranger->scan_fig[ii],
-                       ranger->proxy->sensor_poses[ii].px,
-                       ranger->proxy->sensor_poses[ii].py,
-                       ranger->proxy->sensor_poses[ii].pyaw);
+        if ((ranger->scan_fig = malloc(ranger->proxy->element_count * 
sizeof(rtk_fig_t*))) == NULL )
+        {
+          PRINT_ERR1("Failed to allocate memory for %d figures to display 
ranger", ranger->proxy->element_count);
+          return;
+        }
+        for (ii = 0; ii < ranger->proxy->element_count; ii++)
+        {
+          ranger->scan_fig[ii] = rtk_fig_create(ranger->mainwnd->canvas, 
ranger->mainwnd->robot_fig, 1);
+          rtk_fig_origin(ranger->scan_fig[ii],
+                         ranger->proxy->element_poses[ii].px,
+                         ranger->proxy->element_poses[ii].py,
+                         ranger->proxy->element_poses[ii].pyaw);
+        }
       }
     }
   }
@@ -172,67 +186,52 @@
     // deleted above.  I don't know whether commenting it out is the right
     // thing to do - BPG.
     /*
-    for (ii = 0; ii < ranger->proxy->sensor_count; ii++)
+    for (ii = 0; ii < ranger->proxy->element_count; ii++)
       rtk_fig_show(ranger->scan_fig[ii], 0);
       */
   }
 }
 
-// Converts a range reading into a point in the CS of the ranger device
-// based on the pose of the sensor the reading is likely to belong to
-void range_to_point(ranger_t *ranger, int index, int sensor_num, double angle, 
double *point)
-{
-  // Point position = point from range -> rotate by range angle// -> rotate by 
sensor yaw -> translate by sensor position
-  point[0] = ranger->proxy->ranges[index] * cos(angle);// + 
ranger->proxy->sensor_poses[sensor_num].pyaw) + 
ranger->proxy->sensor_poses[sensor_num].px;
-  point[1] = ranger->proxy->ranges[index] * sin(angle);// + 
ranger->proxy->sensor_poses[sensor_num].pyaw) + 
ranger->proxy->sensor_poses[sensor_num].py;
-}
-
 // Draw the ranger scan
 void ranger_draw(ranger_t *ranger)
 {
-  int ii = 0, jj = 0;
-  int point_count;
+  int ii = 0;
   double point1[2], point2[2]; 
   double (*points)[2];
-  double current_angle = 0.0f, temp = 0.0f;
-  unsigned int ranges_per_sensor = 0;
+  double temp = 0.0;
 
-  // Drawing type depends on the selected sensor type
+  // Drawing type depends on the assumed sensor type
   // Singular sensors (e.g. sonar sensors):
-  //   Draw a cone for the first range scan of each sensor
+  //   Draw a cone for each range scan
   // Non-singular sensors (e.g. laser scanner):
   //   Draw the edge of the scan and empty space
 
-  // Calculate the number of ranges per sensor
-  if (ranger->proxy->sensor_count == 0)
-    ranges_per_sensor = ranger->proxy->ranges_count;
-  else
-    ranges_per_sensor = ranger->proxy->ranges_count / 
ranger->proxy->sensor_count;
-
-  if (rtk_menuitem_ischecked(ranger->device_item))
+  if (ranger->proxy->element_count > 1)
   {
     // Draw sonar-like
     points = calloc(3, sizeof(double)*2);
     temp = 20.0f * M_PI / 180.0f / 2.0f;
-    for (ii = 0; ii < ranger->proxy->sensor_count; ii++)
+    for (ii = 0; ii < ranger->proxy->ranges_count; ii++)
     {
       rtk_fig_show(ranger->scan_fig[ii], 1);
       rtk_fig_clear(ranger->scan_fig[ii]);
       rtk_fig_color_rgb32(ranger->scan_fig[ii], COLOR_SONAR_SCAN);
 
-      // Draw a cone for the first range for each sensor
-      // Assume the range is straight ahead (ignore min_angle and resolution 
properties)
+      // Draw a cone for each range
+      // Assume the range is straight ahead (ignore min_angle and angular_res 
properties)
       points[0][0] = 0.0f;
       points[0][1] = 0.0f;
-      points[1][0] = ranger->proxy->ranges[ii * ranges_per_sensor] * 
cos(-temp);
-      points[1][1] = ranger->proxy->ranges[ii * ranges_per_sensor] * 
sin(-temp);
-      points[2][0] = ranger->proxy->ranges[ii * ranges_per_sensor] * cos(temp);
-      points[2][1] = ranger->proxy->ranges[ii * ranges_per_sensor] * sin(temp);
+      points[1][0] = ranger->proxy->ranges[ii] * cos(-temp);
+      points[1][1] = ranger->proxy->ranges[ii] * sin(-temp);
+      points[2][0] = ranger->proxy->ranges[ii] * cos(temp);
+      points[2][1] = ranger->proxy->ranges[ii] * sin(temp);
       rtk_fig_polygon(ranger->scan_fig[ii], 0, 0, 0, 3, points, 1);
 
       // Draw the sensor itself
       rtk_fig_color_rgb32(ranger->scan_fig[ii], COLOR_LASER);
-      rtk_fig_rectangle(ranger->scan_fig[ii], 0, 0, 0, 
ranger->proxy->sensor_sizes[ii].sw, ranger->proxy->sensor_sizes[ii].sl, 0);
+      rtk_fig_rectangle(ranger->scan_fig[ii], 0, 0, 0,
+                        ranger->proxy->element_sizes[ii].sw,
+                        ranger->proxy->element_sizes[ii].sl, 0);
     }
     free(points);
     points=NULL;
@@ -243,92 +242,75 @@
     if (rtk_menuitem_ischecked(ranger->style_item))
     {
       // Draw each sensor in turn
-      points = calloc(ranger->proxy->sensor_count, sizeof(double)*2);
-      for (ii = 0; ii < ranger->proxy->sensor_count; ii++)
-      {
-        rtk_fig_show(ranger->scan_fig[ii], 1);
-        rtk_fig_clear(ranger->scan_fig[ii]);
+      points = calloc(ranger->proxy->ranges_count + 1, sizeof(double)*2);
+      rtk_fig_show(ranger->scan_fig[0], 1);
+      rtk_fig_clear(ranger->scan_fig[0]);
 
-        // Draw empty space
-        points[0][0] = ranger->proxy->sensor_poses[ii].px;
-        points[0][1] = ranger->proxy->sensor_poses[ii].py;
-        point_count = 1;
-        current_angle = ranger->start_angle;
-        // Loop over the ranges
-        for (jj = ii * ranges_per_sensor; jj < (ii + 1) * ranges_per_sensor; 
jj++)
-        {
-          range_to_point(ranger, jj, ii, current_angle, points[point_count]);
-          // Move round to the angle of the next range
-          current_angle += ranger->resolution;
-          point_count++;
-        }
-        rtk_fig_color_rgb32(ranger->scan_fig[ii], COLOR_LASER_EMP);
-        rtk_fig_polygon(ranger->scan_fig[ii], 0, 0, 0, point_count, points, 1);
-
-        // Draw occupied space
-        rtk_fig_color_rgb32(ranger->scan_fig[ii], COLOR_LASER_OCC);
-        current_angle = ranger->start_angle;
-        for (jj = ii * ranges_per_sensor; jj < (ii + 1) * ranges_per_sensor; 
jj++)
-        {
-          range_to_point(ranger, jj, ii, current_angle - ranger->resolution, 
point1);
-          range_to_point(ranger, jj, ii, current_angle + ranger->resolution, 
point2);
-          rtk_fig_line(ranger->scan_fig[ii], point1[0], point1[1], point2[0], 
point2[1]);
-          current_angle += ranger->resolution;
-        }
+      // Draw empty space
+      points[0][0] = 0.0;
+      points[0][1] = 0.0;
+      for (ii = 0; ii < ranger->proxy->ranges_count; ii++)
+      {
+        points[ii + 1][0] = ranger->proxy->points[ii].px;
+        points[ii + 1][1] = ranger->proxy->points[ii].py;
       }
+      rtk_fig_color_rgb32(ranger->scan_fig[0], COLOR_LASER_EMP);
+      rtk_fig_polygon(ranger->scan_fig[0], 0, 0, 0,
+                      ranger->proxy->ranges_count + 1, points, 1);
       free(points);
       points = NULL;
+
+      // Draw occupied space
+      rtk_fig_color_rgb32(ranger->scan_fig[0], COLOR_LASER_OCC);
+      for (ii = 1; ii < ranger->proxy->ranges_count; ii++)
+      {
+        point1[0] = ranger->proxy->points[ii - 1].px;
+        point1[1] = ranger->proxy->points[ii - 1].py;
+        point2[0] = ranger->proxy->points[ii].px;
+        point2[1] = ranger->proxy->points[ii].py;
+        rtk_fig_line(ranger->scan_fig[0], point1[0], point1[1], point2[0], 
point2[1]);
+      }
     }
     else
     {
-      // Draw a range scan for each individual sensor in the device
-      for (ii = 0; ii < ranger->proxy->sensor_count; ii++)
-      {
-        rtk_fig_show(ranger->scan_fig[ii], 1);
-        rtk_fig_clear(ranger->scan_fig[ii]);
+      rtk_fig_show(ranger->scan_fig[0], 1);
+      rtk_fig_clear(ranger->scan_fig[0]);
 
-        rtk_fig_color_rgb32(ranger->scan_fig[ii], COLOR_LASER_OCC);
-        current_angle = ranger->start_angle;
-        // Get the first point
-        range_to_point(ranger, ii * ranges_per_sensor, ii, 
ranger->start_angle, point1);
-        // Loop over the rest of the ranges
-        for (jj = ii * ranges_per_sensor + 1; jj < (ii + 1) * 
ranges_per_sensor; jj++)
-        {
-          range_to_point(ranger, jj, ii, current_angle, point2);
-          // Draw a line from point 1 (previous point) to point 2 (current 
point)
-          rtk_fig_line(ranger->scan_fig[ii], point1[0], point1[1], point2[0], 
point2[1]);
-          point1[0] = point2[0];
-          point1[1] = point2[1];
-          // Move round to the angle of the next range
-          current_angle += ranger->resolution;
-        }
+      rtk_fig_color_rgb32(ranger->scan_fig[0], COLOR_LASER_OCC);
+      // Get the first point
+      point1[0] = ranger->proxy->points[0].px;
+      point1[1] = ranger->proxy->points[0].py;
+      // Loop over the rest of the ranges
+      for (ii = 1; ii < ranger->proxy->ranges_count; ii++)
+      {
+        point2[0] = ranger->proxy->points[ii].px;
+        point2[1] = ranger->proxy->points[ii].py;
+        // Draw a line from point 1 (previous point) to point 2 (current point)
+        rtk_fig_line(ranger->scan_fig[0], point1[0], point1[1], point2[0], 
point2[1]);
+        point1[0] = point2[0];
+        point1[1] = point2[1];
       }
     }
 
-    // For each sensor...
-    for (ii = 0; ii < ranger->proxy->sensor_count; ii++)
+    if (rtk_menuitem_ischecked(ranger->intns_item))
     {
-      if (rtk_menuitem_ischecked(ranger->intns_item))
+      // Draw an intensity scan
+      if (ranger->proxy->intensities_count > 0)
       {
-        // Draw an intensity scan
-        if (ranger->proxy->intensities_count > 0)
+        for (ii = 0; ii < ranger->proxy->intensities_count; ii++)
         {
-          current_angle = ranger->start_angle;
-          for (jj = ii * ranges_per_sensor; jj < (ii + 1) * ranges_per_sensor; 
jj++)
+          if (ranger->proxy->intensities[ii] != 0)
           {
-            if (ranger->proxy->intensities[0] != 0)
-            {
-              range_to_point(ranger, jj, ii, current_angle, point1);
-              rtk_fig_rectangle(ranger->scan_fig[ii], point1[0], point1[1], 0, 
0.05, 0.05, 1);
-            }
-            current_angle += ranger->resolution;
+            point1[0] = ranger->proxy->points[ii].px;
+            point1[1] = ranger->proxy->points[ii].py;
+            rtk_fig_rectangle(ranger->scan_fig[0], point1[0], point1[1], 0, 
0.05, 0.05, 1);
           }
         }
       }
-
-      // Draw the sensor itself
-      rtk_fig_color_rgb32(ranger->scan_fig[ii], COLOR_LASER);
-      rtk_fig_rectangle(ranger->scan_fig[ii], 0, 0, 0, 
ranger->proxy->sensor_sizes[ii].sw, ranger->proxy->sensor_sizes[ii].sl, 0);
     }
+
+    // Draw the sensor itself
+    rtk_fig_color_rgb32(ranger->scan_fig[0], COLOR_LASER);
+    rtk_fig_rectangle(ranger->scan_fig[0], 0, 0, 0, 
ranger->proxy->device_size.sw, ranger->proxy->device_size.sl, 0);
   }
 }


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time, 
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit

Reply via email to