ROS2 Command-Line Arguments Parser
A standalone Rust crate providing a comprehensive implementation of the ROS2 command-line arguments specification as defined in the ROS2 Command Line Arguments design document.
This crate is completely independent and can be used in any Rust project that needs to parse ROS2-style command-line arguments, regardless of whether you're building a full ROS2 node or just need compatible argument parsing.
Features
- ✅ Name remapping - Parse
--remap/-rarguments for topic/service/node remapping - ✅ Parameter assignment - Parse
--param/-parguments for single parameter assignments - ✅ Parameter files - Load and parse YAML parameter files with
--params-file - ✅ Wildcard support - Full wildcard pattern matching (
*,**) in parameter files
Usage
Add to your Cargo.toml:
[]
= "0.1"
Basic Example
use parse_ros2_args;
let args = vec!;
let = parse_ros2_args?;
// Access parsed arguments
for rule in &ros_args.remap_rules
for param in &ros_args.param_assignments
Node-Specific Arguments
use parse_ros2_args;
let args = vec!;
let = parse_ros2_args?;
// Get arguments for a specific node
let node_remaps = ros_args.get_remap_rules_for_node;
let node_params = ros_args.get_params_for_node;
Parameter Files
use parse_param_file;
use Path;
// Parse a YAML parameter file
let params = parse_param_file?;
for param in params
Example YAML parameter file:
robot_controller:
ros__parameters:
use_sim_time: true
max_speed: 1.5
control_frequency: 50
# Wildcard - applies to all nodes
/**:
ros__parameters:
global_timeout: 5.0
# Wildcard - applies to all nodes in /navigation namespace
/navigation/*:
ros__parameters:
planner_frequency: 10.0
Multiple ROS Args Sections
use parse_ros2_args;
let args = vec!;
let = parse_ros2_args?;
// Both ROS args sections are merged
Supported Arguments
Name Remapping
Parameter Assignment
Parameter Files
Logging Configuration
Wildcard Patterns
Parameter files support wildcard patterns for node names:
*- Matches a single token delimited by/**- Matches zero or more tokens delimited by/
Examples:
# Matches all nodes
/**:
ros__parameters:
global_param: value
# Matches any node named 'controller' at any depth
/**/controller:
ros__parameters:
specific_param: value
# Matches any node directly under /robot namespace
/robot/*:
ros__parameters:
robot_param: value