ASCO Aerial Autonomy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
test_utils.h
Go to the documentation of this file.
1 #pragma once
2 #include <chrono>
3 #include <functional>
4 #include <parsernode/common.h>
5 #include <tf/transform_datatypes.h>
6 
7 namespace test_utils {
16 template <bool done> struct WaitUntilResult {
25  bool operator()(std::function<bool(void)> const &input_function,
26  std::chrono::seconds timeout) {
27  auto start = std::chrono::system_clock::now();
28  std::chrono::seconds duration(0);
29  while (input_function() == !done && duration.count() < timeout.count()) {
30  ros::spinOnce();
31  std::this_thread::sleep_for(std::chrono::milliseconds(100));
32  duration = std::chrono::duration_cast<std::chrono::seconds>(
33  std::chrono::system_clock::now() - start);
34  }
35  return input_function();
36  }
37 };
48  BaseTestPubSubs() : nh_send_("~common"), nh_receive_status_("~common") {
49  event_pub_ = nh_send_.advertise<std_msgs::String>("event_manager", 1);
50  pose_pub_ =
51  nh_send_.advertise<geometry_msgs::PoseStamped>("goal_pose_command", 1);
53  "system_status", 1, &BaseTestPubSubs::statusCallback, this);
54  }
60  void publishEvent(std::string event) {
61  std_msgs::String event_msg;
62  event_msg.data = event;
63  event_pub_.publish(event_msg);
64  }
65 
71  void publishPoseCommand(PositionYaw position_yaw) {
72  geometry_msgs::PoseStamped pose_msg;
73  pose_msg.pose.position.x = position_yaw.x;
74  pose_msg.pose.position.y = position_yaw.y;
75  pose_msg.pose.position.z = position_yaw.z;
76  pose_msg.pose.orientation =
77  tf::createQuaternionMsgFromYaw(position_yaw.yaw);
78  pose_pub_.publish(pose_msg);
79  }
80 
88  PositionYaw getPositionYaw(parsernode::common::quaddata quad_data) {
89  return PositionYaw(quad_data.localpos.x, quad_data.localpos.y,
90  quad_data.localpos.z, quad_data.rpydata.z);
91  }
92 
99  bool isStatusConnected() { return status_subscriber_.getNumPublishers() > 0; }
100 
101 protected:
102  std::string status_;
103  ros::NodeHandle nh_send_;
104  ros::NodeHandle nh_receive_status_;
105  ros::Publisher event_pub_;
106  ros::Publisher pose_pub_;
107  ros::Subscriber status_subscriber_;
108 
114  void statusCallback(std_msgs::String status) { status_ = status.data; }
115 };
124 };
bool operator()(std::function< bool(void)> const &input_function, std::chrono::seconds timeout)
Waits until timeout or the input function returns done.
Definition: test_utils.h:25
double y
y component in m
Definition: position.h:23
void publishPoseCommand(PositionYaw position_yaw)
Helper function to publish specified position_yaw command.
Definition: test_utils.h:71
void statusCallback(std_msgs::String status)
Callback to set the status received from UAV.
Definition: test_utils.h:114
bool isStatusConnected()
Helper function to check if status subscriber to connected UAV status publisher.
Definition: test_utils.h:99
ros::NodeHandle nh_receive_status_
Receive status.
Definition: test_utils.h:104
std::string status_
Definition: test_utils.h:102
double x
x component in m
Definition: position.h:22
Stores Position, yaw. PositionYaw is used as the goal for UAV systems.
Definition: position_yaw.h:10
ros::Publisher event_pub_
Event publisher.
Definition: test_utils.h:105
ros::NodeHandle nh_send_
Send events.
Definition: test_utils.h:103
Base Test fixture class for reducing code redundancy in system handler tests.
Definition: test_utils.h:42
ros::Publisher pose_pub_
Pose command publisher.
Definition: test_utils.h:106
Functor class that waits until the input function results in the template parameter or timeout which ...
Definition: test_utils.h:16
void publishEvent(std::string event)
Helper function to publish specified event specified.
Definition: test_utils.h:60
double yaw
Orientation about body axis rad.
Definition: position_yaw.h:51
double z
z component in m
Definition: position.h:24
ros::Subscriber status_subscriber_
System status subscriber.
Definition: test_utils.h:107
PositionYaw getPositionYaw(parsernode::common::quaddata quad_data)
Helper function to return position and yaw from UAV data.
Definition: test_utils.h:88
BaseTestPubSubs()
Constructor.
Definition: test_utils.h:48