mirror of
https://gitlab.com/obbart/universal_robots_ros_driver.git
synced 2026-04-10 01:50:46 +02:00
implemented usage of recipe read by rtde client in the parser and the
rtde data package
This commit is contained in:
committed by
Tristan Schnell
parent
420e04530f
commit
c322bcb2f2
@@ -100,6 +100,7 @@ public:
|
||||
private:
|
||||
// Const would be better here
|
||||
static std::unordered_map<std::string, _rtde_type_variant> type_list_;
|
||||
uint8_t recipe_id_;
|
||||
std::unordered_map<std::string, _rtde_type_variant> data_;
|
||||
std::vector<std::string> recipe_;
|
||||
};
|
||||
|
||||
@@ -25,7 +25,7 @@ namespace ur_driver
|
||||
{
|
||||
namespace rtde_interface
|
||||
{
|
||||
enum class PackageType
|
||||
enum class PackageType : uint8_t
|
||||
{
|
||||
RTDE_REQUEST_PROTOCOL_VERSION = 86, // ascii V
|
||||
RTDE_GET_URCONTROL_VERSION = 118, // ascii v
|
||||
@@ -55,7 +55,7 @@ public:
|
||||
static size_t serializeHeader(uint8_t* buffer, PackageType package_type, uint16_t payload_length)
|
||||
{
|
||||
uint16_t header_size = sizeof(_package_size_type) + sizeof(PackageType);
|
||||
uint16_t size = header_size+payload_length;
|
||||
uint16_t size = header_size + payload_length;
|
||||
comm::PackageSerializer::serialize(buffer, size);
|
||||
comm::PackageSerializer::serialize(buffer + sizeof(size), package_type);
|
||||
return header_size;
|
||||
|
||||
@@ -55,6 +55,8 @@ public:
|
||||
virtual std::string toString() const;
|
||||
|
||||
protected:
|
||||
std::unique_ptr<uint8_t> buffer_;
|
||||
size_t buffer_length_;
|
||||
PackageType type_;
|
||||
};
|
||||
|
||||
|
||||
@@ -22,21 +22,27 @@
|
||||
#include "ur_rtde_driver/comm/bin_parser.h"
|
||||
#include "ur_rtde_driver/comm/pipeline.h"
|
||||
|
||||
#include "ur_rtde_driver/rtde/package_header.h"
|
||||
#include "ur_rtde_driver/rtde/control_package_pause.h"
|
||||
#include "ur_rtde_driver/rtde/control_package_setup_inputs.h"
|
||||
#include "ur_rtde_driver/rtde/control_package_setup_outputs.h"
|
||||
#include "ur_rtde_driver/rtde/control_package_start.h"
|
||||
#include "ur_rtde_driver/rtde/data_package.h"
|
||||
#include "ur_rtde_driver/rtde/text_message.h"
|
||||
#include "ur_rtde_driver/rtde/request_protocol_version.h"
|
||||
#include "ur_rtde_driver/rtde/get_urcontrol_version.h"
|
||||
#include "ur_rtde_driver/rtde/package_header.h"
|
||||
#include "ur_rtde_driver/rtde/request_protocol_version.h"
|
||||
#include "ur_rtde_driver/rtde/text_message.h"
|
||||
|
||||
namespace ur_driver
|
||||
{
|
||||
namespace rtde_interface
|
||||
{
|
||||
template <typename T>
|
||||
class RTDEParser : comm::Parser<rtde_interface::PackageHeader>
|
||||
class RTDEParser : public comm::Parser<PackageHeader>
|
||||
{
|
||||
public:
|
||||
RTDEParser() = default;
|
||||
RTDEParser() = delete;
|
||||
RTDEParser(const std::vector<std::string>& recipe) : recipe_(recipe)
|
||||
{
|
||||
}
|
||||
virtual ~RTDEParser() = default;
|
||||
|
||||
bool parse(comm::BinParser& bp, std::vector<std::unique_ptr<comm::URPackage<PackageHeader>>>& results)
|
||||
@@ -47,7 +53,7 @@ public:
|
||||
bp.parse(size);
|
||||
bp.parse(type);
|
||||
|
||||
if (!bp.checkSize(size))
|
||||
if (!bp.checkSize(size - sizeof(size) - sizeof(type)))
|
||||
{
|
||||
LOG_ERROR("Buffer len shorter than expected packet length");
|
||||
return false;
|
||||
@@ -57,12 +63,11 @@ public:
|
||||
{
|
||||
case PackageType::RTDE_DATA_PACKAGE:
|
||||
{
|
||||
// TODO: get proper recipe here
|
||||
std::vector<std::string> recipe;
|
||||
std::unique_ptr<RTDEPackage> package(new DataPackage(recipe));
|
||||
std::unique_ptr<RTDEPackage> package(new DataPackage(recipe_));
|
||||
|
||||
if (!package->parseWith(bp))
|
||||
{
|
||||
LOG_ERROR("Package parsing of type %d failed!", static_cast<int>(type));
|
||||
return false;
|
||||
}
|
||||
results.push_back(std::move(package));
|
||||
@@ -92,6 +97,7 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
std::vector<std::string> recipe_;
|
||||
RTDEPackage* package_from_type(PackageType type)
|
||||
{
|
||||
switch (type)
|
||||
@@ -105,6 +111,18 @@ private:
|
||||
case PackageType::RTDE_REQUEST_PROTOCOL_VERSION:
|
||||
return new RequestProtocolVersion;
|
||||
break;
|
||||
case PackageType::RTDE_CONTROL_PACKAGE_PAUSE:
|
||||
return new ControlPackagePause;
|
||||
break;
|
||||
case PackageType::RTDE_CONTROL_PACKAGE_SETUP_INPUTS:
|
||||
return new ControlPackageSetupInputs;
|
||||
break;
|
||||
case PackageType::RTDE_CONTROL_PACKAGE_SETUP_OUTPUTS:
|
||||
return new ControlPackageSetupOutputs;
|
||||
break;
|
||||
case PackageType::RTDE_CONTROL_PACKAGE_START:
|
||||
return new ControlPackageStart;
|
||||
break;
|
||||
default:
|
||||
return new RTDEPackage(type);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user