mirror of
https://gitlab.com/obbart/universal_robots_ros_driver.git
synced 2026-04-10 01:50:46 +02:00
Merge current development into release
This commit is contained in:
@@ -31,6 +31,7 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include "ur_rtde_driver/log.h"
|
#include "ur_rtde_driver/log.h"
|
||||||
#include "ur_rtde_driver/types.h"
|
#include "ur_rtde_driver/types.h"
|
||||||
|
#include "ur_rtde_driver/exceptions.h"
|
||||||
|
|
||||||
namespace ur_driver
|
namespace ur_driver
|
||||||
{
|
{
|
||||||
@@ -93,7 +94,10 @@ public:
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
T peek()
|
T peek()
|
||||||
{
|
{
|
||||||
assert(buf_pos_ + sizeof(T) <= buf_end_);
|
if (buf_pos_ + sizeof(T) > buf_end_)
|
||||||
|
throw UrException("Could not parse received package. This can occur if the driver is started while the robot is "
|
||||||
|
"booting - please restart the driver once the robot has finished booting. "
|
||||||
|
"If the problem persists after the robot has booted, please contact the package maintainer.");
|
||||||
T val;
|
T val;
|
||||||
std::memcpy(&val, buf_pos_, sizeof(T));
|
std::memcpy(&val, buf_pos_, sizeof(T));
|
||||||
return decode(val);
|
return decode(val);
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ class RTDEParser : public comm::Parser<PackageHeader>
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RTDEParser() = delete;
|
RTDEParser() = delete;
|
||||||
RTDEParser(const std::vector<std::string>& recipe) : recipe_(recipe)
|
RTDEParser(const std::vector<std::string>& recipe) : recipe_(recipe), protocol_version_(1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
virtual ~RTDEParser() = default;
|
virtual ~RTDEParser() = default;
|
||||||
@@ -98,6 +98,11 @@ public:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setProtocolVersion(uint16_t protocol_version)
|
||||||
|
{
|
||||||
|
protocol_version_ = protocol_version;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<std::string> recipe_;
|
std::vector<std::string> recipe_;
|
||||||
RTDEPackage* packageFromType(PackageType type)
|
RTDEPackage* packageFromType(PackageType type)
|
||||||
@@ -105,7 +110,7 @@ private:
|
|||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case PackageType::RTDE_TEXT_MESSAGE:
|
case PackageType::RTDE_TEXT_MESSAGE:
|
||||||
return new TextMessage;
|
return new TextMessage(protocol_version_);
|
||||||
break;
|
break;
|
||||||
case PackageType::RTDE_GET_URCONTROL_VERSION:
|
case PackageType::RTDE_GET_URCONTROL_VERSION:
|
||||||
return new GetUrcontrolVersion;
|
return new GetUrcontrolVersion;
|
||||||
@@ -129,6 +134,7 @@ private:
|
|||||||
return new RTDEPackage(type);
|
return new RTDEPackage(type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
uint16_t protocol_version_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace rtde_interface
|
} // namespace rtde_interface
|
||||||
|
|||||||
@@ -37,7 +37,8 @@ namespace rtde_interface
|
|||||||
class TextMessage : public RTDEPackage
|
class TextMessage : public RTDEPackage
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TextMessage() : RTDEPackage(PackageType::RTDE_TEXT_MESSAGE)
|
TextMessage(uint16_t protocol_version)
|
||||||
|
: RTDEPackage(PackageType::RTDE_TEXT_MESSAGE), protocol_version_(protocol_version)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
virtual ~TextMessage() = default;
|
virtual ~TextMessage() = default;
|
||||||
@@ -50,6 +51,10 @@ public:
|
|||||||
uint8_t source_length_;
|
uint8_t source_length_;
|
||||||
std::string source_;
|
std::string source_;
|
||||||
uint8_t warning_level_;
|
uint8_t warning_level_;
|
||||||
|
|
||||||
|
uint8_t message_type_;
|
||||||
|
|
||||||
|
uint16_t protocol_version_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace rtde_interface
|
} // namespace rtde_interface
|
||||||
|
|||||||
@@ -74,6 +74,8 @@ bool RTDEClient::init()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
parser_.setProtocolVersion(protocol_version);
|
||||||
|
|
||||||
// determine maximum frequency from ur-control version
|
// determine maximum frequency from ur-control version
|
||||||
size = GetUrcontrolVersionRequest::generateSerializedRequest(buffer);
|
size = GetUrcontrolVersionRequest::generateSerializedRequest(buffer);
|
||||||
stream_.write(buffer, size, written);
|
stream_.write(buffer, size, written);
|
||||||
|
|||||||
@@ -33,11 +33,19 @@ namespace rtde_interface
|
|||||||
{
|
{
|
||||||
bool TextMessage::parseWith(comm::BinParser& bp)
|
bool TextMessage::parseWith(comm::BinParser& bp)
|
||||||
{
|
{
|
||||||
bp.parse(message_length_);
|
if (protocol_version_ == 2)
|
||||||
bp.parse(message_, message_length_);
|
{
|
||||||
bp.parse(source_length_);
|
bp.parse(message_length_);
|
||||||
bp.parse(source_, source_length_);
|
bp.parse(message_, message_length_);
|
||||||
bp.parse(warning_level_);
|
bp.parse(source_length_);
|
||||||
|
bp.parse(source_, source_length_);
|
||||||
|
bp.parse(warning_level_);
|
||||||
|
}
|
||||||
|
else if (protocol_version_ == 1)
|
||||||
|
{
|
||||||
|
bp.parse(message_type_);
|
||||||
|
bp.parseRemainder(message_);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user