1 #include <libplayerc++/playerc++.h> 8 #define POP 100 // population size 9 #define VSPEED 0.4 // meters per second 10 #define WGAIN 1.0 // turn speed gain 11 #define SAFE_DIST 0.3 // meters 12 #define SAFE_ANGLE 0.4 // radians 21 using namespace PlayerCc;
27 robot.SetDataMode(PLAYER_DATAMODE_PULL);
28 robot.SetReplaceRule(
true);
30 Position2dProxy pp(&robot,
gIndex);
31 SonarProxy sp(&robot,
gIndex);
32 Graphics2dProxy gp(&robot,
gIndex);
40 for (
int i = 0; i <
POP; i++) {
42 double dx = 0, dy = 0;
44 int num_ranges = sp.GetCount();
45 for (
int s = 0;
s < num_ranges;
s++) {
46 player_pose3d_t spose = sp.GetPose(
s);
47 double srange = sp.GetScan(
s);
49 dx += srange * cos(spose.pyaw);
50 dy += srange * sin(spose.pyaw);
54 double resultant_angle = atan2(dy, dx);
57 double forward_speed = 0.0;
58 double side_speed = 0.0;
59 double turn_speed =
WGAIN * resultant_angle;
62 int forward = num_ranges / 2 - 1;
71 pp.SetSpeed(forward_speed, side_speed, turn_speed);
75 if (forward_speed > 0)
76 gp.Color(0, 255, 0, 0);
78 gp.Color(0, 255, 255, 0);
80 player_point_2d_t pts[2];
87 gp.DrawPolyline(pts, 2);
90 }
catch (PlayerCc::PlayerError &e) {
91 std::cerr << e << std::endl;
int parse_args(int argc, char **argv)
uint gPort(PlayerCc::PLAYER_PORTNUM)
std::string gHostname(PlayerCc::PLAYER_HOSTNAME)
int main(int argc, char **argv)