diff --git a/.gitignore b/.gitignore index 088ba6b..a053714 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ # Generated by Cargo # will have compiled files and executables -/target/ +target # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html diff --git a/rclrs/parameter_demo/src/main.rs b/rclrs/parameter_demo/src/main.rs index 7b9daa6..9333351 100644 --- a/rclrs/parameter_demo/src/main.rs +++ b/rclrs/parameter_demo/src/main.rs @@ -10,10 +10,41 @@ fn main() -> Result<(), RclrsError> { .default("Hello".into()) .mandatory()?; - let _subscription = - node.create_subscription("greet", move |msg: example_interfaces::msg::String| { + let reliability_override = node + .declare_parameter::>("qos_override/reliability") + .optional()? + .get(); + + // Use PrimitiveOptions and override the reliability if needed. + // PrimitiveOptions ensures that the subscription will use the default + // QoS of a subscription for any setting that is not overridden. + let mut subscription_options = PrimitiveOptions::new("greet"); + if let Some(reliability_override_str) = reliability_override { + match &*reliability_override_str { + "reliable" => { + subscription_options.reliability = Some(QoSReliabilityPolicy::Reliable); + } + "best_effort" => { + subscription_options.reliability = Some(QoSReliabilityPolicy::BestEffort); + } + "best_available" => { + subscription_options.reliability = Some(QoSReliabilityPolicy::BestAvailable); + } + "system_default" => { + subscription_options.reliability = Some(QoSReliabilityPolicy::SystemDefault); + } + x => { + panic!("Unknown reliability override string: {x}"); + } + } + } + + let _subscription = node.create_subscription( + subscription_options, + move |msg: example_interfaces::msg::String| { println!("{}, {}", greeting.get(), msg.data); - })?; + }, + )?; println!( "Ready to provide a greeting. \