diff --git a/rclrs/minimal_pub_sub/Cargo.toml b/rclrs/minimal_pub_sub/Cargo.toml index 803f3d8..72a2083 100644 --- a/rclrs/minimal_pub_sub/Cargo.toml +++ b/rclrs/minimal_pub_sub/Cargo.toml @@ -30,6 +30,7 @@ anyhow = {version = "1", features = ["backtrace"]} rclrs = "0.6" rosidl_runtime_rs = "0.5" example_interfaces = "*" +clap = { version = "4.5.51", features = ["derive"] } # This specific version is compatible with Rust 1.75 backtrace = "=0.3.74" diff --git a/rclrs/minimal_pub_sub/src/minimal_publisher.rs b/rclrs/minimal_pub_sub/src/minimal_publisher.rs index 2eaf409..8c363a9 100644 --- a/rclrs/minimal_pub_sub/src/minimal_publisher.rs +++ b/rclrs/minimal_pub_sub/src/minimal_publisher.rs @@ -1,7 +1,20 @@ use anyhow::{Error, Result}; use rclrs::*; +use clap::Parser; + +/// Simple program to publish ROS 2 messages using clap +#[derive(Parser, Debug)] +#[command(long_about = None)] +struct Args { + /// Number of messages to publish + #[arg(short, long, default_value_t = u32::MAX)] + count: u32, +} + fn main() -> Result<(), Error> { + let args = Args::parse_from(extract_non_ros_args(std::env::args())?); + let context = Context::default_from_env()?; let executor = context.create_basic_executor(); @@ -13,7 +26,7 @@ fn main() -> Result<(), Error> { let mut publish_count: u32 = 1; - while context.ok() { + while context.ok() && publish_count <= args.count { message.data = format!("Hello, world! {}", publish_count); println!("Publishing: [{}]", message.data); publisher.publish(&message)?;