Skip to main content

Crate ros2args

Crate ros2args 

Source
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 / -r arguments for topic/service/node remapping
  • Parameter assignment: Parse --param / -p arguments for single parameter assignments
  • Parameter files: Parse --params-file arguments and load YAML parameter files
  • Logging configuration: Parse log levels, log config files, and logging output flags
  • Enclave assignment: Parse --enclave / -e arguments for security enclaves
  • Wildcard support: Support wildcard patterns in parameter files (*, **)
  • Multiple ROS args sections: Handle multiple --ros-args sections 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_hidden_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§

LogLevelAssignment
Represents a log level assignment
LoggingOutputConfig
Represents logging output configuration flags
ParamAssignment
Represents a parameter assignment
RemapRule
Represents a name remapping rule
Ros2Args
Complete set of parsed ROS2 command-line arguments

Enums§

LogLevel
Log levels supported by ROS2
Ros2ArgsError
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§

Ros2ArgsResult
Result type for ROS2 argument parsing operations