#[macro_export]
macro_rules! rosmsg_include {
( $($ns:ident / $msg:ident),* $(,)?) => {
::rosrust::rosmsg_include!(
geometry_msgs/Point,
geometry_msgs/Pose,
geometry_msgs/Quaternion,
geometry_msgs/Transform,
geometry_msgs/Vector3,
$($ns/$msg),*
);
::ros_nalgebra::ros_nalgebra!(self);
}
}
#[macro_export]
macro_rules! ros_nalgebra_msg {
($ns:ident, Vector3) => {
impl From<$ns::geometry_msgs::Vector3> for ::nalgebra::Vector3<f64> {
fn from(vec_msg: $ns::geometry_msgs::Vector3) -> Self {
::nalgebra::Vector3::new(vec_msg.x, vec_msg.y, vec_msg.z)
}
}
impl From<::nalgebra::Vector3<f64>> for $ns::geometry_msgs::Vector3 {
fn from(vec: ::nalgebra::Vector3<f64>) -> Self {
$ns::geometry_msgs::Vector3 {
x: vec.x,
y: vec.y,
z: vec.z,
}
}
}
impl From<$ns::geometry_msgs::Vector3> for ::nalgebra::Translation3<f64> {
fn from(vec_msg: $ns::geometry_msgs::Vector3) -> Self {
::nalgebra::Translation3::new(vec_msg.x, vec_msg.y, vec_msg.z)
}
}
impl From<::nalgebra::Translation3<f64>> for $ns::geometry_msgs::Vector3 {
fn from(p: ::nalgebra::Translation3<f64>) -> Self {
$ns::geometry_msgs::Vector3 {
x: p.vector.x,
y: p.vector.y,
z: p.vector.z,
}
}
}
};
($ns:ident, Point) => {
impl From<$ns::geometry_msgs::Point> for ::nalgebra::Translation3<f64> {
fn from(vec_msg: $ns::geometry_msgs::Point) -> Self {
::nalgebra::Translation3::new(vec_msg.x, vec_msg.y, vec_msg.z)
}
}
impl From<::nalgebra::Translation3<f64>> for $ns::geometry_msgs::Point {
fn from(p: ::nalgebra::Translation3<f64>) -> Self {
$ns::geometry_msgs::Point {
x: p.vector.x,
y: p.vector.y,
z: p.vector.z,
}
}
}
impl From<$ns::geometry_msgs::Point> for ::nalgebra::Point3<f64> {
fn from(vec_msg: $ns::geometry_msgs::Point) -> Self {
::nalgebra::Point3::new(vec_msg.x, vec_msg.y, vec_msg.z)
}
}
impl From<::nalgebra::Point3<f64>> for $ns::geometry_msgs::Point {
fn from(p: ::nalgebra::Point3<f64>) -> Self {
$ns::geometry_msgs::Point {
x: p.coords.x,
y: p.coords.y,
z: p.coords.z,
}
}
}
};
($ns:ident, Quaternion) => {
impl From<$ns::geometry_msgs::Quaternion> for ::nalgebra::UnitQuaternion<f64> {
fn from(q_msg: $ns::geometry_msgs::Quaternion) -> Self {
::nalgebra::UnitQuaternion::from_quaternion(::nalgebra::Quaternion::new(
q_msg.w, q_msg.x, q_msg.y, q_msg.z,
))
}
}
impl From<::nalgebra::UnitQuaternion<f64>> for $ns::geometry_msgs::Quaternion {
fn from(q: ::nalgebra::UnitQuaternion<f64>) -> Self {
$ns::geometry_msgs::Quaternion {
x: q.coords.x,
y: q.coords.y,
z: q.coords.z,
w: q.coords.w,
}
}
}
impl From<$ns::geometry_msgs::Quaternion> for ::nalgebra::Quaternion<f64> {
fn from(q_msg: $ns::geometry_msgs::Quaternion) -> Self {
::nalgebra::Quaternion::new(q_msg.w, q_msg.x, q_msg.y, q_msg.z)
}
}
impl From<::nalgebra::Quaternion<f64>> for $ns::geometry_msgs::Quaternion {
fn from(q: ::nalgebra::Quaternion<f64>) -> Self {
$ns::geometry_msgs::Quaternion {
x: q.coords.x,
y: q.coords.y,
z: q.coords.z,
w: q.coords.w,
}
}
}
};
($ns:ident, Pose) => {
impl From<$ns::geometry_msgs::Pose> for ::nalgebra::Isometry3<f64> {
fn from(pose_msg: $ns::geometry_msgs::Pose) -> Self {
::nalgebra::Isometry3::from_parts(
pose_msg.position.into(),
pose_msg.orientation.into(),
)
}
}
impl From<::nalgebra::Isometry3<f64>> for $ns::geometry_msgs::Pose {
fn from(pose: ::nalgebra::Isometry3<f64>) -> Self {
$ns::geometry_msgs::Pose {
position: pose.translation.into(),
orientation: pose.rotation.into(),
}
}
}
};
($ns:ident, Transform) => {
impl From<$ns::geometry_msgs::Transform> for ::nalgebra::Isometry3<f64> {
fn from(pose_msg: $ns::geometry_msgs::Transform) -> Self {
::nalgebra::Isometry3::from_parts(
pose_msg.translation.into(),
pose_msg.rotation.into(),
)
}
}
impl From<::nalgebra::Isometry3<f64>> for $ns::geometry_msgs::Transform {
fn from(pose: ::nalgebra::Isometry3<f64>) -> Self {
$ns::geometry_msgs::Transform {
translation: pose.translation.into(),
rotation: pose.rotation.into(),
}
}
}
};
}
#[macro_export]
macro_rules! ros_nalgebra {
($ns:ident) => {
::ros_nalgebra::ros_nalgebra_msg!($ns, Point);
::ros_nalgebra::ros_nalgebra_msg!($ns, Vector3);
::ros_nalgebra::ros_nalgebra_msg!($ns, Quaternion);
::ros_nalgebra::ros_nalgebra_msg!($ns, Pose);
::ros_nalgebra::ros_nalgebra_msg!($ns, Transform);
};
}