expand_pioneer.cc
Go to the documentation of this file.
1 // File: stest.c
3 // Desc: Stage library test program
4 // Created: 2004.9.15
5 // Author: Richard Vaughan <vaughan@sfu.ca>
6 // CVS: $Id: stest.cc,v 1.3 2008-02-01 03:11:02 rtv Exp $
7 // License: GPL
9 
10 #include <stdio.h>
11 #include <stdlib.h>
12 #include <string.h>
13 
14 #include "stage.hh"
15 using namespace Stg;
16 
17 typedef struct
18 {
19  ModelRanger* ranger;
20  ModelRanger* laser;
21  ModelPosition* position;
22 } robot_t;
23 
24 
25 const double VSPEED = 0.2; // meters per second
26 const double WGAIN = 1.0; // turn speed gain
27 const double SAFE_DIST = 0.75; // meters
28 const double SAFE_ANGLE = 0.5; // radians
29 
30 
31 // forward declare
32 int RangerUpdate( ModelRanger* mod, robot_t* robot );
33 
34 // Stage calls this when the model starts up
35 extern "C" int Init( Model* mod )
36 {
37  robot_t* robot = new robot_t;
38  robot->position = (ModelPosition*)mod;
39  assert( robot->position );
40 
41  // subscribe to the ranger, which we use for navigating
42  robot->ranger = (ModelRanger*)mod->GetUnusedModelOfType( "ranger" );
43  assert( robot->ranger );
44 
45  // ask Stage to call into our ranger update function
47 
48  // subscribe to the laser, though we don't use it for navigating
49  robot->laser = (ModelRanger*)mod->GetUnusedModelOfType( "ranger" );
50  assert( robot->laser );
51 
52  // start the models updating
53  robot->ranger->Subscribe();
54  robot->position->Subscribe();
55  //robot->laser->Subscribe();
56 
57 
58  return 0; //ok
59 }
60 
61 int RangerUpdate( ModelRanger* rgr, robot_t* robot )
62 {
63  // compute the vector sum of the sonar ranges
64  double dx=0, dy=0;
65 
66  const std::vector<ModelRanger::Sensor>& sensors = rgr->GetSensors();
67 
68  FOR_EACH( it, sensors )
69  {
70  const ModelRanger::Sensor& s = *it;
71  dx += s.ranges[0] * cos( s.pose.a );
72  dy += s.ranges[0] * sin( s.pose.a );
73 
74  //printf( "sensor %d angle= %.2f\n", s, rgr->sensors[s].pose.a );
75  }
76 
77  if( (dx == 0) || (dy == 0) )
78  return 0;
79 
80  double resultant_angle = atan2( dy, dx );
81  double forward_speed = 0.0;
82  double side_speed = 0.0;
83  double turn_speed = WGAIN * resultant_angle;
84 
85  //printf( "resultant %.2f turn_speed %.2f\n", resultant_angle, turn_speed );
86 
87  // if the front is clear, drive forwards
88  if( (sensors[3].ranges[0] > SAFE_DIST) && // forwards
89  (sensors[4].ranges[0] > SAFE_DIST) &&
90  (sensors[5].ranges[0] > SAFE_DIST/2.0) && //
91  (sensors[6].ranges[0] > SAFE_DIST/4.0) &&
92  (sensors[2].ranges[0] > SAFE_DIST/2.0) &&
93  (sensors[1].ranges[0] > SAFE_DIST/4.0) &&
94  (fabs( resultant_angle ) < SAFE_ANGLE) )
95  {
96  forward_speed = VSPEED;
97  }
98 
99  robot->position->SetSpeed( forward_speed, side_speed, turn_speed );
100 
101  return 0;
102 }
103 
Model class
Definition: stage.hh:1742
Model * GetUnusedModelOfType(const std::string &type)
Definition: model.cc:914
The Stage library uses its own namespace.
Definition: canvas.hh:8
void SetSpeed(double x, double y, double a)
void Init(int *argc, char **argv[])
Definition: stage.cc:18
int(* model_callback_t)(Model *mod, void *user)
Definition: stage.hh:568
float s
Definition: glutgraphics.cc:58
ModelPosition * position
ModelPosition class
Definition: stage.hh:2927
void AddCallback(callback_type_t type, model_callback_t cb, void *user)
int RangerUpdate(ModelRanger *mod, robot_t *robot)
const double WGAIN
const std::vector< Sensor > & GetSensors() const
Definition: stage.hh:2804
void Subscribe()
Definition: model.cc:646
const double SAFE_DIST
ModelRanger class
Definition: stage.hh:2747
const double SAFE_ANGLE
const double VSPEED
#define FOR_EACH(I, C)
Definition: stage.hh:616
radians_t a
rotation about the z axis.
Definition: stage.hh:252
std::vector< meters_t > ranges
Definition: stage.hh:2782
ModelRanger * laser
Definition: wander.cc:15
ModelRanger * ranger


stage
Author(s): Richard Vaughan , Brian Gerkey , Reed Hedges , Andrew Howard , Toby Collett , Pooya Karimian , Jeremy Asher , Alex Couture-Beil , Geoff Biggs , Rich Mattes , Abbas Sadat
autogenerated on Mon Jun 10 2019 15:06:09