Skip to main content

05_velocity/
05_velocity.rs

1use ruckig::{InputParameter, OutputParameter, Result, Ruckig};
2
3fn main() {
4    // Create instances: Ruckig as well as input and output parameters
5    let mut ruckig = Ruckig::new_direct(3, 0.01); // DoFs, control cycle
6    let mut input = InputParameter::new(3);
7    let mut output = OutputParameter::new_direct(3);
8
9    // Set input parameters and velocity control interface
10    input.control_interface = ruckig::ControlInterface::Velocity;
11
12    input.current_position = vec![0.0, 0.0, 0.5];
13    input.current_velocity = vec![3.0, -2.2, -0.5];
14    input.current_acceleration = vec![0.0, 2.5, -0.5];
15
16    input.target_velocity = vec![0.0, -0.5, -1.5];
17    input.target_acceleration = vec![0.0, 0.0, 0.5];
18
19    input.max_acceleration = vec![3.0, 2.0, 1.0];
20    input.max_jerk = vec![6.0, 6.0, 4.0];
21
22    // Generate the trajectory within the control loop
23    println!("t | position");
24    while ruckig.update(&mut input, &mut output) == Result::Working {
25        let pos: Vec<String> = output.new_position.iter().map(|x| format!("{x:.4}")).collect();
26        println!("{:.4} | [{}]", output.time, pos.join(", "));
27
28        output.pass_to_input(&mut input);
29    }
30
31    println!("Trajectory duration: {} [s].", output.trajectory().get_duration());
32}
33