From 8a80f26e6e17fd6b606ff930a711e757022fb270 Mon Sep 17 00:00:00 2001 From: Kristofer Bengtsson Date: Wed, 8 Jul 2020 09:11:26 +0200 Subject: [PATCH 1/2] Fixed so that only the node name is needed in a params.yaml file. Before the fully qualified name was required. node_name: ros__parameters: p1: ["a", "aa"] The following also works: /node_name: /**: **: --- src/lib.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 25549b2..7aef1df 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -562,7 +562,8 @@ impl Node { (*(*params.as_ref())).params, (*(*params.as_ref())).num_nodes) }; - let qualified_name = self.fully_qualified_name()?; + let qualified_name = self.fully_qualified_name()?; + let name = self.name()?; for (nn, np) in node_names.iter().zip(node_params) { let node_name_cstr = unsafe { CStr::from_ptr(*nn as *mut i8) }; @@ -571,7 +572,12 @@ impl Node { // This is copied from rclcpp, but there is a comment there suggesting // that more wildcards will be added in the future. Take note and mimic // their behavior. - if !(node_name == "/**" || qualified_name == node_name) { + if !( + node_name == "/**" || + node_name == "**" || + qualified_name == node_name || + name == node_name + ) { continue; } From 576da3537b4d77b4bfde8c690a9fb70caf106146 Mon Sep 17 00:00:00 2001 From: Kristofer Bengtsson Date: Wed, 9 Sep 2020 16:31:15 +0200 Subject: [PATCH 2/2] Added a namespace method to the Node to get the namespace from the node. --- examples/parameters.rs | 1 + src/lib.rs | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/examples/parameters.rs b/examples/parameters.rs index 37fc555..d7bf5e5 100644 --- a/examples/parameters.rs +++ b/examples/parameters.rs @@ -10,6 +10,7 @@ fn main() -> Result<(), Error> { println!("node name: {}", node.name()?); println!("node fully qualified name: {}", node.fully_qualified_name()?); + println!("node namespace: {}", node.namespace()?); println!("node parameters"); node.params.iter().for_each(|(k,v)| { diff --git a/src/lib.rs b/src/lib.rs index 7aef1df..461c0c5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -536,6 +536,15 @@ impl Node { Ok(s.to_str().unwrap_or("").to_owned()) } + pub fn namespace(&self) -> Result { + let cstr = unsafe { rcl_node_get_namespace(self.node_handle.as_ref()) }; + if cstr == std::ptr::null() { + return Err(Error::RCL_RET_NODE_INVALID); + } + let s = unsafe { CStr::from_ptr(cstr as *const i8) }; + Ok(s.to_str().unwrap_or("").to_owned()) + } + fn load_params(&mut self) -> Result<()> { let ctx = self.context.context_handle.lock().unwrap(); let mut params: Box<*mut rcl_params_t> = Box::new(std::ptr::null_mut());