64 player_ranger_data_range_t prange;
65 memset( &prange, 0,
sizeof(prange) );
67 player_ranger_data_intns_t pintens;
68 memset( &pintens, 0,
sizeof(pintens) );
70 std::vector<double> rv, iv;
72 if( sensors.size() == 1 )
74 prange.ranges_count = sensors[0].ranges.size();
75 prange.ranges = prange.ranges_count ? &sensors[0].ranges[0] : NULL;
77 pintens.intensities_count = sensors[0].intensities.size();
78 pintens.intensities = pintens.intensities_count ? &sensors[0].intensities[0] : NULL;
84 if( it->ranges.size() )
85 rv.push_back( it->ranges[0] );
87 if( it->intensities.size() )
88 iv.push_back( it->intensities[0] );
91 prange.ranges_count = rv.size();
92 prange.ranges = rv.size() ? &rv[0] : NULL;
94 pintens.intensities_count = iv.size();
95 pintens.intensities = iv.size() ? &iv[0] : NULL;
98 if( prange.ranges_count )
101 PLAYER_RANGER_DATA_RANGE,
102 (
void*)&prange,
sizeof(prange), NULL);
104 if( pintens.intensities_count )
107 PLAYER_RANGER_DATA_INTNS,
108 (
void*)&pintens,
sizeof(pintens), NULL);
113 player_msghdr_t* hdr,
119 if (Message::MatchMessage(hdr, PLAYER_MSGTYPE_REQ,
120 PLAYER_RANGER_REQ_GET_CONFIG,
127 PRINT_WARN(
"stageplugin ranger config describes only the first sensor of the ranger." );
129 player_ranger_config_t prc;
130 bzero(&prc,
sizeof(prc));
134 prc.min_angle = -s.
fov/2.0;
135 prc.max_angle = +s.
fov/2.0;
143 PLAYER_MSGTYPE_RESP_ACK,
144 PLAYER_RANGER_REQ_GET_CONFIG,
145 (
void*)&prc,
sizeof(prc), NULL);
150 PRINT_ERR2(
"config request len is invalid (%d != %d)", (
int)hdr->size,0);
155 if (Message::MatchMessage(hdr, PLAYER_MSGTYPE_REQ,
156 PLAYER_RANGER_REQ_GET_GEOM,
164 const std::vector<ModelRanger::Sensor>& sensors = mod->
GetSensors();
167 player_ranger_geom_t pgeom;
168 bzero( &pgeom,
sizeof(pgeom));
169 pgeom.pose.px = pose.
x;
170 pgeom.pose.py = pose.
y;
171 pgeom.pose.pyaw = pose.
a;
172 pgeom.size.sl = geom.
size.
x;
173 pgeom.size.sw = geom.
size.
y;
175 pgeom.element_poses_count = pgeom.element_sizes_count = sensors.size();
177 player_pose3d_t poses[ sensors.size() ];
178 player_bbox3d_t sizes[ sensors.size() ];
180 for(
size_t s=0;
s<pgeom.element_poses_count;
s++ )
182 poses[
s].px = sensors[
s].pose.x;
183 poses[
s].py = sensors[
s].pose.y;
184 poses[
s].pz = sensors[
s].pose.z;
185 poses[
s].proll = 0.0;
186 poses[
s].ppitch = 0.0;
187 poses[
s].pyaw = sensors[
s].pose.a;
189 sizes[
s].sw = sensors[
s].size.x;
190 sizes[
s].sl = sensors[
s].size.y;
191 sizes[
s].sh = sensors[
s].size.z;
194 pgeom.element_poses = poses;
195 pgeom.element_sizes = sizes;
198 PLAYER_MSGTYPE_RESP_ACK,
199 PLAYER_RANGER_REQ_GET_GEOM,
200 (
void*)&pgeom,
sizeof(pgeom), NULL);
205 PRINT_ERR2(
"config request len is invalid (%d != %d)", (
int)hdr->size,0);
211 PRINT_WARN2(
"stage ranger doesn't support message %d:%d.",
212 hdr->type, hdr->subtype);
double max
largest value in range, initially zero
The Stage library uses its own namespace.
std::vector< Sensor > & GetSensorsMutable()
#define PRINT_WARN2(m, a, b)
double min
smallest value in range, initially zero
InterfaceRanger(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section)
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr_t *hdr, void *data)
unsigned int sample_count
const std::vector< Sensor > & GetSensors() const
double Resolution() const
#define PRINT_ERR2(m, a, b)
radians_t a
rotation about the z axis.
virtual void Publish(void)