Revision: 8253
http://playerstage.svn.sourceforge.net/playerstage/?rev=8253&view=rev
Author: gbiggs
Date: 2009-09-08 01:59:32 +0000 (Tue, 08 Sep 2009)
Log Message:
-----------
Applied patch #2847832: Extended map interface
Modified Paths:
--------------
code/player/trunk/client_libs/libplayerc/dev_map.c
code/player/trunk/client_libs/libplayerc/playerc.h
code/player/trunk/client_libs/libplayerc++/playerc++.h
code/player/trunk/libplayerinterface/interfaces/042_map.def
code/player/trunk/server/drivers/localization/amcl/amcl_fiducial.cc
code/player/trunk/server/drivers/localization/amcl/amcl_laser.cc
code/player/trunk/server/drivers/localization/amcl/map/map.h
code/player/trunk/server/drivers/map/mapfile.cc
code/player/trunk/server/drivers/map/maptransform.cc
code/player/trunk/server/drivers/mixed/mricp/src/mricp_driver.cpp
code/player/trunk/server/drivers/vectormap/vec2map.cc
code/player/trunk/utils/playerv/pv_dev_map.c
Modified: code/player/trunk/client_libs/libplayerc/dev_map.c
===================================================================
--- code/player/trunk/client_libs/libplayerc/dev_map.c 2009-09-08 01:51:40 UTC
(rev 8252)
+++ code/player/trunk/client_libs/libplayerc/dev_map.c 2009-09-08 01:59:32 UTC
(rev 8253)
@@ -184,6 +184,8 @@
}
#endif
+ device->data_range = data_resp->data_range;
+
// copy the map data
for(j=0;j<sj;j++)
{
Modified: code/player/trunk/client_libs/libplayerc/playerc.h
===================================================================
--- code/player/trunk/client_libs/libplayerc/playerc.h 2009-09-08 01:51:40 UTC
(rev 8252)
+++ code/player/trunk/client_libs/libplayerc/playerc.h 2009-09-08 01:59:32 UTC
(rev 8253)
@@ -2352,9 +2352,12 @@
/** Map origin, in meters (i.e., the real-world coordinates of cell 0,0)*/
double origin[2];
- /** Occupancy for each cell (empty = -1, unknown = 0, occupied = +1) */
+ /** Value for each cell (-range <= EMPTY < 0, unknown = 0, 0 < OCCUPIED <=
range) */
+ int8_t data_range;
+
+ /** Occupancy for each cell */
char* cells;
-
+
/** Vector-based version of the map (call playerc_map_get_vector() to
* fill this in). */
double vminx, vminy, vmaxx, vmaxy;
Modified: code/player/trunk/client_libs/libplayerc++/playerc++.h
===================================================================
--- code/player/trunk/client_libs/libplayerc++/playerc++.h 2009-09-08
01:51:40 UTC (rev 8252)
+++ code/player/trunk/client_libs/libplayerc++/playerc++.h 2009-09-08
01:59:32 UTC (rev 8253)
@@ -1457,7 +1457,10 @@
double GetOriginX() const { return GetVar(mDevice->origin[0]); };
double GetOriginY() const { return GetVar(mDevice->origin[1]); };
- /// Occupancy for each cell (empty = -1, unknown = 0, occupied = +1)
+ /// Range of grid data (default: empty = -1, unknown = 0, occupied = +1)
+ int8_t GetDataRange() const { return GetVar(mDevice->data_range); };
+
+ /// Occupancy for each cell
void GetMap(int8_t* aMap) const
{
return GetVarByRef(reinterpret_cast<int8_t*>(mDevice->cells),
Modified: code/player/trunk/libplayerinterface/interfaces/042_map.def
===================================================================
--- code/player/trunk/libplayerinterface/interfaces/042_map.def 2009-09-08
01:51:40 UTC (rev 8252)
+++ code/player/trunk/libplayerinterface/interfaces/042_map.def 2009-09-08
01:59:32 UTC (rev 8253)
@@ -61,7 +61,9 @@
uint32_t height;
/** The number of cells */
uint32_t data_count;
- /** Cell occupancy value (empty = -1, unknown = 0, occupied = +1). */
+ /** Maximum value for each cell (-range <= EMPTY < 0, unknown = 0, 0 <
OCCUPIED <= range) */
+ int8_t data_range;
+ /** Cell occupancy value */
int8_t *data;
} player_map_data_t;
Modified: code/player/trunk/server/drivers/localization/amcl/amcl_fiducial.cc
===================================================================
--- code/player/trunk/server/drivers/localization/amcl/amcl_fiducial.cc
2009-09-08 01:51:40 UTC (rev 8252)
+++ code/player/trunk/server/drivers/localization/amcl/amcl_fiducial.cc
2009-09-08 01:59:32 UTC (rev 8253)
@@ -215,6 +215,8 @@
this->map->size_x = ntohl(info.width);
this->map->size_y = ntohl(info.height);
+ this->map->data_range = 1;
+
// allocate space for map cells
assert(this->map->cells = (map_cell_t*)malloc(sizeof(map_cell_t) *
this->map->size_x *
Modified: code/player/trunk/server/drivers/localization/amcl/amcl_laser.cc
===================================================================
--- code/player/trunk/server/drivers/localization/amcl/amcl_laser.cc
2009-09-08 01:51:40 UTC (rev 8252)
+++ code/player/trunk/server/drivers/localization/amcl/amcl_laser.cc
2009-09-08 01:59:32 UTC (rev 8253)
@@ -180,6 +180,7 @@
this->map->scale = info->scale;
this->map->size_x = info->width;
this->map->size_y = info->height;
+ this->map->data_range = 1;
delete msg;
Modified: code/player/trunk/server/drivers/localization/amcl/map/map.h
===================================================================
--- code/player/trunk/server/drivers/localization/amcl/map/map.h
2009-09-08 01:51:40 UTC (rev 8252)
+++ code/player/trunk/server/drivers/localization/amcl/map/map.h
2009-09-08 01:59:32 UTC (rev 8253)
@@ -77,6 +77,8 @@
// Map dimensions (number of cells)
int size_x, size_y;
+ int8_t data_range;
+
// The map data, stored as a grid
map_cell_t *cells;
Modified: code/player/trunk/server/drivers/map/mapfile.cc
===================================================================
--- code/player/trunk/server/drivers/map/mapfile.cc 2009-09-08 01:51:40 UTC
(rev 8252)
+++ code/player/trunk/server/drivers/map/mapfile.cc 2009-09-08 01:59:32 UTC
(rev 8253)
@@ -256,6 +256,7 @@
occ = color_avg / 255.0;
else
occ = (255 - color_avg) / 255.0;
+
if(occ > 0.95)
this->mapdata[MAP_IDX(this,i,this->size_y - j - 1)] = +1;
else if(occ < 0.1)
@@ -336,6 +337,7 @@
sj = mapresp->height = mapreq->height;
mapresp->data_count = mapresp->width * mapresp->height;
mapresp->data = new int8_t [mapresp->data_count];
+ mapresp->data_range = 1;
// Grab the pixels from the map
for(j = 0; j < sj; j++)
{
Modified: code/player/trunk/server/drivers/map/maptransform.cc
===================================================================
--- code/player/trunk/server/drivers/map/maptransform.cc 2009-09-08
01:51:40 UTC (rev 8252)
+++ code/player/trunk/server/drivers/map/maptransform.cc 2009-09-08
01:59:32 UTC (rev 8253)
@@ -226,6 +226,7 @@
PLAYER_MSG4(9,"Block Requested is: %d,%d + %d,%d",oi,oj,si,sj);
resp_data.data_count = map_data.width * map_data.height;
resp_data.data = new int8_t [resp_data.data_count];
+ resp_data.data_range = map_data.data_range;
// Grab the pixels from the map
for(j = 0; j < sj; j++)
Modified: code/player/trunk/server/drivers/mixed/mricp/src/mricp_driver.cpp
===================================================================
--- code/player/trunk/server/drivers/mixed/mricp/src/mricp_driver.cpp
2009-09-08 01:51:40 UTC (rev 8252)
+++ code/player/trunk/server/drivers/mixed/mricp/src/mricp_driver.cpp
2009-09-08 01:59:32 UTC (rev 8253)
@@ -1023,6 +1023,7 @@
}
}
mapresp.data_count = mapresp.width * mapresp.height;
+ mapresp.data_range = 1;
cout<<"\n --->>> Columns="<<oi<<" Rows="<<oj<<" width="<<si<<"
height="<<sj;
this->Publish(this->device_addr,
resp_queue,PLAYER_MSGTYPE_RESP_ACK,PLAYER_MAP_REQ_GET_DATA,(void*)(&mapresp),
sizeof(mapresp), NULL);
free(mapresp.data);
Modified: code/player/trunk/server/drivers/vectormap/vec2map.cc
===================================================================
--- code/player/trunk/server/drivers/vectormap/vec2map.cc 2009-09-08
01:51:40 UTC (rev 8252)
+++ code/player/trunk/server/drivers/vectormap/vec2map.cc 2009-09-08
01:59:32 UTC (rev 8253)
@@ -555,6 +555,7 @@
}
for (ii = 0; ii < (map_data_request.height); ii++) memcpy(map_data.data
+ (ii * (map_data_request.width)), cells + (ii * width) + map_data_request.col,
map_data_request.width);
}
+ map_data.data_range=1;
this->Publish(this->map_addr,
resp_queue,
Modified: code/player/trunk/utils/playerv/pv_dev_map.c
===================================================================
--- code/player/trunk/utils/playerv/pv_dev_map.c 2009-09-08 01:51:40 UTC
(rev 8252)
+++ code/player/trunk/utils/playerv/pv_dev_map.c 2009-09-08 01:59:32 UTC
(rev 8253)
@@ -145,14 +145,14 @@
rtk_fig_clear(map->fig);
puts( "map draw" );
+
+ rtk_fig_color(map->fig, 0.5, 0.5, 0.5 );
+ rtk_fig_rectangle(map->fig,
+ 0,0,0,
+ map->proxy->width * scale,
+ map->proxy->height * scale,
+ 1 );
- rtk_fig_color_rgb32(map->fig, 0xFF0000 );
- rtk_fig_rectangle(map->fig,
- 0,0,0,
- map->proxy->width * scale,
- map->proxy->height * scale,
- 0 );
-
// TODO - combine contiguous cells to minimize the number of
// rectangles we have to draw - performance is pretty nasty right
// now on big maps.
@@ -160,36 +160,18 @@
for( x=0; x<map->proxy->width; x++ )
for( y=0; y<map->proxy->height; y++ )
{
- switch( map->proxy->cells[ x + y * map->proxy->width ] )
- {
- case -1:
- // empty: draw nothing
- break;
-
- case 0:
- // unknown: draw grey square
- rtk_fig_color_rgb32(map->fig, 0x808080 );
- rtk_fig_rectangle(map->fig,
- (x - map->proxy->width/2.0) * scale + scale/2.0,
- (y - map->proxy->height/2.0) * scale + scale/2.0,
- 0,
- scale, scale, 1);
- break;
-
- case +1:
- // occupied: draw black square
- rtk_fig_color_rgb32(map->fig, 0x0 );
- rtk_fig_rectangle(map->fig,
- (x - map->proxy->width/2.0) * scale + scale/2.0,
- (y - map->proxy->height/2.0) * scale + scale/2.0,
- 0,
- scale, scale, 1);
- break;
-
- default:
- puts( "Warning: invalid occupancy value." );
- break;
- }
+ int8_t val = map->proxy->cells[ x + y * map->proxy->width ];
+ if (val == 0)
+ continue;
+ double color = (double)val/map->proxy->data_range; // scale to[-1,1]
+ color *= -1; //flip sign for coloring occupied to black
+ color = (color+1)/2.0; // scale to [0,1]
+ rtk_fig_color(map->fig, color, color, color );
+ rtk_fig_rectangle(map->fig,
+ (x - map->proxy->width/2.0) * scale + scale/2.0,
+ (y - map->proxy->height/2.0) * scale + scale/2.0,
+ 0,
+ scale, scale, 1);
}
return;
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit