Expand description
ROS2 Command-Line Arguments Parser
This module provides a comprehensive parser for ROS2 command-line arguments based on the ROS2 Command Line Arguments specification.
§Features
- Name remapping: Parse
--remap/-rarguments for topic/service/node remapping - Parameter assignment: Parse
--param/-parguments for single parameter assignments - Parameter files: Parse
--params-filearguments and load YAML parameter files - Logging configuration: Parse log levels, log config files, and logging output flags
- Enclave assignment: Parse
--enclave/-earguments for security enclaves - Wildcard support: Support wildcard patterns in parameter files (
*,**) - Multiple ROS args sections: Handle multiple
--ros-argssections in the same command line
§Examples
§Basic Usage
use ros2args::parse_ros2_args;
let args = vec![
"my_program".to_string(),
"--ros-args".to_string(),
"-r".to_string(),
"old_topic:=new_topic".to_string(),
"-p".to_string(),
"use_sim_time:=true".to_string(),
"--log-level".to_string(),
"DEBUG".to_string(),
];
let (ros_args, user_args) = parse_ros2_args(&args)?;
assert_eq!(ros_args.remap_rules.len(), 1);
assert_eq!(ros_args.param_assignments.len(), 1);
assert_eq!(ros_args.log_levels.len(), 1);§Node-Specific Arguments
use ros2args::parse_ros2_args;
let args = vec![
"my_program".to_string(),
"--ros-args".to_string(),
"-r".to_string(),
"my_node:old_topic:=new_topic".to_string(),
"-p".to_string(),
"my_node:param_name:=42".to_string(),
];
let (ros_args, _) = parse_ros2_args(&args)?;
// Get remapping rules for a specific node
let node_remaps = ros_args.get_remap_rules_for_node("my_node");
assert_eq!(node_remaps.len(), 1);
// Get parameters for a specific node
let node_params = ros_args.get_params_for_node("my_node")?;
assert_eq!(node_params.len(), 1);§Parameter Files
use ros2args::parse_param_file;
use std::path::Path;
// Parse a YAML parameter file
let params = parse_param_file(Path::new("config/params.yaml"))?;
for param in params {
// Access typed values
if let Some(b) = param.as_bool() {
println!("Node: {:?}, Param: {} (bool) = {}", param.node_name, param.name, b);
} else if let Some(i) = param.as_i64() {
println!("Node: {:?}, Param: {} (int) = {}", param.node_name, param.name, i);
}
}§Multiple ROS Args Sections
use ros2args::parse_ros2_args;
let args = vec![
"program".to_string(),
"--ros-args".to_string(),
"-r".to_string(),
"foo:=bar".to_string(),
"--".to_string(),
"--user-arg".to_string(),
"--ros-args".to_string(),
"-p".to_string(),
"param:=value".to_string(),
];
let (ros_args, user_args) = parse_ros2_args(&args)?;
// Both sections are merged
assert_eq!(ros_args.remap_rules.len(), 1);
assert_eq!(ros_args.param_assignments.len(), 1);
assert_eq!(user_args, vec!["program", "--user-arg"]);Re-exports§
pub use names::NameKind;pub use names::build_node_fqn;pub use names::expand_topic_name;pub use names::expand_topic_name_with_fqn;pub use names::extract_base_name;pub use names::extract_namespace;pub use names::is_absolute_name;pub use names::is_private_name;pub use names::is_relative_name;pub use names::is_valid_name_char;pub use names::is_valid_topic_char;pub use names::validate_fully_qualified_name;pub use names::validate_namespace;pub use names::validate_node_name;pub use names::validate_substitution;pub use names::validate_topic_name;
Modules§
- names
- ROS2 naming validation for nodes and topics
Structs§
- LogLevel
Assignment - Represents a log level assignment
- Logging
Output Config - Represents logging output configuration flags
- Param
Assignment - Represents a parameter assignment
- Remap
Rule - Represents a name remapping rule
- Ros2
Args - Complete set of parsed ROS2 command-line arguments
Enums§
- LogLevel
- Log levels supported by ROS2
- Ros2
Args Error - Errors that can occur during ROS2 argument parsing
Functions§
- match_
wildcard_ pattern - Match a node name against a wildcard pattern
- parse_
param_ file - Parse a ROS2 parameter YAML file
- parse_
ros2_ args - Parse ROS2 arguments from command-line arguments
Type Aliases§
- Ros2
Args Result - Result type for ROS2 argument parsing operations