use r2r; use r2r::builtin_interfaces::msg::Duration; use r2r::std_msgs::msg::Int32; use r2r::trajectory_msgs::msg::*; fn main() -> Result<(), Box> { let ctx = r2r::Context::create()?; let mut node = r2r::Node::create(ctx, "testnode", "")?; let publisher = node.create_publisher::("/hej")?; let publisher2 = node.create_publisher::("/native_count")?; let mut c = 0; let mut positions: Vec = Vec::new(); let cb = move |x: r2r::std_msgs::msg::String| { println!("at count {} got: {}", c, x.data); c = c + 1; positions.push(c as f64); let to_send = JointTrajectoryPoint { positions: positions.clone(), time_from_start: Duration { sec: c, nanosec: 0 }, ..Default::default() }; let mut native = r2r::WrappedNativeMsg::::new(); native.data = c; publisher.publish(&to_send).unwrap(); publisher2.publish_native(&native).unwrap(); }; let cb2 = move |x: JointTrajectoryPoint| { let serialized = serde_json::to_string(&x).unwrap(); println!("JTP serialized as: {}", serialized); }; let cb3 = move |raw_c: &r2r::WrappedNativeMsg| { println!("Raw c data: {:?}", raw_c.positions); }; let _sub1 = node.subscribe("/hopp", Box::new(cb))?; let _sub2 = node.subscribe("/hej", Box::new(cb2))?; let _sub3 = node.subscribe_native("/hej", Box::new(cb3))?; // TODO: group subscriptions in a "node" struct //let mut subs: Vec> = vec![Box::new(sub1), Box::new(sub2), Box::new(sub3)]; // run for 10 seconds let mut count = 0; while count < 100 { node.spin_once(std::time::Duration::from_millis(100)); count += 1; } println!("All done!"); Ok(()) }