#ros #websocket #json #async

roslibrust_codegen

从ROS IDL文件生成Rust类型定义的库

7个版本 (重大更新)

0.10.0 2024年7月5日
0.9.0 2024年5月13日
0.8.0 2023年10月4日
0.7.0 2023年3月13日
0.1.0 2022年8月28日

#45 in 机器人

Download history 9/week @ 2024-04-21 12/week @ 2024-04-28 31/week @ 2024-05-05 168/week @ 2024-05-12 63/week @ 2024-05-19 57/week @ 2024-05-26 25/week @ 2024-06-02 72/week @ 2024-06-09 57/week @ 2024-06-16 90/week @ 2024-06-23 132/week @ 2024-06-30 59/week @ 2024-07-07 51/week @ 2024-07-14 29/week @ 2024-07-21 74/week @ 2024-07-28

268 每月下载量
4 crates 中使用

MIT 许可证

84KB
1.5K SLoC

RosLibRust

Noetic Galactic Humble Iron License:MIT

此包旨在在ROS1的rosbridge和Rust之间提供一个方便的中介,类似于roslibpy和roslibjs。

有关协议的信息可以在此处找到。

关于文档的说明:有关crate本身的所有信息(示例、文档、教程等)都位于源代码中,可以在docs.rs上查看。此readme是关于为crate开发“元”信息的。

通过rosbridge完全支持:Noetic、Galactic、Humble。

ROS消息的代码生成

crate roslibrust_codegenroslibrust_codegen_macro 支持为ROS1和ROS2的消息、服务和动作文件生成Rust代码。许多示例都使用宏来简化操作。find_and_generate_ros_messages 是一个宏,它接受一个可选的相对于项目工作空间目录的路径列表,并且还会检查ROS_PACKAGE_PATH环境变量中指向ROS包的路径。

使用方法如下

roslibrust_codegen_macro::find_and_generate_ros_messages!("assets/ros1_common_interfaces/std_msgs");

也可以使用脚本使用与宏相同的代码生成后端来执行代码生成。请参阅example_package的内容,了解如何进行详细的示例。虽然proc_macro非常方便用于入门,但目前没有(好的)方法让proc_macro通知编译器在外部文件更改时需要重新生成。使用构建脚本需要更多的设置,但可以正确处理在编辑消息文件时重新构建。

对ROS1本机的实验性支持

如果使用 ros1 功能构建,roslibrust 会导出一些对实现节点的实验性支持,这些节点通过 TCPROS 协议与其他 ROS1 节点通信,无需 rosbridge 作为中介。请参考 ros1_talker.rsros1_listener.rs,它们位于 roslibrust/examples 目录下,了解用法。此实现相对较新,不完整,且未经测试。欢迎提交遇到的错误问题!

查看已知问题的筛选器:[链接](https://github.com/Carter12s/roslibrust/labels/ros1)

路线图

关于计划为此软件包构建的功能的粗略概述及其顺序

功能 rosbridge ROS1 ROS2
examples x
message_gen
advertise / publish x
unadvertise x
subscribe x
unsubscribe x
services x x
rosapi ✅ (目前仅限 ROS1) N/A N/A
TLS / wss:// 应该可以工作,但未经过测试 N/A N/A
ROS2 消息长度限制 计划 N/A x
cbor 计划 N/A N/A
rosbridge 状态访问 计划 N/A N/A
rosout 日志记录器 计划 x x
认证 计划 N/A N/A
碎片 / png 不确定是否支持此包 x N/A
cbor-raw 不确定是否支持此包 N/A N/A

贡献

欢迎通过报告遇到的问题和通过 PR 实现来贡献。在合并包含大量代码实现的大 PR 之前,如果还没有相关的问题,请打开一个问题,并与维护者聊天,以确保设计与所有支持的平台以及任何正在进行中的实现工作良好匹配。

开发使用的 Rust 版本

由于 cargo 1.72 默认启用了 "doctest-in-workspace",建议使用 Rust 1.72+ 进行开发。之前的 Rust 版本也支持,但在执行 doctests 时可能需要一些咒语。

运行测试

在功能标志后面有一些单元测试和集成测试。对于 ROS1 的测试,无论是通过 rosbridge 还是原生客户端,您需要一个本地运行的 rosbridge_websocket 节点和 rosmaster。然后使用以下命令运行:cargo test --features "ros1_test ros1"。对于 ROS2 的测试,您需要一个运行的 rosbridge 服务器,然后使用以下命令运行:cargo test --features "ros2_test"。您可以在 docker 目录下找到相关的 Dockerfile 和 docker compose 配置。

依赖项

~4–13MB
~138K SLoC