#ros #websocket #json #async

roslibrust

一个用于与ROS的rosbridge_server交互的库

12 个版本 (7 个重大更新)

0.10.2 2024年7月31日
0.9.0 2024年5月13日
0.8.0 2023年10月4日
0.7.0 2023年3月13日
0.5.2 2022年10月31日

#8 in 机器人

Download history 31/week @ 2024-05-04 157/week @ 2024-05-11 49/week @ 2024-05-18 49/week @ 2024-05-25 16/week @ 2024-06-01 60/week @ 2024-06-08 36/week @ 2024-06-15 80/week @ 2024-06-22 106/week @ 2024-06-29 171/week @ 2024-07-06 43/week @ 2024-07-13 22/week @ 2024-07-20 162/week @ 2024-07-27 59/week @ 2024-08-03 42/week @ 2024-08-10 43/week @ 2024-08-17

308 每月下载次数
geist_common 中使用

MIT 许可证

335KB
6.5K SLoC

RosLibRust

Noetic Galactic Humble Iron License:MIT

本包旨在提供一个方便的中间层,在ROS1的rosbridge和Rust之间进行交互,类似于roslibpy和roslibjs。

有关协议的信息可以在此处找到:这里

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

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

ROS消息的代码生成

crates roslibrust_codegenroslibrust_codegen_macro 支持在Rust中为ROS1和ROS2的消息、服务和动作文件生成代码。许多示例使用宏来简化操作。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

路线图

该crate计划构建的功能概览及其顺序

功能 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
fragment / 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配置。

依赖

~8–22MB
~332K SLoC