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
ros::Publisher orderActionPub
Definition: order_daemon.h:254
vector< string > ordersToCancel
Definition: order_daemon.h:283
string orderId
Definition: order_daemon.h:34
string zoneSetId
Definition: order_daemon.h:40
ros::Publisher orderIdPub
Definition: order_daemon.h:275
bool actionCancellationComplete
Definition: order_daemon.h:48
deque< vda5050_msgs::Node > nodeStates
Definition: order_daemon.h:54
bool actionsFinished
Definition: order_daemon.h:45
ros::Publisher orderCancelPub
Definition: order_daemon.h:257
ros::Subscriber allActionsCancelledSub
Definition: order_daemon.h:249
int currSequenceId
Definition: order_daemon.h:289
vector< CurrentOrder > currentOrders
Definition: order_daemon.h:232
ros::Publisher orderUpdateIdPub
Definition: order_daemon.h:278
string mapId
Definition: order_daemon.h:186
AGVPosition agvPosition
Definition: order_daemon.h:235
ros::Publisher edgeStatesPub
Definition: order_daemon.h:266
ros::Publisher lastNodeSequenceIdPub
Definition: order_daemon.h:272
ros::Publisher nodeStatesPub
Definition: order_daemon.h:263
ros::Publisher lastNodeIdPub
Definition: order_daemon.h:269
Definition: daemon.h:29
ros::Publisher orderTriggerPub
Definition: order_daemon.h:260
vector< string > actionStates
Definition: order_daemon.h:57
ros::Subscriber orderCancelSub
Definition: order_daemon.h:243
ros::Subscriber agvPositionSub
Definition: order_daemon.h:246
deque< vda5050_msgs::Edge > edgeStates
Definition: order_daemon.h:51


vda5050_connector
Author(s): Florian Rothmeyer , Florian Spiegel
autogenerated on Tue Mar 21 2023 02:52:00