"Native" publishers
This commit is contained in:
parent
05959d1fe8
commit
f427e06b02
|
|
@ -1,7 +1,7 @@
|
||||||
R2R - Minimal ROS2 Rust bindings
|
R2R - Minimal ROS2 Rust bindings
|
||||||
=============
|
=============
|
||||||
|
|
||||||
Minimal bindings for ROS2 that does *not* require hooking in to the ROS2 build infrastructure. If you want a more ROS-oriented approach, see <https://github.com/ros2-rust/ros2_rust>. In these bindings, convenience Rust types are created by calling into the c introspection libraries to circumvent the .msg/.idl pipeline. Another benefit of basing the code entirely on the exported shared libraries is that the native c types are still there when you need to trade convenience for performance. E.g. for looking into a large array of image data you can still get a pointer to the raw message.
|
Minimal bindings for ROS2 that does *not* require hooking in to the ROS2 build infrastructure. If you want a more ROS-oriented approach, see <https://github.com/ros2-rust/ros2_rust>. In these bindings, convenience Rust types are created by calling into the c introspection libraries to circumvent the .msg/.idl pipeline. The convenience types can of course be ignored when you need to trade convenience for performance, e.g. treating large chunks of data manually.
|
||||||
|
|
||||||
How to use
|
How to use
|
||||||
------------
|
------------
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,14 @@
|
||||||
use r2r::*;
|
use r2r::*;
|
||||||
use builtin_interfaces::msg::Duration;
|
use builtin_interfaces::msg::Duration;
|
||||||
use trajectory_msgs::msg::*;
|
use trajectory_msgs::msg::*;
|
||||||
|
use std_msgs::msg::Int32;
|
||||||
|
|
||||||
|
|
||||||
fn main() -> Result<(), ()> {
|
fn main() -> Result<(), ()> {
|
||||||
let mut ctx = rcl_create_context()?;
|
let mut ctx = rcl_create_context()?;
|
||||||
let mut node = rcl_create_node(&mut ctx, "testnode", "")?;
|
let mut node = rcl_create_node(&mut ctx, "testnode", "")?;
|
||||||
let publisher = rcl_create_publisher::<JointTrajectoryPoint>(&mut node, "/hej")?;
|
let publisher = rcl_create_publisher::<JointTrajectoryPoint>(&mut node, "/hej")?;
|
||||||
|
let publisher2 = rcl_create_publisher::<Int32>(&mut node, "/native_count")?;
|
||||||
|
|
||||||
let mut c = 0;
|
let mut c = 0;
|
||||||
let cb = move |x:std_msgs::msg::String| {
|
let cb = move |x:std_msgs::msg::String| {
|
||||||
|
|
@ -17,7 +20,11 @@ fn main() -> Result<(), ()> {
|
||||||
time_from_start : Duration { sec: c, nanosec: 0 },
|
time_from_start : Duration { sec: c, nanosec: 0 },
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
|
let mut native = WrappedNativeMsg::<Int32>::new();
|
||||||
|
native.data = c;
|
||||||
|
|
||||||
publish(&publisher, &to_send).unwrap();
|
publish(&publisher, &to_send).unwrap();
|
||||||
|
publish_native(&publisher2, &native).unwrap();
|
||||||
};
|
};
|
||||||
|
|
||||||
let cb2 = move |x:JointTrajectoryPoint| {
|
let cb2 = move |x:JointTrajectoryPoint| {
|
||||||
|
|
|
||||||
13
src/lib.rs
13
src/lib.rs
|
|
@ -240,6 +240,19 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn publish_native<T>(publisher: &rcl_publisher_t, msg: &WrappedNativeMsg<T>) -> Result<(), ()>
|
||||||
|
where
|
||||||
|
T: WrappedTypesupport,
|
||||||
|
{
|
||||||
|
let result = unsafe { rcl_publish(publisher, msg.void_ptr(), std::ptr::null_mut()) };
|
||||||
|
if result == RCL_RET_OK as i32 {
|
||||||
|
Ok(())
|
||||||
|
} else {
|
||||||
|
eprintln!("{}", result);
|
||||||
|
Err(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn rcl_create_subscription<T>(
|
pub fn rcl_create_subscription<T>(
|
||||||
node: &mut rcl_node_t,
|
node: &mut rcl_node_t,
|
||||||
topic: &str,
|
topic: &str,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue