diff --git a/examples/advanced_logging/Cargo.toml b/examples/advanced_logging/Cargo.toml new file mode 100644 index 00000000..7533781c --- /dev/null +++ b/examples/advanced_logging/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "advanced_logging" +version = "0.1.0" +edition = "2021" + +[dependencies] +rclrs = "*" +std_msgs = "*" +anyhow = { version = "1", features = ["backtrace"] } diff --git a/examples/advanced_logging/package.xml b/examples/advanced_logging/package.xml new file mode 100644 index 00000000..c008721f --- /dev/null +++ b/examples/advanced_logging/package.xml @@ -0,0 +1,19 @@ + + + + examples_rclrs_advanced_logging + 0.1.0 + Package containing an advanced example of the logging mechanism in rclrs. + Antoine Van Malleghem + Apache License 2.0 + + rclrs + rosidl_runtime_rs + std_msgs + + + ament_cargo + + \ No newline at end of file diff --git a/examples/advanced_logging/src/main.rs b/examples/advanced_logging/src/main.rs new file mode 100644 index 00000000..eb462e1a --- /dev/null +++ b/examples/advanced_logging/src/main.rs @@ -0,0 +1,40 @@ +use anyhow::{Error, Result}; +use rclrs::*; +use std::time::Duration; + +fn main() -> Result<(), Error> { + let context = Context::default_from_env()?; + let executor = context.create_basic_executor(); + + let node = executor.create_node("advanced_logger")?; + + let publisher = node.create_publisher::("topic", QOS_PROFILE_DEFAULT)?; + + let mut message = std_msgs::msg::String::default(); + + let mut publish_count: u32 = 1; + + while context.ok() { + message.data = format!("Hello, world! {}", publish_count); + // log_fatal!(&node.name(), "Simple message from {}", node.name()); + log!( + node.info().skip_first(), + "Publish every message but the first one: [{}]", + message.data + ); + log!( + node.warn().throttle(Duration::from_millis(3000)), + "Publish with 3s throttling: [{}]", + message.data + ); + log!( + node.error().only_if(publish_count % 10 == 0), + "Publishing every 10 messages: [{}]", + message.data + ); + publisher.publish(&message)?; + publish_count += 1; + std::thread::sleep(std::time::Duration::from_millis(500)); + } + Ok(()) +}