Skip to content

Commit

Permalink
Add mimic tutorial
Browse files Browse the repository at this point in the history
  • Loading branch information
Abdelrahmanosama372 committed Dec 11, 2024
1 parent 6180c0a commit 91aa1a3
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 0 deletions.
4 changes: 4 additions & 0 deletions examples/turtlesim_rs/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ path = "src/turtlesim.rs"
name = "turtle_teleop_key"
path = "tutorials/turtle_teleop_key.rs"

[[bin]]
name = "mimic"
path = "tutorials/mimic.rs"

[dependencies.rclrs]
version = "0.4"

Expand Down
51 changes: 51 additions & 0 deletions examples/turtlesim_rs/tutorials/mimic.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
use rclrs::{Context, Node, Publisher, Subscription, QOS_PROFILE_DEFAULT};
use std::env;
use std::sync::Arc;

#[allow(unused)]
struct Mimic {
output_nh: Arc<Node>,
input_nh: Arc<Node>,
twist_pub: Arc<Publisher<geometry_msgs::msg::Twist>>,
pose_sub: Arc<Subscription<turtlesim_rs_msgs::msg::Pose>>,
}

impl Mimic {
fn new() -> Self {
let context = Context::new(env::args()).unwrap();
let output_nh = rclrs::create_node(&context, "output").unwrap();

let twist_pub = output_nh
.create_publisher("/output/cmd_vel", QOS_PROFILE_DEFAULT)
.unwrap();

let input_nh = rclrs::create_node(&context, "input").unwrap();

let twist_pub_clone = Arc::clone(&twist_pub);
let pose_sub = input_nh
.create_subscription(
"/input/pose",
QOS_PROFILE_DEFAULT,
move |pose_msg: turtlesim_rs_msgs::msg::Pose| {
let mut twist_msg = geometry_msgs::msg::Twist::default();
twist_msg.linear.x = pose_msg.linear_velocity as f64;
twist_msg.angular.z = pose_msg.angular_velocity as f64;
twist_pub_clone.publish(twist_msg).unwrap();
},
)
.unwrap();

Self {
output_nh,
input_nh,
twist_pub,
pose_sub,
}
}
}

fn main() -> Result<(), rclrs::RclrsError> {
let mimic = Mimic::new();
rclrs::spin(mimic.input_nh.clone())?;
Ok(())
}

0 comments on commit 91aa1a3

Please sign in to comment.