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 机器人
308 每月下载次数
在 geist_common 中使用
335KB
6.5K SLoC
RosLibRust
本包旨在提供一个方便的中间层,在ROS1的rosbridge和Rust之间进行交互,类似于roslibpy和roslibjs。
有关协议的信息可以在此处找到:这里。
关于文档的说明:有关crate本身的所有信息(示例、文档、教程等)都存在于源代码中,可以在docs.rs上查看。此README是为开发crate的“元”信息。
完全支持通过rosbridge:Noetic、Galactic、Humble。
ROS消息的代码生成
crates roslibrust_codegen
和 roslibrust_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.rs
和ros1_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