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

Download history 289/week @ 2024-05-03 155/week @ 2024-05-10 179/week @ 2024-05-17 213/week @ 2024-05-24 199/week @ 2024-05-31 382/week @ 2024-06-07 256/week @ 2024-06-14 361/week @ 2024-06-21 443/week @ 2024-06-28 615/week @ 2024-07-05 374/week @ 2024-07-12 513/week @ 2024-07-19 541/week @ 2024-07-26 329/week @ 2024-08-02 538/week @ 2024-08-09 591/week @ 2024-08-16

每月下载量 2,002

Apache-2.0

260KB
6K SLoC

ROS2 客户端

这是一个用于 ROS2 的 Rust 原生客户端库。它不链接到 rclrclcpp 或任何非 Rust DDS 库。《RustDDS》用于通信。

API 与 rclcpprclpy 不完全相同,因为在 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

  • NameErrorNodeCreateError 实现 std Error 特性。
  • 异步 wait_for_writerwait_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_functionscargo run --example=minimal_action_client

cargo run --example=minimal_action_serverros2 run examples_rclpy_minimal_action_client client

你应该看到客户端请求斐波那契数列的序列,而服务器提供这些数直到达到请求的序列长度。

示例:turtle_teleop

包含的示例程序应该能够与现成的 ROS2 turtlesim 示例进行通信。

安装 ROS2 并通过 ros2 run turtlesim turtlesim_node 启动模拟器。然后运行 turtle_teleop 示例以控制模拟器。

Turtlesim screenshot

Teleop 示例程序目前有以下键盘命令

  • 光标键:移动海龟
  • qCtrl-C:退出
  • r:重置模拟器
  • p:更改笔的颜色(仅对 turtle1 有效)
  • a/b : 创建turtle1 / turtle2
  • A/B : 终止turtle1 / turtle2
  • 1/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库,例如rclrmw
  • rus2存在,但自2020年9月以来似乎已经不再活跃。

许可

版权所有2022 Atostek Oy

根据Apache License,版本2.0(“许可证”);除非遵守许可证规定,否则不得使用此文件。您可以在以下位置获得许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证中规定的特定语言管辖许可和限制,请参阅许可证。

致谢

此软件包由Atostek Oy开发和开源许可。

依赖项

~11–24MB
~395K SLoC