robot_webots.cpp
Go to the documentation of this file.
1 
6 #include <std_msgs/String.h>
7 #include "ros/ros.h"
8 #include <signal.h>
9 
10 
11 #include <webots_ros/robot_get_device_list.h>
12 #include <webots_ros/robot_get_device_list.h>
13 
15 
16 #include <iostream>
17 #include <vector>
18 
19 static int controllerCount;
20 static std::vector<std::string> controllerList;
21 
22 // catch names of the controllers availables on ROS network
23 void controllerNameCallback(const std_msgs::String::ConstPtr &name) {
25  controllerList.push_back(name->data);
26  ROS_INFO("Controller #%d: %s.", controllerCount, controllerList.back().c_str());
27 }
28 
29 void quit(int sig) {
30  ROS_INFO("User stopped the 'robot_information_parser' node.");
31  ros::shutdown();
32  exit(0);
33 }
34 
35 int main(int argc, char **argv) {
36 
37 
38  std::vector<std::string> controllerName;
39  std::vector<std::string> deviceList;
40 
41  // create a node named 'robot_information_parser' on ROS network
42  ros::init(argc, argv, "robot");
43  ros::NodeHandle n;
44  ros::Rate loop_rate(30);
45 
46  signal(SIGINT, quit);
47 
48  std::vector<int> robot_list;
49  if (n.getParam("robot_list", robot_list))
50  {
51  ROS_INFO("Got param: robot_list");
52  }
53  else
54  {
55  ROS_ERROR("Failed to get param 'robot_list'");
56  }
57 
58  // subscribe to the topic model_name to get the list of availables controllers
59  ros::Subscriber nameSub = n.subscribe("model_name", 100, controllerNameCallback);
60  while (controllerCount < robot_list.size() || controllerCount < nameSub.getNumPublishers()) {
61  ros::spinOnce();
62  ros::spinOnce();
63  ros::spinOnce();
64  }
65  ros::spinOnce();
66 
67  std::stringstream robot_name_;
68 
69  for (int i = 0; i<controllerCount; i++){
70  ROS_INFO_STREAM(controllerList[i]);
71  for (int j = 0; j<robot_list.size(); j++){
72  robot_name_.str(std::string());
73  robot_name_ << "robot_" << robot_list.at(j);
74 
75  if (controllerList[i].find(robot_name_.str()) != std::string::npos) {
76  controllerName.push_back(controllerList[i]);
77  }
78  }
79  }
80 
81  WebotsRobot robots[controllerName.size()];
82 
83  for (int i=0; i<controllerName.size(); i++)
84  {
85  robots[i].setName(std::string(1, (controllerName.at(i)).at(6)), n);
86  robots[i].init(n, controllerName.at(i));
87  robots[i].setFrames();
88 
89  robots[i].enableGyro(n);
90  robots[i].subscribeGyro(n);
91 
92  robots[i].subscribeMove(n);
93 
94  }
95 
96 
97 
98  Field field(n);
99 
100  field.mapResolution = 0.05;
101  field.mapWidth = 500;
102  field.mapHeight = 500;
103 
104  std::vector<Point_2> points;
105  Point_2 p1(-1, -2);
106  Point_2 p2(1, -1);
107  Point_2 p3(1, 2);
108  Point_2 p4(-1, 2);
109  Point_2 p5(-1, -2);
110  Point_2 p11(3.5, 5);
111 
112  points.push_back(p1);
113  points.push_back(p2);
114  points.push_back(p3);
115  points.push_back(p11);
116  points.push_back(p4);
117  points.push_back(p5);
118 
119  Obstacle obstacle("Prvi");
120 
121  std::vector<Point_2> points_2;
122  Point_2 p6(0.5, 0.8);
123  Point_2 p7(0.3, 0);
124 
125  points_2.push_back(p6);
126  points_2.push_back(p7);
127 
128  Obstacle obstacle2("Drugi");
129 
130  obstacle2.setSegments(points_2);
131  obstacle.setSegments(points);
132 
133  field.obstacles.push_back(obstacle);
134 
135  field.obstacles.push_back(obstacle2);
136 
137  field.generateOccupancyGrid();
138 
139  while(ros::ok()){
140 
141  field.publishOccupancyGrid(n);
142 
143  for (int i=0; i<robot_list.size(); i++)
144  {
145  robots[i].transmitPoseFromAlvarPoseMsg();
146  robots[i].transmitFrames();
147  }
148 
149  for (int i=0; i<robot_list.size(); i++)
150  {
151  robots[i].transmitLaserScan(robots, robot_list.size(), &field);
152 
153  }
154 
155  loop_rate.sleep();
156  ros::spinOnce();
157  }
158 }
Robot::transmitFrames
void transmitFrames()
Definition: rosinljubljana_objects.cpp:523
Field::mapHeight
uint32_t mapHeight
Definition: rosinljubljana.h:198
Obstacle::setSegments
void setSegments(std::vector< Point_2 >)
Definition: rosinljubljana_objects.cpp:10
Field::generateOccupancyGrid
void generateOccupancyGrid()
Definition: rosinljubljana_objects.cpp:97
WebotsRobot::subscribeGyro
void subscribeGyro(ros::NodeHandle)
Definition: rosinljubljana_objects.cpp:693
Robot::setFrames
void setFrames()
Definition: rosinljubljana_objects.cpp:219
Field::mapResolution
float mapResolution
several map Parameters
Definition: rosinljubljana.h:196
Field::publishOccupancyGrid
void publishOccupancyGrid(ros::NodeHandle n)
Definition: rosinljubljana_objects.cpp:158
WebotsRobot
Definition: rosinljubljana.h:349
controllerList
static std::vector< std::string > controllerList
Definition: robot_webots.cpp:20
controllerCount
static int controllerCount
Definition: robot_webots.cpp:19
quit
void quit(int sig)
Definition: robot_webots.cpp:29
WebotsRobot::enableGyro
void enableGyro(ros::NodeHandle)
Definition: rosinljubljana_objects.cpp:677
Obstacle
Definition: rosinljubljana.h:82
controllerNameCallback
void controllerNameCallback(const std_msgs::String::ConstPtr &name)
Definition: robot_webots.cpp:23
WebotsRobot::transmitLaserScan
void transmitLaserScan(WebotsRobot[], int list_length, Field *field)
Definition: rosinljubljana_objects.cpp:580
main
int main(int argc, char **argv)
Definition: robot_webots.cpp:35
Field::mapWidth
uint32_t mapWidth
Definition: rosinljubljana.h:197
WebotsRobot::subscribeMove
void subscribeMove(ros::NodeHandle)
Definition: rosinljubljana_objects.cpp:672
Robot::transmitPoseFromAlvarPoseMsg
void transmitPoseFromAlvarPoseMsg()
Definition: rosinljubljana_objects.cpp:251
rosinljubljana.h
Field::obstacles
std::vector< Obstacle > obstacles
obstacles variable for storing obstacles
Definition: rosinljubljana.h:184
WebotsRobot::init
void init(ros::NodeHandle, std::string)
Definition: rosinljubljana_objects.cpp:538
Field
Definition: rosinljubljana.h:119
Point_2
Kernel::Point_2 Point_2
Definition: rosinljubljana.h:61
Robot::setName
void setName(std::string, ros::NodeHandle nh)
Definition: rosinljubljana_objects.cpp:197


rosinljubljana
Author(s): Igor Banfi
autogenerated on Mon Feb 24 2020 12:32:36