extract_rosbag_signals_test.cpp
Go to the documentation of this file.
1 /*
2  @file
3 
4  @author victor
5 
6  @copyright (c) 2018 PAL Robotics SL. All Rights Reserved
7 */
8 
9 #include <gtest/gtest.h>
11 #include <ros/package.h>
12 #include <ros/ros.h>
13 #include <rosbag/bag.h>
14 #include <rosbag/view.h>
15 
16 namespace pal_statistics {
17 
18 TEST(ExtractRosbagSignalsTest, wrong_rosbag) {
19  std::vector<std::string> var_names;
20  var_names.push_back("var1");
21  var_names.push_back("var2");
22  var_names.push_back("var3");
23  std::string rosbag_path = "wrong_path";
24  EXPECT_ANY_THROW(DataSignals data(var_names, rosbag_path));
25 }
26 
27 TEST(ExtractRosbagSignalsTest, wrong_variables) {
28  std::string path = ros::package::getPath("pal_statistics");
29  path += "/test/test.bag";
30  std::vector<std::string> var_names;
31  DataSignals data_empty(var_names, path);
32  EXPECT_TRUE(data_empty.getDataSignalNames().empty());
33  EXPECT_TRUE(data_empty.getDataValues().empty());
34  EXPECT_EQ(data_empty.getDataValuesMinSize(), 0);
35  EXPECT_EQ(data_empty.getDataValuesMaxSize(), 0);
36  EXPECT_TRUE(data_empty.getIndexMap().empty());
37 
38  var_names.push_back("var1");
39  var_names.push_back("var2");
40 
41  DataSignals data_wrong_var(var_names, path);
42  EXPECT_TRUE(data_wrong_var.getDataSignalNames().empty());
43  EXPECT_TRUE(data_wrong_var.getDataValues().empty());
44  EXPECT_EQ(data_wrong_var.getDataValuesMinSize(), 0);
45  EXPECT_EQ(data_wrong_var.getDataValuesMaxSize(), 0);
46  EXPECT_TRUE(data_wrong_var.getIndexMap().empty());
47 }
48 
49 TEST(ExtractRosbagSignalsTest, correct_execution) {
50  std::string path = ros::package::getPath("pal_statistics");
51  path += "/test/test.bag";
52  std::vector<std::string> var_names;
53  var_names.push_back(
54  "/sine_sweep_controller_local_control_actual_effort_leg_left_4_joint");
55  var_names.push_back(
56  "/sine_sweep_controller_local_control_desired_effort_leg_left_4_joint");
57  var_names.push_back("wrong_variable");
58 
59  DataSignals data(var_names, path);
60 
61  std::vector<std::string> received_var_names = data.getDataSignalNames();
62  EXPECT_EQ(received_var_names.size(), 2);
63  EXPECT_NE(std::find(received_var_names.begin(), received_var_names.end(),
64  var_names[0]),
65  received_var_names.end());
66  EXPECT_NE(std::find(received_var_names.begin(), received_var_names.end(),
67  var_names[1]),
68  received_var_names.end());
69 
70  size_t size_signal = 21915;
71  EXPECT_EQ(data.getDataValuesMinSize(), size_signal);
72  EXPECT_EQ(data.getDataValuesMaxSize(), size_signal);
73 
74  std::map<std::string, int> data_map = data.getIndexMap();
75  EXPECT_EQ(data_map.size(), 2);
76  EXPECT_EQ(data_map[var_names[0]], 0);
77  EXPECT_EQ(data_map[var_names[1]], 1);
78 
79  std::vector<std::vector<TimeData>> signals = data.getDataValues();
80  EXPECT_EQ(signals.size(), 2);
81  EXPECT_EQ(signals[0].size(), size_signal);
82  EXPECT_EQ(signals[1].size(), size_signal);
83 
84  std::vector<TimeData> signal_0 = data.getDataSignal(var_names[0]);
85  std::vector<TimeData> signal_1 = data.getDataSignal(var_names[1]);
86  std::vector<TimeData> signal_2 = data.getDataSignal(var_names[2]);
87 
88  EXPECT_EQ(signal_0.size(), size_signal);
89  EXPECT_EQ(signal_1.size(), size_signal);
90  EXPECT_TRUE(signal_2.empty());
91 
92  EXPECT_EQ(signal_0, signals[0]);
93  EXPECT_EQ(signal_1, signals[1]);
94 
95  std::vector<TimeData> instant_signals = data.getDataValue(ros::Duration(8.0));
96  std::vector<TimeData> initial_signals = data.getDataValue(ros::Duration(0.0));
97  EXPECT_EQ(instant_signals.size(), 2);
98  EXPECT_NEAR((instant_signals[0].first - initial_signals[0].first).toSec(),
99  8.0, 1.e-4);
100  EXPECT_NEAR((instant_signals[1].first - initial_signals[1].first).toSec(),
101  8.0, 1.e-4);
102 
103  std::vector<TimeData> instant_signals_wrong =
104  data.getDataValue(ros::Duration(12.0));
105  EXPECT_EQ(instant_signals_wrong.size(), 0);
106 
107  std::vector<TimeData> instant_coeff_signals =
108  data.getInstantDataValues(size_signal - 1);
109  EXPECT_EQ(instant_coeff_signals.size(), 2);
110 
111  std::vector<TimeData> instant_coeff_signals_wrong =
112  data.getInstantDataValues(size_signal);
113  EXPECT_EQ(instant_coeff_signals_wrong.size(), 0);
114 
115  std::vector<TimeData> instant_signals_2 = data.getDataValue(ros::Duration(7.7102));
116  EXPECT_DOUBLE_EQ(instant_signals_2[0].second, 0);
117  EXPECT_DOUBLE_EQ(instant_signals_2[1].second, -12.772910497261488);
118 }
119 
120 } // namespace pal_statistics
121 
122 int main(int argc, char **argv) {
123  ros::init(argc, argv, "extract_rosbag_signals_test");
124  // first nodehandle created of an app must exist until the end of the life of
125  // the node
126  // If not, you'll have funny stuff such as no logs printed
127  ros::NodeHandle nh;
129  testing::InitGoogleTest(&argc, argv);
130  return RUN_ALL_TESTS();
131 }
pal_statistics::DataSignals::getInstantDataValues
std::vector< TimeData > getInstantDataValues(size_t coeff) const
Definition: extract_rosbag_signals.cpp:156
pal_statistics::TEST
TEST(ExtractRosbagSignalsTest, wrong_rosbag)
Definition: extract_rosbag_signals_test.cpp:18
ros::package::getPath
ROSLIB_DECL std::string getPath(const std::string &package_name)
ros::init
ROSCPP_DECL void init(const M_string &remappings, const std::string &name, uint32_t options=0)
pal_statistics::DataSignals::getDataValuesMinSize
size_t getDataValuesMinSize() const
Definition: extract_rosbag_signals.cpp:115
pal_statistics::DataSignals::getIndexMap
std::map< std::string, int > getIndexMap() const
Definition: extract_rosbag_signals.cpp:146
ros.h
pal_statistics::DataSignals::getDataSignal
std::vector< TimeData > getDataSignal(const std::string &name) const
Definition: extract_rosbag_signals.cpp:79
bag.h
pal_statistics::DataSignals::getDataValues
std::vector< std::vector< TimeData > > getDataValues() const
Definition: extract_rosbag_signals.cpp:98
pal_statistics::DataSignals
Definition: extract_rosbag_signals.h:18
main
int main(int argc, char **argv)
Definition: extract_rosbag_signals_test.cpp:122
pal_statistics::DataSignals::getDataValuesMaxSize
size_t getDataValuesMaxSize() const
Definition: extract_rosbag_signals.cpp:106
pal_statistics
Definition: extract_rosbag_signals.h:14
package.h
view.h
ros::Time::waitForValid
static bool waitForValid()
extract_rosbag_signals.h
pal_statistics::DataSignals::getDataValue
std::vector< TimeData > getDataValue(const ros::Duration &time) const
Definition: extract_rosbag_signals.cpp:127
ros::Duration
ros::NodeHandle
pal_statistics::DataSignals::getDataSignalNames
std::vector< std::string > getDataSignalNames() const
Definition: extract_rosbag_signals.cpp:90


pal_statistics
Author(s):
autogenerated on Fri Aug 2 2024 08:29:35