15 个不稳定版本 (5 个破坏性版本)
新 0.7.4 | 2024 年 8 月 19 日 |
---|---|
0.7.2 | 2024 年 4 月 19 日 |
0.6.1 | 2023 年 12 月 11 日 |
0.6.0 | 2023 年 11 月 28 日 |
0.2.0 | 2022 年 3 月 17 日 |
在 机器人学 中排名 213
每月下载量 2,002
260KB
6K SLoC
ROS2 客户端
这是一个用于 ROS2 的 Rust 原生客户端库。它不链接到 rcl、rclcpp 或任何非 Rust DDS 库。《RustDDS》用于通信。
API 与 rclcpp
或 rclpy
不完全相同,因为在 Rust 中某些部分会非常尴尬。例如,没有回调。而是使用 Rust 的 async
机制。或者,可以通过 Metal I/O 库轮询某些功能。
存在一个 .spin()
调用,但仅当需要 ros2-client
执行某些后台任务时才需要。您可以启动一个异步任务来运行它,同时保持代码中的控制流。
请参阅包含的示例,了解如何使用各种功能。
功能状态
- 主题、发布和订阅 ✅
- QoS ✅
- 序列化 ✅ - 通过 Serde
- 服务:客户端和服务器 ✅ (推荐异步)
- 动作 ✅ (必需异步)
- 发现 / ROS 图更新事件 ✅ (异步)
rosout
日志 ✅- 参数 ✅
- 参数服务(远程参数操作) ✅
- 时间支持
- ROS 时间 ✅
- 模拟时间支持 ✅
- 稳定时间 ✅
- 消息生成:从
.msg
到.rs
- 实验 - ROS 2 安全性 - 实验
版本 0.7 中的新功能
NodeName
命名空间不再允许为空字符串,因为这将导致 ROS 2 工具混淆。最小命名空间是 "/"- 支持参数,包括参数服务
- 时间支持
0.7.1
- 订阅者可以使用
take()
样本,并带有反序列化“种子”值。这允许在运行时对反序列化有更多的控制。升级到 RustDDS 0.10.0。
0.7.2
- 适应从 RustDDS 分离 CDR 编码。
0.7.4
- 为
NameError
和NodeCreateError
实现 stdError
特性。 - 异步
wait_for_writer
和wait_for_reader
结果现在实现了Send
。
版本 0.6 的新增内容
- 重新工作 ROS 2 发现实现。现在
Node
有.status_receiver()
- 异步调用
.spin()
以运行发现机制。 Client
有.wait_for_service()
- 为命名节点、主题、服务、动作以及主题、动作和服务的数据类型提供了新的 API。新的 API 结构更清晰,以避免解析字符串时可能出现的混淆和错误。
版本 0.5 的新增内容
- 支持动作
- 异步编程接口。这应该使得内置的事件循环变得不必要,因为 Rust 异步执行器已经做到了这一点。这意味着
ros2-client
不会实现类似于rclcpp::spin(..)
的调用。
示例:minimal_action_server 和 minimal_action_client
这些都是类似命名的 ROS 示例的重新实现。它们应该能够与 C++ 或 Python 中的 ROS 2 示例程序互操作。
为了测试,启动服务器,然后在另一个终端中启动客户端,例如:
ros2 run examples_rclcpp_minimal_action_server action_server_member_functions
和 cargo run --example=minimal_action_client
或
cargo run --example=minimal_action_server
和 ros2 run examples_rclpy_minimal_action_client client
你应该看到客户端请求斐波那契数列的序列,而服务器提供这些数直到达到请求的序列长度。
示例:turtle_teleop
包含的示例程序应该能够与现成的 ROS2 turtlesim 示例进行通信。
安装 ROS2 并通过 ros2 run turtlesim turtlesim_node
启动模拟器。然后运行 turtle_teleop
示例以控制模拟器。
Teleop 示例程序目前有以下键盘命令
- 光标键:移动海龟
q
或Ctrl-C
:退出r
:重置模拟器p
:更改笔的颜色(仅对 turtle1 有效)a
/b
: 创建turtle1 / turtle2A
/B
: 终止turtle1 / turtle21
/2
: 在turtle1 / turtle2之间切换控制d
/f
/g
: 触发或取消绝对旋转动作。
示例:ros2_service_server
安装ROS2。该版本已在"Galactic"版本上进行了测试,并使用eProsima FastDDS或RTI Connext DDS(rmw_connextdds
,而非rmw_connext_cpp
)进行。
启动服务器:cargo run --example=ros2_service_server
在另一个终端或计算机上,运行客户端:ros2 run examples_rclpy_minimal_client client
示例:ros2_service_client
与上面类似。
启动服务器:ros2 run examples_rclpy_minimal_service service
运行客户端:cargo run --example=ros2_service_client
相关工作
- ros2_rust是最接近官方ROS2客户端库的。它链接到用C编写的ROS2
rcl
库。 - rclrust是另一个ROS2客户端库,用于Rust。它除了支持主题外,还支持ROS2服务。它链接到ROS2库,例如
rcl
和rmw
。 - rus2存在,但自2020年9月以来似乎已经不再活跃。
许可
版权所有2022 Atostek Oy
根据Apache License,版本2.0(“许可证”);除非遵守许可证规定,否则不得使用此文件。您可以在以下位置获得许可证副本:
https://apache.ac.cn/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证中规定的特定语言管辖许可和限制,请参阅许可证。
致谢
此软件包由Atostek Oy开发和开源许可。
依赖项
~11–24MB
~395K SLoC