mirror of
https://gitlab.com/obbart/universal_robots_ros_driver.git
synced 2026-04-09 17:40:47 +02:00
doxygen documentation comm part2
This commit is contained in:
@@ -30,6 +30,12 @@ namespace ur_driver
|
|||||||
{
|
{
|
||||||
namespace comm
|
namespace comm
|
||||||
{
|
{
|
||||||
|
/*!
|
||||||
|
* \brief A general producer for URPackages. Implements funcionality to produce packages by
|
||||||
|
* reading and parsing from a byte stream.
|
||||||
|
*
|
||||||
|
* @tparam HeaderT Header type of packages to produce.
|
||||||
|
*/
|
||||||
template <typename HeaderT>
|
template <typename HeaderT>
|
||||||
class URProducer : public IProducer<HeaderT>
|
class URProducer : public IProducer<HeaderT>
|
||||||
{
|
{
|
||||||
@@ -39,10 +45,19 @@ private:
|
|||||||
std::chrono::seconds timeout_;
|
std::chrono::seconds timeout_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
/*!
|
||||||
|
* \brief Creates a URProducer object, registering a stream and a parser.
|
||||||
|
*
|
||||||
|
* \param stream The stream to read from
|
||||||
|
* \param parser The parser to use to interpret received byte information
|
||||||
|
*/
|
||||||
URProducer(URStream<HeaderT>& stream, Parser<HeaderT>& parser) : stream_(stream), parser_(parser), timeout_(1)
|
URProducer(URStream<HeaderT>& stream, Parser<HeaderT>& parser) : stream_(stream), parser_(parser), timeout_(1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Triggers the stream to connect to the robot.
|
||||||
|
*/
|
||||||
void setupProducer()
|
void setupProducer()
|
||||||
{
|
{
|
||||||
timeval tv;
|
timeval tv;
|
||||||
@@ -54,14 +69,27 @@ public:
|
|||||||
throw UrException("Failed to connect to robot. Please check if the robot is booted and connected.");
|
throw UrException("Failed to connect to robot. Please check if the robot is booted and connected.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*!
|
||||||
|
* \brief Tears down the producer. Currently no special handling needed.
|
||||||
|
*/
|
||||||
void teardownProducer()
|
void teardownProducer()
|
||||||
{
|
{
|
||||||
stopProducer();
|
stopProducer();
|
||||||
}
|
}
|
||||||
|
/*!
|
||||||
|
* \brief Stops the producer. Currently no functionality needed.
|
||||||
|
*/
|
||||||
void stopProducer()
|
void stopProducer()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Attempts to read byte stream from the robot and parse it as a URPackage.
|
||||||
|
*
|
||||||
|
* \param products Unique pointer to hold the produced package
|
||||||
|
*
|
||||||
|
* \returns Success of reading and parsing the package
|
||||||
|
*/
|
||||||
bool tryGet(std::vector<std::unique_ptr<URPackage<HeaderT>>>& products)
|
bool tryGet(std::vector<std::unique_ptr<URPackage<HeaderT>>>& products)
|
||||||
{
|
{
|
||||||
// 4KB should be enough to hold any packet received from UR
|
// 4KB should be enough to hold any packet received from UR
|
||||||
|
|||||||
@@ -37,10 +37,19 @@ namespace ur_driver
|
|||||||
{
|
{
|
||||||
namespace comm
|
namespace comm
|
||||||
{
|
{
|
||||||
|
/*!
|
||||||
|
* \brief The ReverseInterface class handles communication to the robot. It starts a server and
|
||||||
|
* waits for the robot to connect via its URCaps program.
|
||||||
|
*/
|
||||||
class ReverseInterface
|
class ReverseInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ReverseInterface() = delete;
|
ReverseInterface() = delete;
|
||||||
|
/*!
|
||||||
|
* \brief Creates a ReverseInterface object including a URServer.
|
||||||
|
*
|
||||||
|
* \param port Port the Server is started on
|
||||||
|
*/
|
||||||
ReverseInterface(uint32_t port) : server_(port)
|
ReverseInterface(uint32_t port) : server_(port)
|
||||||
{
|
{
|
||||||
if (!server_.bind())
|
if (!server_.bind())
|
||||||
@@ -52,11 +61,22 @@ public:
|
|||||||
throw std::runtime_error("Failed to accept robot connection");
|
throw std::runtime_error("Failed to accept robot connection");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*!
|
||||||
|
* \brief Disconnects possible clients so the reverse interface object can be safely destroyed.
|
||||||
|
*/
|
||||||
~ReverseInterface()
|
~ReverseInterface()
|
||||||
{
|
{
|
||||||
server_.disconnectClient();
|
server_.disconnectClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Writes needed information to the robot to be read by the URCaps program.
|
||||||
|
*
|
||||||
|
* \param positions A vector of joint position targets for the robot
|
||||||
|
* \param type An additional integer used to command the program to end when needed
|
||||||
|
*
|
||||||
|
* \returns True, if the write was performed successfully, false otherwise.
|
||||||
|
*/
|
||||||
bool write(const vector6d_t* positions, const int32_t type = 2)
|
bool write(const vector6d_t* positions, const int32_t type = 2)
|
||||||
{
|
{
|
||||||
uint8_t buffer[sizeof(uint32_t) * 7];
|
uint8_t buffer[sizeof(uint32_t) * 7];
|
||||||
@@ -80,6 +100,11 @@ public:
|
|||||||
return server_.write(buffer, sizeof(buffer), written);
|
return server_.write(buffer, sizeof(buffer), written);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Reads a keepalive signal from the robot.
|
||||||
|
*
|
||||||
|
* \returns The received keepalive string or the empty string, if nothing was received
|
||||||
|
*/
|
||||||
std::string readKeepalive()
|
std::string readKeepalive()
|
||||||
{
|
{
|
||||||
size_t buf_len = 16;
|
size_t buf_len = 16;
|
||||||
|
|||||||
@@ -36,10 +36,20 @@ namespace ur_driver
|
|||||||
{
|
{
|
||||||
namespace comm
|
namespace comm
|
||||||
{
|
{
|
||||||
|
/*!
|
||||||
|
* \brief The ScriptSender class starts a URServer for a robot to connect to and waits for a
|
||||||
|
* request to receive a program. This program is then delivered to the requesting robot.
|
||||||
|
*/
|
||||||
class ScriptSender
|
class ScriptSender
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ScriptSender() = delete;
|
ScriptSender() = delete;
|
||||||
|
/*!
|
||||||
|
* \brief Creates a ScriptSender object, including a new URServer and not yet started thread.
|
||||||
|
*
|
||||||
|
* \param port Port to start the server on
|
||||||
|
* \param program Program to send to the robot upon request
|
||||||
|
*/
|
||||||
ScriptSender(uint32_t port, const std::string& program) : server_(port), script_thread_(), program_(program)
|
ScriptSender(uint32_t port, const std::string& program) : server_(port), script_thread_(), program_(program)
|
||||||
{
|
{
|
||||||
if (!server_.bind())
|
if (!server_.bind())
|
||||||
@@ -48,6 +58,9 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Starts the thread that handles program requests by a robot.
|
||||||
|
*/
|
||||||
void start()
|
void start()
|
||||||
{
|
{
|
||||||
script_thread_ = std::thread(&ScriptSender::runScriptSender, this);
|
script_thread_ = std::thread(&ScriptSender::runScriptSender, this);
|
||||||
|
|||||||
Reference in New Issue
Block a user