diff --git a/include/ur_rtde_driver/rtde/rtde_client.h b/include/ur_rtde_driver/rtde/rtde_client.h index cd0ca9b..6a917e8 100644 --- a/include/ur_rtde_driver/rtde/rtde_client.h +++ b/include/ur_rtde_driver/rtde/rtde_client.h @@ -36,6 +36,8 @@ #include "ur_rtde_driver/comm/producer.h" #include "ur_rtde_driver/rtde/data_package.h" #include "ur_rtde_driver/rtde/request_protocol_version.h" +#include "ur_rtde_driver/rtde/control_package_setup_outputs.h" +#include "ur_rtde_driver/rtde/control_package_start.h" static const int UR_RTDE_PORT = 30004; static const std::string PIPELINE_NAME = "RTDE Data Pipeline"; @@ -50,6 +52,8 @@ public: RTDEClient() = delete; RTDEClient(std::string ROBOT_IP, comm::INotifier& notifier); ~RTDEClient() = default; + bool init(); + bool start(); bool getDataPackage(std::unique_ptr>& data_package, std::chrono::milliseconds timeout); private: @@ -57,6 +61,8 @@ private: RTDEParser parser_; comm::URProducer prod_; comm::Pipeline pipeline_; + + std::vector readRecipe(); }; } // namespace rtde_interface diff --git a/src/rtde/rtde_client.cpp b/src/rtde/rtde_client.cpp index 521979a..8cd8109 100644 --- a/src/rtde/rtde_client.cpp +++ b/src/rtde/rtde_client.cpp @@ -34,24 +34,43 @@ namespace rtde_interface RTDEClient::RTDEClient(std::string ROBOT_IP, comm::INotifier& notifier) : stream_(ROBOT_IP, UR_RTDE_PORT), parser_(), prod_(stream_, parser_), pipeline_(prod_, PIPELINE_NAME, notifier) +{ +} + +bool RTDEClient::init() { pipeline_.run(); - - sleep(1); - uint8_t buffer[4096]; size_t size; size_t written; - size = RequestProtocolVersionRequest::generateSerializedRequest(buffer); - std::cout << "size: " << size << std::endl; - std::cout << "buffer: " << static_cast(buffer[0]) << " - " - << static_cast(buffer[1]) << " - " - << static_cast(buffer[2]) << " - " - << static_cast(buffer[3]) << " - " - << static_cast(buffer[4]) << std::endl; - stream_.write(buffer, size, written); + size = RequestProtocolVersionRequest::generateSerializedRequest(buffer, 2); + stream_.write(buffer, size, written); + std::unique_ptr> package; - std::cout << "wrote: " << written << std::endl; + pipeline_.getLatestProduct(package, std::chrono::milliseconds(1000)); + size = ControlPackageSetupOutputsRequest::generateSerializedRequest(buffer, 500.0, readRecipe()); + stream_.write(buffer, size, written); + return pipeline_.getLatestProduct(package, std::chrono::milliseconds(1000)); +} +bool RTDEClient::start() +{ + uint8_t buffer[4096]; + size_t size; + size_t written; + size = ControlPackageStartRequest::generateSerializedRequest(buffer); + std::unique_ptr> package; + stream_.write(buffer, size, written); + return pipeline_.getLatestProduct(package, std::chrono::milliseconds(1000)); +} +std::vector RTDEClient::readRecipe() +{ + std::vector recipe; + recipe.push_back("timestamp"); + recipe.push_back("actual_q"); + recipe.push_back("actual_qd"); + recipe.push_back("speed_scaling"); + recipe.push_back("target_speed_fraction"); + return recipe; } bool RTDEClient::getDataPackage(