12 个不稳定版本 (4 个破坏性更新)
0.5.0 | 2024 年 6 月 23 日 |
---|---|
0.4.0 | 2024 年 3 月 25 日 |
0.3.1 | 2023 年 8 月 22 日 |
0.3.0 | 2023 年 7 月 25 日 |
#15 在 机器人 中
在 pcl_rs 中使用
98KB
2.5K SLoC
ROS PointCloud2
一个 PointCloud2 消息转换库。
ros_pointcloud2 使用自己的类型 PointCloud2Msg
来保持库框架的通用性。支持 ROS1 和 ROS2,可通过功能标志启用。
以下是一个示例,检查 examples
文件夹中的其他用例或查看 文档 以获取完整指南。
快速入门
use ros_pointcloud2::prelude::*;
// PointXYZ (and many others) are provided by the crate.
let cloud_points = vec![
PointXYZI::new(91.486, -4.1, 42.0001, 0.1),
PointXYZI::new(f32::MAX, f32::MIN, f32::MAX, f32::MIN),
];
let out_msg = PointCloud2Msg::try_from_vec(cloud_points).unwrap();
// Convert the ROS crate message type, we will use r2r here.
// let msg: r2r::sensor_msgs::msg::PointCloud2 = out_msg.into();
// Publish ...
// ... now incoming from a topic.
// let in_msg: PointCloud2Msg = msg.into();
let in_msg = out_msg;
let processed_cloud = in_msg.try_into_iter().unwrap()
.map(|point: PointXYZ| { // Define the info you want to have from the Msg.
// Some logic here ...
point
})
.collect::<Vec<_>>();
集成
目前有 3 个常见 ROS Crates 集成。
您可以通过启用相应的功能来使用 rosrust
和 r2r
[dependencies]
ros_pointcloud2 = { version = "*", features = ["r2r_msg"]}
# or
ros_pointcloud2 = { version = "*", features = ["rosrust_msg"]}
rclrs (ros2_rust)
由于消息是外部链接的,功能无法与 rcrls
正确工作。您需要使用标签
[dependencies]
ros_pointcloud2 = { git = "https://github.com/stelzo/ros_pointcloud2", tag = "v0.5.0_rclrs" }
此外,请将以下依赖项指示给您的包内的链接器 package.xml
<depend>std_msgs</depend>
<depend>sensor_msgs</depend>
<depend>builtin_interfaces</depend>
如果您需要其他集成,请提交问题或 PR。
性能
与 PointCloudLibrary (PCL) 转换相比,此库可以提供加速,但具体因素取决于用例和系统。请参阅 此存储库 以获取详细基准测试。
为了最大限度地减少转换开销,始终使用最适合您的用例的函数。
许可
根据您的选择,许可协议为 Apache 许可证版本 2.0 或 MIT 许可证。除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以包含在此crate中的任何贡献,都应按照上述方式双许可,不附加任何额外条款或条件。
依赖项
~0–15MB
~236K SLoC