29 #include <gtest/gtest.h> 50 std::this_thread::sleep_for(std::chrono::seconds(1));
53 std::string output_recipe_ =
"resources/rtde_output_recipe.txt";
54 std::string input_recipe_ =
"resources/rtde_input_recipe.txt";
56 std::unique_ptr<rtde_interface::RTDEClient>
client_;
61 EXPECT_TRUE(client_->init());
66 std::string output_recipe =
"";
67 std::string input_recipe =
"";
78 std::string output_recipe =
"resources/empty.txt";
79 std::string input_recipe =
"resources/empty.txt";
105 double expected_target_frequency = 0.0;
106 EXPECT_EQ(client_->getTargetFrequency(), expected_target_frequency);
111 EXPECT_EQ(client_->getTargetFrequency(), client_->getMaxFrequency());
120 if (client_->getVersion().major >= 5)
122 double expected_max_frequency = 500;
123 EXPECT_EQ(client_->getMaxFrequency(), expected_max_frequency);
127 double expected_max_frequency = 125;
128 EXPECT_EQ(client_->getMaxFrequency(), expected_max_frequency);
131 double expected_target_frequency = 1;
132 EXPECT_EQ(client_->getTargetFrequency(), expected_target_frequency);
134 EXPECT_TRUE(client_->start());
137 const std::chrono::milliseconds read_timeout{ 10000 };
138 std::unique_ptr<rtde_interface::DataPackage> data_pkg = client_->getDataPackage(read_timeout);
139 if (data_pkg ==
nullptr)
141 std::cout <<
"Failed to get data package from robot" << std::endl;
145 double first_time_stamp = 0.0;
146 data_pkg->getData(
"timestamp", first_time_stamp);
148 data_pkg = client_->getDataPackage(read_timeout);
149 if (data_pkg ==
nullptr)
151 std::cout <<
"Failed to get data package from robot" << std::endl;
155 double second_time_stamp = 0.0;
156 data_pkg->getData(
"timestamp", second_time_stamp);
159 EXPECT_EQ(second_time_stamp - first_time_stamp, 1);
167 EXPECT_FALSE(client_->start());
173 EXPECT_TRUE(client_->start());
178 EXPECT_TRUE(client_->start());
186 EXPECT_FALSE(client_->pause());
190 EXPECT_FALSE(client_->pause());
198 EXPECT_TRUE(client_->pause());
203 std::vector<std::string> expected_output_recipe = {
"timestamp",
207 "target_speed_fraction",
211 "actual_digital_input_bits",
212 "actual_digital_output_bits",
213 "standard_analog_input0",
214 "standard_analog_input1",
215 "standard_analog_output0",
216 "standard_analog_output1",
219 "tool_analog_input_types",
220 "tool_analog_input0",
221 "tool_analog_input1",
222 "tool_output_voltage",
223 "tool_output_current",
228 "safety_status_bits",
232 std::vector<std::string> actual_output_recipe = client_->getOutputRecipe();
233 for (
unsigned int i = 0; i < expected_output_recipe.size(); ++i)
235 EXPECT_EQ(expected_output_recipe[i], actual_output_recipe[i]);
245 const std::chrono::milliseconds read_timeout{ 100 };
246 std::unique_ptr<rtde_interface::DataPackage> data_pkg = client_->getDataPackage(read_timeout);
247 if (data_pkg ==
nullptr)
249 std::cout <<
"Failed to get data package from robot" << std::endl;
254 EXPECT_TRUE(data_pkg->getData(
"actual_q", actual_q));
264 bool send_digital_output =
true;
265 EXPECT_TRUE(client_->getWriter().sendStandardDigitalOutput(0, send_digital_output));
268 const std::chrono::milliseconds read_timeout{ 100 };
269 std::unique_ptr<rtde_interface::DataPackage> data_pkg = client_->getDataPackage(read_timeout);
270 if (data_pkg ==
nullptr)
272 std::cout <<
"Failed to get data package from robot" << std::endl;
276 std::bitset<18> actual_dig_out_bits;
277 data_pkg->getData<uint64_t>(
"actual_digital_output_bits", actual_dig_out_bits);
283 while (actual_dig_out_bits[0] != send_digital_output)
285 data_pkg = client_->getDataPackage(read_timeout);
286 data_pkg->getData<uint64_t>(
"actual_digital_output_bits", actual_dig_out_bits);
287 if (counter == max_tries)
294 EXPECT_EQ(send_digital_output, actual_dig_out_bits[0]);
299 int main(
int argc,
char* argv[])
301 ::testing::InitGoogleTest(&argc, argv);
303 for (
int i = 0; i < argc; i++)
305 if (std::string(argv[i]) ==
"--robot_ip" && i + 1 < argc)
312 return RUN_ALL_TESTS();
TEST_F(RTDEClientTest, rtde_handshake)
comm::INotifier notifier_
Parent class for notifiers.
int main(int argc, char *argv[])
The RTDEClient class manages communication over the RTDE interface. It contains the RTDE handshake an...
std::array< double, 6 > vector6d_t
std::unique_ptr< rtde_interface::RTDEClient > client_
Our base class for exceptions. Specialized exceptions should inherit from those.