#ros #point-cloud #message #api-bindings #pointcloud2

无需 std ros_pointcloud2

用于处理 sensor_msgs/PointCloud2 的自定义转换

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 中使用

MIT/Apache

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 集成。

您可以通过启用相应的功能来使用 rosrustr2r

[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.0MIT 许可证
除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以包含在此crate中的任何贡献,都应按照上述方式双许可,不附加任何额外条款或条件。

依赖项

~0–15MB
~236K SLoC