Universal_Robots_Client_Library
Universal Robots ROS 2 documentation
Universal Robots 客户端库
这是一个用于访问 Universal Robots 接口的 C++ 库,利用该库可以基于 C++ 实现驱动程序,创建外部应用程序来发挥 Universal Robots 机器人机械臂的多功能性。
要求
- Polyscope 软件版本:CB3 系列需 3.14.3 或更高版本,e 系列需 5.9.4 或更高版本。建议使用较新版本的软件,若无法升级,请参考兼容性表。
- 需要 POSIX 线程 实现,例如
pthread
库。 - Socket 通信基于 Linux 套接字,因此需要在 Linux 上进行编译和使用。
- 主分支需要支持 C++17 的编译器。如果不希望使用 C++17,可以使用
boost
分支,该分支依赖 Boost 库。
构建说明
请参考 构建/安装。
许可证
库的主体部分使用 Apache-2.0 许可证发布,但某些部分使用不同的许可证:
- 通信结构中的队列由 Cameron Desrochers 编写,采用 BSD-2-Clause 许可证。
- 信号量实现由 Jeff Preshing 编写,采用 zlib 许可证。
- Dockerfile 由 Arran Hobson Sayers 编写,采用 MIT 许可证。
库内容
- 基础主接口:主接口目前只实现了基本功能。
- RTDE 接口:完全支持 RTDE 接口,可以作为 RTDE 客户端使用。
- 仪表盘接口:提供了访问仪表盘服务器的功能。
- 自定义运动流:支持通过自定义 Socket 进行数据流操作,如执行运动指令。
示例驱动
examples
文件夹中提供了一个运行驱动的简单示例,启动后会读取并打印控制器的 RTDE 值。
架构
请参见 架构文档。
主接口/次接口说明
目前,库对主接口的支持有限,更多功能基于 RTDE 接口开发。comm::URStream
类可用于连接主/次接口并发送数据,但包解析尚未完全实现。
实时调度
为了确保 RTDE 消息的顺畅接收,接收线程及调用 getDataPackage()
的线程应设置为实时优先级。
生产者/消费者架构
通信通过生产者/消费者模式实现,生产者从 Socket 读取数据并将解析后的包存入队列,消费者则处理这些包。
日志配置
库使用自定义日志宏,可以根据需求创建新的日志处理程序。
更改日志级别
可以通过以下代码更改日志级别:
#include "ur_client_library/log.h"
int main(int argc, char* argv[]) {
urcl::setLogLevel(urcl::LogLevel::DEBUG);
URCL_LOG_DEBUG("Logging debug message");
return 0;
}
贡献指南
- 支持 pre-commit 进行代码格式化。
- 所有 Pull Request 需要通过管道测试。
- 公共方法的参数需有文档说明。
总结功能和用法
该库提供了几种接口来与 Universal Robots 机器人进行通信,包括基础的主接口、RTDE 接口、仪表盘接口,以及自定义的运动指令流。通过这些接口,用户可以实现对机器人实时数据的读取和运动控制。该库依赖 POSIX 线程和 Linux 套接字,因此需要在 Linux 环境下使用。开发者可以通过生产者-消费者模式来管理通信数据的流动,并根据需要进行实时调度和日志记录配置。