order_daemon.h
Go to the documentation of this file.
1 /*
2  * Copyright 2022 Technical University of Munich, Chair of Materials Handling,
3  * Material Flow, Logistics – All Rights Reserved
4  *
5  * You may use, distribute and modify this code under the terms of the 3-clause
6  * BSD license. You should have received a copy of that license with this file.
7  * If not, please write to {kontakt.fml@ed.tum.de}.
8  */
9 
10 #ifndef ORDER_DAEMON_H
11 #define ORDER_DAEMON_H
12 #include <ros/ros.h>
13 #include "daemon.h"
14 #include "std_msgs/String.h"
15 #include "std_msgs/Bool.h"
16 #include "vda5050_msgs/Order.h"
17 #include "vda5050_msgs/ActionState.h"
18 #include "vda5050_msgs/AGVPosition.h"
19 #include "vda5050_msgs/Edge.h"
20 #include "vda5050_msgs/Node.h"
21 #include <string>
22 
23 using namespace std;
24 
32 {
33  private:
34  string orderId;
40  string zoneSetId;
44  public:
51  deque<vda5050_msgs::Edge> edgeStates;
54  deque<vda5050_msgs::Node> nodeStates;
57  vector<string> actionStates;
65  CurrentOrder(const vda5050_msgs::Order::ConstPtr& incomingOrder);
66 
73  bool compareOrderId(string orderIdToCompare);
74 
85  string compareOrderUpdateId(int orderUpdateIdToCompare);
86 
98  bool compareBase(string startOfNewBaseNodeId, int startOfNewBaseSequenceId);
99 
105  string getOrderId();
106 
112  int getOrderUpdateId();
113 
119  void setOrderUpdateId(int incomingUpdateId);
120 
127  bool isActive();
128 
136  string findNodeEdge(int currSequenceId);
137 
144  vda5050_msgs::Node getLastNodeInBase();
145 
151  void sendActions(ros::Publisher actionPublisher);
152 
159  void sendNodeStates(ros::Publisher nodeStatesPublisher);
160 
167  void sendEdgeStates(ros::Publisher edgeStatesPublisher);
168 };
169 
175 {
176  private:
177  float x;
180  float y;
183  float theta;
186  string mapId;
189  public:
190 
194  AGVPosition();
195 
204  void updatePosition(float new_x, float new_y, float new_theta,
205  string new_mapId);
206 
215  float nodeDistance(float node_x, float node_y);
216 
222  float getTheta();
223 };
224 
229 class OrderDaemon: public Daemon
230 {
231  private:
232  vector<CurrentOrder> currentOrders;
282  protected:
283  vector<string> ordersToCancel;
286  bool isDriving;
293  public:
298  OrderDaemon();
299 
305  void LinkPublishTopics(ros::NodeHandle *nh);
306 
312  void LinkSubscriptionTopics(ros::NodeHandle *nh);
313 
322  bool validationCheck(const vda5050_msgs::Order::ConstPtr& msg);
323 
332  bool inDevRange(vda5050_msgs::Node node);
333 
339  void triggerNewActions(string nodeOrEdge);
340 
345  void sendMotionCommand();
346 
353  void OrderCallback(const vda5050_msgs::Order::ConstPtr& msg);
354 
362  void OrderCancelRequestCallback(const std_msgs::String::ConstPtr& msg);
363 
371  void allActionsCancelledCallback(const std_msgs::String::ConstPtr& msg);
372 
379  void ActionStateCallback(const vda5050_msgs::ActionState::ConstPtr& msg);
380 
388  void AgvPositionCallback(const vda5050_msgs::AGVPosition::ConstPtr& msg);
389 
395  void DrivingCallback(const std_msgs::Bool::ConstPtr& msg);
396 
402  void startNewOrder(const vda5050_msgs::Order::ConstPtr& msg);
403 
409  void appendNewOrder(const vda5050_msgs::Order::ConstPtr& msg);
410 
416  void updateExistingOrder(const vda5050_msgs::Order::ConstPtr& msg);
417 
427  void UpdateOrders();
428 
435  void orderUpdateError(string orderId, int orderUpdateId);
436 
443  void orderValidationError(string orderId, int orderUpdateId);
444 
445 };
446 
447 #endif
OrderDaemon::isDriving
bool isDriving
Definition: order_daemon.h:286
OrderDaemon::orderIdPub
ros::Publisher orderIdPub
Definition: order_daemon.h:275
ros::Publisher
CurrentOrder::actionCancellationComplete
bool actionCancellationComplete
Definition: order_daemon.h:48
CurrentOrder::orderId
string orderId
Definition: order_daemon.h:34
ros.h
OrderDaemon::currSequenceId
int currSequenceId
Definition: order_daemon.h:289
OrderDaemon::orderActionPub
ros::Publisher orderActionPub
Definition: order_daemon.h:254
OrderDaemon::ordersToCancel
vector< string > ordersToCancel
Definition: order_daemon.h:283
OrderDaemon::orderCancelPub
ros::Publisher orderCancelPub
Definition: order_daemon.h:257
OrderDaemon::agvPositionSub
ros::Subscriber agvPositionSub
Definition: order_daemon.h:246
CurrentOrder::actionsFinished
bool actionsFinished
Definition: order_daemon.h:45
OrderDaemon::currentOrders
vector< CurrentOrder > currentOrders
Definition: order_daemon.h:232
OrderDaemon::orderUpdateIdPub
ros::Publisher orderUpdateIdPub
Definition: order_daemon.h:278
OrderDaemon::agvPosition
AGVPosition agvPosition
Definition: order_daemon.h:235
AGVPosition::theta
float theta
Definition: order_daemon.h:183
OrderDaemon::edgeStatesPub
ros::Publisher edgeStatesPub
Definition: order_daemon.h:266
CurrentOrder::nodeStates
deque< vda5050_msgs::Node > nodeStates
Definition: order_daemon.h:54
OrderDaemon::nodeStatesPub
ros::Publisher nodeStatesPub
Definition: order_daemon.h:263
AGVPosition::mapId
string mapId
Definition: order_daemon.h:186
OrderDaemon
Definition: order_daemon.h:229
CurrentOrder::actionStates
vector< string > actionStates
Definition: order_daemon.h:57
CurrentOrder::orderUpdateId
int orderUpdateId
Definition: order_daemon.h:37
Daemon
Definition: daemon.h:29
OrderDaemon::orderCancelSub
ros::Subscriber orderCancelSub
Definition: order_daemon.h:243
OrderDaemon::allActionsCancelledSub
ros::Subscriber allActionsCancelledSub
Definition: order_daemon.h:249
AGVPosition
Definition: order_daemon.h:174
CurrentOrder::edgeStates
deque< vda5050_msgs::Edge > edgeStates
Definition: order_daemon.h:51
std
CurrentOrder
Definition: order_daemon.h:31
AGVPosition::y
float y
Definition: order_daemon.h:180
AGVPosition::x
float x
Definition: order_daemon.h:177
OrderDaemon::lastNodeSequenceIdPub
ros::Publisher lastNodeSequenceIdPub
Definition: order_daemon.h:272
OrderDaemon::orderTriggerPub
ros::Publisher orderTriggerPub
Definition: order_daemon.h:260
OrderDaemon::lastNodeIdPub
ros::Publisher lastNodeIdPub
Definition: order_daemon.h:269
ros::NodeHandle
ros::Subscriber
CurrentOrder::zoneSetId
string zoneSetId
Definition: order_daemon.h:40
daemon.h


vda5050_connector
Author(s): Florian Rothmeyer , Florian Spiegel
autogenerated on Wed Mar 22 2023 02:38:56