17 ros::ServiceClient client = n.serviceClient<ORCAStar::Init>(
"initServer");
18 ros::service::waitForService(
"initServer");
25 ROS_DEBUG(
"Parameters received!");
27 sightRad = srv.response.sightRadius;
28 initData = srv.response;
32 ROS_ERROR(
"Parameters not received!");
36 std::stringstream serverName;
37 serverName <<
"initAgentServer_" << id;
38 ros::ServiceServer initServer = n.advertiseService(serverName.str(), &ROSSimActor::InitAgent,
this);
40 while(!initFlag && ros::ok())
45 initServer.shutdown();
47 agentVelocityMsg.id = id;
48 agentVelocityMsg.vel = geometry_msgs::Point32();
50 ROSSimActorPub = n.advertise<ORCAStar::AgentVelocity>(
"AgentVelocities", 1000);
53 std::stringstream inpTopicName;
54 inpTopicName <<
"AgentInput_" << id;
55 std::stringstream outTopicName;
56 outTopicName <<
"AgentOutput_" << id;
58 ROSSimActorToAgentPub = n.advertise<ORCAStar::ORCAInput>(inpTopicName.str(), 1000);
61 ROS_DEBUG(
"ROS Actor Init: %lu!",
id);
74 ROS_DEBUG(
"Actor %lu start step",
id);
75 inputORCAMsg.pos = msg.pos[id];
76 inputORCAMsg.vel = msg.vel[id];
78 Point curr = {msg.pos[id].
x, msg.pos[id].y};
80 inputORCAMsg.neighbours.pos.clear();
81 inputORCAMsg.neighbours.vel.clear();
82 inputORCAMsg.neighbours.rad.clear();
84 for(
size_t i = 0; i < msg.pos.size(); i++)
86 Point another = {msg.pos[i].
x, msg.pos[i].y};
88 if(
id != i && (curr-another).SquaredEuclideanNorm() < sightRad * sightRad)
90 inputORCAMsg.neighbours.pos.push_back(msg.pos[i]);
91 inputORCAMsg.neighbours.vel.push_back(msg.vel[i]);
92 inputORCAMsg.neighbours.rad.push_back(msg.rad[i]);
97 ROSSimActorToAgentPub.publish(inputORCAMsg);
102 ROS_DEBUG(
"Actor %lu end step",
id);
104 agentVelocityMsg.id = id;
105 agentVelocityMsg.vel = msg;
106 ROSSimActorPub.publish(agentVelocityMsg);
110 bool ROSSimActor::InitAgent(ORCAStar::Init::Request &req, ORCAStar::Init::Response &res)
114 ROS_DEBUG(
"Sim Agent %lu\n Init",
id);
~ROSSimActor()
ROSSimActor destructor.
The Point class defines a position (or euclidean vector from (0,0)) in 2D space.
float x
X-coordinate of the point.
File contains ROSSimActor class.
void TransmitAgentVelocity(const geometry_msgs::Point32 &msg)
Receives computed velocity from agent module and transmits it to simulation module.
void ReceiveAgentStates(const ORCAStar::AgentState &msg)
Receives all agents states and transmits neighbours states to single agent module.
ROSSimActor()
ROSSimActor default constructor.