Compare commits
3 Commits
47b09c60af
...
6d7c6ecfc6
| Author | SHA1 | Date |
|---|---|---|
|
|
6d7c6ecfc6 | |
|
|
1fcf75be89 | |
|
|
ace63f83d1 |
|
|
@ -1,21 +0,0 @@
|
||||||
name: r2r_galactic
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches-ignore:
|
|
||||||
- rclrs
|
|
||||||
pull_request:
|
|
||||||
branches-ignore:
|
|
||||||
- rclrs
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
env:
|
|
||||||
CARGO_TERM_COLOR: always
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
tests_galactic:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- run: docker build . --file ./rpcl2/tests/Dockerfile_r2r_galactic --tag r2r_galactic
|
|
||||||
- run: docker run r2r_galactic cargo test --features r2r_msg,derive,nalgebra,rayon
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
name: r2r_humble
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches-ignore:
|
|
||||||
- rclrs
|
|
||||||
pull_request:
|
|
||||||
branches-ignore:
|
|
||||||
- rclrs
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
env:
|
|
||||||
CARGO_TERM_COLOR: always
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
tests_humble:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- run: docker build . --file ./rpcl2/tests/Dockerfile_r2r_humble --tag r2r_humble
|
|
||||||
- run: docker run r2r_humble cargo test --features r2r_msg,derive,nalgebra,rayon
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
name: r2r_iron
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches-ignore:
|
|
||||||
- rclrs
|
|
||||||
pull_request:
|
|
||||||
branches-ignore:
|
|
||||||
- rclrs
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
env:
|
|
||||||
CARGO_TERM_COLOR: always
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
tests_humble:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- run: docker build . --file ./rpcl2/tests/Dockerfile_r2r_iron --tag r2r_iron
|
|
||||||
- run: docker run r2r_iron cargo test --features r2r_msg,derive,nalgebra,rayon
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
name: rclrs_humble
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- rclrs
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- rclrs
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
env:
|
|
||||||
CARGO_TERM_COLOR: always
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
tests_humble:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- run: docker build . --file ./rpcl2/tests/Dockerfile_rclrs_humble --tag rclrs_humble
|
|
||||||
- run: docker run rclrs_humble cargo test --features derive,nalgebra,rayon
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
name: rclrs_iron
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- rclrs
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- rclrs
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
env:
|
|
||||||
CARGO_TERM_COLOR: always
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
tests_iron:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- run: docker build . --file ./rpcl2/tests/Dockerfile_rclrs_iron --tag rclrs_iron
|
|
||||||
- run: docker run rclrs_iron cargo test --features derive,nalgebra,rayon
|
|
||||||
|
|
@ -1,108 +0,0 @@
|
||||||
name: rosrust_noetic
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches-ignore:
|
|
||||||
- rclrs
|
|
||||||
pull_request:
|
|
||||||
branches-ignore:
|
|
||||||
- rclrs
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
env:
|
|
||||||
ROS_CI_DESKTOP: "`lsb_release -cs`" # e.g. [trusty|xenial|...]
|
|
||||||
# CI_SOURCE_PATH: $(pwd)
|
|
||||||
ROSINSTALL_FILE: $CI_SOURCE_PATH/dependencies.rosinstall
|
|
||||||
CATKIN_OPTIONS: $CI_SOURCE_PATH/catkin.options
|
|
||||||
ROS_PARALLEL_JOBS: "-j8 -l6"
|
|
||||||
# Set the python path manually to include /usr/-/python2.7/dist-packages
|
|
||||||
# as this is where apt-get installs python packages.
|
|
||||||
PYTHONPATH: $PYTHONPATH:/usr/lib/python2.7/dist-packages:/usr/local/lib/python2.7/dist-packages
|
|
||||||
ROS_DISTRO: noetic
|
|
||||||
steps:
|
|
||||||
- name: rosrust
|
|
||||||
uses: actions/checkout@v1
|
|
||||||
- name: Install latest rust
|
|
||||||
run: |
|
|
||||||
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh -s -- -y
|
|
||||||
rustc --version
|
|
||||||
cargo --version
|
|
||||||
- name: Configure ROS for install
|
|
||||||
run: |
|
|
||||||
sudo sh -c "echo \"deb http://packages.ros.org/ros/ubuntu $ROS_CI_DESKTOP main\" > /etc/apt/sources.list.d/ros-latest.list"
|
|
||||||
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
|
|
||||||
sudo apt-get update -qq
|
|
||||||
sudo apt-get install dpkg
|
|
||||||
sudo apt-get install -y libyaml-cpp-dev
|
|
||||||
- name: Install ROS basic packages
|
|
||||||
run: |
|
|
||||||
sudo apt-get install -y python3-catkin-pkg
|
|
||||||
sudo apt-get install -y python3-catkin-tools
|
|
||||||
sudo apt-get install -y python3-rosdep
|
|
||||||
sudo apt-get install -y python3-wstool
|
|
||||||
sudo apt-get install -y python3-osrf-pycommon
|
|
||||||
sudo apt-get install -y ros-cmake-modules
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-ros-base
|
|
||||||
source /opt/ros/$ROS_DISTRO/setup.bash
|
|
||||||
sudo rosdep init
|
|
||||||
rosdep update # --include-eol-distros # Support EOL distros.
|
|
||||||
- name: Install ROS additional packages
|
|
||||||
# Does installing these mean rosrust_msg builds more messages, which is a better
|
|
||||||
# check? Or does it just slow down the action?
|
|
||||||
run: |
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-actionlib
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-actionlib-msgs
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-camera-info-manager
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-compressed-image-transport
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-catkin
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-class-loader
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-cmake-modules
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-cv-bridge
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-dynamic-reconfigure
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-ddynamic-reconfigure
|
|
||||||
# Not in noetic yet
|
|
||||||
# sudo apt-get install -y ros-$ROS_DISTRO-ddynamic-reconfigure-python
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-eigen-conversions
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-geometry-msgs
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-genmsg
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-image-geometry
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-image-proc
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-image-transport
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-message-generation
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-message-runtime
|
|
||||||
# sudo apt-get install -y ros-$ROS_DISTRO-nodelet-core
|
|
||||||
# sudo apt-get install -y ros-$ROS_DISTRO-nodelet-topic-tools
|
|
||||||
# sudo apt-get install -y ros-$ROS_DISTRO-pcl-conversions
|
|
||||||
# sudo apt-get install -y ros-$ROS_DISTRO-pcl-ros
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-pluginlib
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-roscpp
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-roslib
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-roslint
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-rospy
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-rospy-message-converter
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-rostest
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-sensor-msgs
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-std-msgs
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-tf
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-tf-conversions
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-tf2-geometry-msgs
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-tf2-msgs
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-tf2-py
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-tf2-ros
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-tf2-sensor-msgs
|
|
||||||
- name: build
|
|
||||||
run: |
|
|
||||||
source /opt/ros/$ROS_DISTRO/setup.bash
|
|
||||||
cargo build # --verbose
|
|
||||||
- name: Install ROS packages for tests
|
|
||||||
run: |
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-actionlib-tutorials
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-roscpp-tutorials
|
|
||||||
sudo apt-get install -y ros-$ROS_DISTRO-rospy-tutorials
|
|
||||||
- name: test
|
|
||||||
run: |
|
|
||||||
source /opt/ros/$ROS_DISTRO/setup.bash
|
|
||||||
cargo test --features rosrust_msg,derive,nalgebra,rayon
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
[workspace]
|
[workspace]
|
||||||
|
|
||||||
members = [ "derive-test","rpcl2", "rpcl2-derive"]
|
members = ["derive-test", "ros_pointcloud2", "rpcl2-derive"]
|
||||||
|
|
||||||
resolver = "2"
|
resolver = "2"
|
||||||
|
|
|
||||||
|
|
@ -43,8 +43,8 @@ let processed_cloud = in_msg.try_into_iter().unwrap()
|
||||||
|
|
||||||
There are currently 3 integrations for common ROS crates.
|
There are currently 3 integrations for common ROS crates.
|
||||||
|
|
||||||
- [rosrust_msg](https://github.com/adnanademovic/rosrust)
|
- [roslibrust_msg](https://github.com/roslibrust/roslibrust)
|
||||||
- [](https://github.com/stelzo/ros_pointcloud2/actions/workflows/rosrust_noetic.yml)
|
- TBD roslibrust test to replace old rosrust one
|
||||||
- [r2r_msg](https://github.com/sequenceplanner/r2r)
|
- [r2r_msg](https://github.com/sequenceplanner/r2r)
|
||||||
- [](https://github.com/stelzo/ros_pointcloud2/actions/workflows/r2r_galactic.yml)
|
- [](https://github.com/stelzo/ros_pointcloud2/actions/workflows/r2r_galactic.yml)
|
||||||
- [](https://github.com/stelzo/ros_pointcloud2/actions/workflows/r2r_humble.yml)
|
- [](https://github.com/stelzo/ros_pointcloud2/actions/workflows/r2r_humble.yml)
|
||||||
|
|
@ -55,13 +55,14 @@ There are currently 3 integrations for common ROS crates.
|
||||||
- [](https://github.com/stelzo/ros_pointcloud2/actions/workflows/rclrs_iron.yml)
|
- [](https://github.com/stelzo/ros_pointcloud2/actions/workflows/rclrs_iron.yml)
|
||||||
- [](https://github.com/stelzo/ros_pointcloud2/actions/workflows/rclrs_jazzy.yml)
|
- [](https://github.com/stelzo/ros_pointcloud2/actions/workflows/rclrs_jazzy.yml)
|
||||||
|
|
||||||
You can use `rosrust` and `r2r` by enabling the respective feature:
|
You can use `roslibrust` and `r2r` by enabling the respective feature:
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
[dependencies]
|
[dependencies]
|
||||||
ros_pointcloud2 = { version = "*", features = ["r2r_msg"]}
|
ros_pointcloud2 = { version = "*", features = ["r2r_msg"]}
|
||||||
# or
|
# or
|
||||||
ros_pointcloud2 = { version = "*", features = ["rosrust_msg"]}
|
# ros_pointcloud2 = { version = "*", features = ["roslibrust_msg"]}
|
||||||
|
ros_pointcloud2 = { version = "*", features = ["roslibrust_msg"]}
|
||||||
```
|
```
|
||||||
|
|
||||||
### rclrs (ros2_rust)
|
### rclrs (ros2_rust)
|
||||||
|
|
|
||||||
|
|
@ -15,5 +15,5 @@ categories = [
|
||||||
]
|
]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
ros_pointcloud2 = { path = "../rpcl2", features = ["std", "derive"] }
|
ros_pointcloud2 = { path = "../ros_pointcloud2", features = ["std", "derive"] }
|
||||||
rpcl2-derive = { path = "../rpcl2-derive" }
|
rpcl2-derive = { path = "../rpcl2-derive" }
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "ros_pointcloud2"
|
name = "ros_pointcloud2"
|
||||||
version = "0.5.0"
|
version = "0.6.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
authors = ["Christopher Sieh <stelzo@steado.de>"]
|
authors = ["Christopher Sieh <stelzo@steado.de>"]
|
||||||
description = "Customizable conversions for working with sensor_msgs/PointCloud2."
|
description = "Customizable conversions for working with sensor_msgs/PointCloud2."
|
||||||
|
|
@ -31,8 +31,6 @@ exclude = [
|
||||||
rust-version = "1.63"
|
rust-version = "1.63"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
rosrust_msg = { version = "0.1", optional = true }
|
|
||||||
rosrust = { version = "0.9.11", optional = true }
|
|
||||||
r2r = { version = "0.9", optional = true }
|
r2r = { version = "0.9", optional = true }
|
||||||
rayon = { version = "1", optional = true }
|
rayon = { version = "1", optional = true }
|
||||||
nalgebra = { version = "0.33", optional = true, default-features = false }
|
nalgebra = { version = "0.33", optional = true, default-features = false }
|
||||||
|
|
@ -40,16 +38,14 @@ rpcl2-derive = { version = "0.3", optional = true, path = "../rpcl2-derive" }
|
||||||
memoffset = { version = "0.9", optional = true }
|
memoffset = { version = "0.9", optional = true }
|
||||||
|
|
||||||
[dependencies.roslibrust]
|
[dependencies.roslibrust]
|
||||||
version = "0.10.2"
|
git = "https://github.com/lucasw/roslibrust"
|
||||||
optional = true
|
branch = "get_rx_msg_def_v0_12"
|
||||||
features = ["ros1"]
|
features = ["ros1"]
|
||||||
|
|
||||||
[dependencies.roslibrust_codegen]
|
|
||||||
version = "0.10"
|
|
||||||
optional = true
|
optional = true
|
||||||
|
|
||||||
[dependencies.roslibrust_codegen_macro]
|
[dependencies.roslibrust_util]
|
||||||
version = "0.10"
|
git = "https://github.com/lucasw/tf_roslibrust"
|
||||||
|
version = "0.2.0"
|
||||||
optional = true
|
optional = true
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
|
|
@ -63,8 +59,7 @@ harness = false
|
||||||
path = "benches/roundtrip.rs"
|
path = "benches/roundtrip.rs"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
roslibrust_msg = ["dep:roslibrust", "dep:roslibrust_codegen", "dep:roslibrust_codegen_macro"]
|
roslibrust_msg = ["dep:roslibrust", "dep:roslibrust_util"]
|
||||||
rosrust_msg = ["dep:rosrust_msg", "dep:rosrust"]
|
|
||||||
r2r_msg = ["dep:r2r"]
|
r2r_msg = ["dep:r2r"]
|
||||||
rayon = ["dep:rayon"]
|
rayon = ["dep:rayon"]
|
||||||
derive = ["dep:rpcl2-derive", "dep:memoffset"]
|
derive = ["dep:rpcl2-derive", "dep:memoffset"]
|
||||||
|
|
@ -15,15 +15,15 @@ use alloc::vec::Vec;
|
||||||
/// When using within a ROS node, the PointCloud2 (created by the ROS crate) must be converted first.
|
/// When using within a ROS node, the PointCloud2 (created by the ROS crate) must be converted first.
|
||||||
/// The cost of this operation is low, as it mostly moves ownership without iterating over the point data.
|
/// The cost of this operation is low, as it mostly moves ownership without iterating over the point data.
|
||||||
///
|
///
|
||||||
/// ROS1 with rosrust:
|
/// ROS1 with roslibrust:
|
||||||
/// let msg: rosrust_msg::sensor_msgs::PointCloud2; // inside the callback
|
/// let msg: roslibrust_msg::sensor_msgs::PointCloud2; // inside the callback
|
||||||
/// let converted: ros_pointcloud2::PointCloud2Msg = msg.into();
|
/// let converted: ros_pointcloud2::PointCloud2Msg = msg.into();
|
||||||
///
|
///
|
||||||
/// ROS2 with r2r:
|
/// ROS2 with r2r:
|
||||||
/// let msg: r2r::sensor_msgs::msg::PointCloud2 = internal_msg.into();
|
/// let msg: r2r::sensor_msgs::msg::PointCloud2 = internal_msg.into();
|
||||||
/// let converted: ros_pointcloud2::PointCloud2Msg = msg.into();
|
/// let converted: ros_pointcloud2::PointCloud2Msg = msg.into();
|
||||||
///
|
///
|
||||||
/// `ros_pointcloud2` supports r2r, rclrs and rosrust as conversion targets out of the box via feature flags.
|
/// `ros_pointcloud2` supports r2r, rclrs and roslibrust as conversion targets out of the box via feature flags.
|
||||||
///
|
///
|
||||||
pub struct PointCloudIterator<const N: usize, C>
|
pub struct PointCloudIterator<const N: usize, C>
|
||||||
where
|
where
|
||||||
|
|
@ -54,7 +54,7 @@
|
||||||
//!
|
//!
|
||||||
//! # Features
|
//! # Features
|
||||||
//! - r2r_msg — Integration for the ROS2 library [r2r](https://github.com/sequenceplanner/r2r).
|
//! - r2r_msg — Integration for the ROS2 library [r2r](https://github.com/sequenceplanner/r2r).
|
||||||
//! - rosrust_msg — Integration with the [rosrust](https://github.com/adnanademovic/rosrust) library for ROS1 message types.
|
//! - roslibrust_msg — Integration with the [roslibrust](https://github.com/roslibrust/roslibrust) library for ROS1 message types.
|
||||||
//! - (rclrs_msg) — Integration for ROS2 [rclrs](https://github.com/ros2-rust/ros2_rust) but it currently needs [this workaround](https://github.com/stelzo/ros_pointcloud2?tab=readme-ov-file#rclrs-ros2_rust).
|
//! - (rclrs_msg) — Integration for ROS2 [rclrs](https://github.com/ros2-rust/ros2_rust) but it currently needs [this workaround](https://github.com/stelzo/ros_pointcloud2?tab=readme-ov-file#rclrs-ros2_rust).
|
||||||
//! - derive — Offers implementations for the [`PointConvertible`] trait needed for custom points.
|
//! - derive — Offers implementations for the [`PointConvertible`] trait needed for custom points.
|
||||||
//! - rayon — Parallel iterator support for `_par_iter` functions.
|
//! - rayon — Parallel iterator support for `_par_iter` functions.
|
||||||
|
|
@ -26,7 +26,13 @@
|
||||||
use alloc::string::String;
|
use alloc::string::String;
|
||||||
|
|
||||||
#[cfg(feature = "roslibrust_msg")]
|
#[cfg(feature = "roslibrust_msg")]
|
||||||
roslibrust_codegen_macro::find_and_generate_ros_messages!();
|
use roslibrust::codegen::integral_types::Time as RosTime;
|
||||||
|
|
||||||
|
#[cfg(feature = "roslibrust_msg")]
|
||||||
|
use roslibrust_util::sensor_msgs;
|
||||||
|
|
||||||
|
#[cfg(feature = "roslibrust_msg")]
|
||||||
|
use roslibrust_util::std_msgs;
|
||||||
|
|
||||||
/// [Time](https://docs.ros2.org/latest/api/builtin_interfaces/msg/Time.html) representation for ROS messages.
|
/// [Time](https://docs.ros2.org/latest/api/builtin_interfaces/msg/Time.html) representation for ROS messages.
|
||||||
#[derive(Clone, Debug, Default)]
|
#[derive(Clone, Debug, Default)]
|
||||||
|
|
@ -36,21 +42,11 @@ pub struct TimeMsg {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "roslibrust_msg")]
|
#[cfg(feature = "roslibrust_msg")]
|
||||||
impl From<roslibrust_codegen::Time> for TimeMsg {
|
impl From<RosTime> for TimeMsg {
|
||||||
fn from(time: roslibrust_codegen::Time) -> Self {
|
fn from(time: RosTime) -> Self {
|
||||||
Self {
|
Self {
|
||||||
sec: time.secs as i32,
|
sec: time.secs as i32,
|
||||||
nanosec: time.nsecs,
|
nanosec: time.nsecs as u32,
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "rosrust_msg")]
|
|
||||||
impl From<rosrust::Time> for TimeMsg {
|
|
||||||
fn from(time: rosrust::Time) -> Self {
|
|
||||||
Self {
|
|
||||||
sec: time.sec as i32,
|
|
||||||
nanosec: time.nsec,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -172,7 +168,7 @@ impl From<sensor_msgs::PointCloud2> for crate::PointCloud2Msg {
|
||||||
seq: msg.header.seq,
|
seq: msg.header.seq,
|
||||||
stamp: TimeMsg {
|
stamp: TimeMsg {
|
||||||
sec: msg.header.stamp.secs as i32,
|
sec: msg.header.stamp.secs as i32,
|
||||||
nanosec: msg.header.stamp.nsecs,
|
nanosec: msg.header.stamp.nsecs as u32,
|
||||||
},
|
},
|
||||||
frame_id: msg.header.frame_id,
|
frame_id: msg.header.frame_id,
|
||||||
},
|
},
|
||||||
|
|
@ -213,9 +209,9 @@ impl From<crate::PointCloud2Msg> for sensor_msgs::PointCloud2 {
|
||||||
sensor_msgs::PointCloud2 {
|
sensor_msgs::PointCloud2 {
|
||||||
header: std_msgs::Header {
|
header: std_msgs::Header {
|
||||||
seq: msg.header.seq,
|
seq: msg.header.seq,
|
||||||
stamp: roslibrust_codegen::Time {
|
stamp: RosTime {
|
||||||
secs: msg.header.stamp.sec as u32,
|
secs: msg.header.stamp.sec,
|
||||||
nsecs: msg.header.stamp.nanosec,
|
nsecs: msg.header.stamp.nanosec as i32,
|
||||||
},
|
},
|
||||||
frame_id: msg.header.frame_id,
|
frame_id: msg.header.frame_id,
|
||||||
},
|
},
|
||||||
|
|
@ -247,87 +243,3 @@ impl From<crate::PointCloud2Msg> for sensor_msgs::PointCloud2 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "rosrust_msg")]
|
|
||||||
impl From<rosrust_msg::sensor_msgs::PointCloud2> for crate::PointCloud2Msg {
|
|
||||||
fn from(msg: rosrust_msg::sensor_msgs::PointCloud2) -> Self {
|
|
||||||
Self {
|
|
||||||
header: HeaderMsg {
|
|
||||||
seq: msg.header.seq,
|
|
||||||
stamp: TimeMsg {
|
|
||||||
sec: msg.header.stamp.sec as i32,
|
|
||||||
nanosec: msg.header.stamp.nsec,
|
|
||||||
},
|
|
||||||
frame_id: msg.header.frame_id,
|
|
||||||
},
|
|
||||||
dimensions: crate::CloudDimensions {
|
|
||||||
width: msg.width,
|
|
||||||
height: msg.height,
|
|
||||||
},
|
|
||||||
fields: msg
|
|
||||||
.fields
|
|
||||||
.into_iter()
|
|
||||||
.map(|field| PointFieldMsg {
|
|
||||||
name: field.name,
|
|
||||||
offset: field.offset,
|
|
||||||
datatype: field.datatype,
|
|
||||||
count: field.count,
|
|
||||||
})
|
|
||||||
.collect(),
|
|
||||||
endian: if msg.is_bigendian {
|
|
||||||
crate::Endian::Big
|
|
||||||
} else {
|
|
||||||
crate::Endian::Little
|
|
||||||
},
|
|
||||||
point_step: msg.point_step,
|
|
||||||
row_step: msg.row_step,
|
|
||||||
data: msg.data,
|
|
||||||
dense: if msg.is_dense {
|
|
||||||
crate::Denseness::Dense
|
|
||||||
} else {
|
|
||||||
crate::Denseness::Sparse
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "rosrust_msg")]
|
|
||||||
impl From<crate::PointCloud2Msg> for rosrust_msg::sensor_msgs::PointCloud2 {
|
|
||||||
fn from(msg: crate::PointCloud2Msg) -> Self {
|
|
||||||
rosrust_msg::sensor_msgs::PointCloud2 {
|
|
||||||
header: rosrust_msg::std_msgs::Header {
|
|
||||||
seq: msg.header.seq,
|
|
||||||
stamp: rosrust::Time {
|
|
||||||
sec: msg.header.stamp.sec as u32,
|
|
||||||
nsec: msg.header.stamp.nanosec,
|
|
||||||
},
|
|
||||||
frame_id: msg.header.frame_id,
|
|
||||||
},
|
|
||||||
height: msg.dimensions.height,
|
|
||||||
width: msg.dimensions.width,
|
|
||||||
fields: msg
|
|
||||||
.fields
|
|
||||||
.into_iter()
|
|
||||||
.map(|field| rosrust_msg::sensor_msgs::PointField {
|
|
||||||
name: field.name,
|
|
||||||
offset: field.offset,
|
|
||||||
datatype: field.datatype,
|
|
||||||
count: field.count,
|
|
||||||
})
|
|
||||||
.collect(),
|
|
||||||
is_bigendian: if msg.endian == crate::Endian::Big {
|
|
||||||
true
|
|
||||||
} else {
|
|
||||||
false
|
|
||||||
},
|
|
||||||
point_step: msg.point_step,
|
|
||||||
row_step: msg.row_step,
|
|
||||||
data: msg.data,
|
|
||||||
is_dense: if msg.dense == crate::Denseness::Dense {
|
|
||||||
true
|
|
||||||
} else {
|
|
||||||
false
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#[cfg(feature = "rosrust_msg")]
|
#[cfg(feature = "roslibrust_msg")]
|
||||||
#[test]
|
#[test]
|
||||||
fn convertxyz_rosrust_msg() {
|
fn convertxyz_roslibrust_msg() {
|
||||||
use ros_pointcloud2::{points::PointXYZ, PointCloud2Msg};
|
use ros_pointcloud2::{points::PointXYZ, PointCloud2Msg};
|
||||||
|
|
||||||
let cloud = vec![
|
let cloud = vec![
|
||||||
|
|
@ -22,8 +22,8 @@ fn convertxyz_rosrust_msg() {
|
||||||
];
|
];
|
||||||
let copy = cloud.clone();
|
let copy = cloud.clone();
|
||||||
let internal_cloud = PointCloud2Msg::try_from_iter(cloud).unwrap();
|
let internal_cloud = PointCloud2Msg::try_from_iter(cloud).unwrap();
|
||||||
let rosrust_msg_cloud: rosrust_msg::sensor_msgs::PointCloud2 = internal_cloud.into();
|
let roslibrust_msg_cloud: roslibrust_util::sensor_msgs::PointCloud2 = internal_cloud.into();
|
||||||
let convert_back_internal: PointCloud2Msg = rosrust_msg_cloud.into();
|
let convert_back_internal: PointCloud2Msg = roslibrust_msg_cloud.into();
|
||||||
let to_convert = convert_back_internal.try_into_iter().unwrap();
|
let to_convert = convert_back_internal.try_into_iter().unwrap();
|
||||||
let back_to_type = to_convert.collect::<Vec<PointXYZ>>();
|
let back_to_type = to_convert.collect::<Vec<PointXYZ>>();
|
||||||
assert_eq!(copy, back_to_type);
|
assert_eq!(copy, back_to_type);
|
||||||
Loading…
Reference in New Issue