extern crate optima;
use nalgebra::DVector;
use optima::robot_modules::robot_kinematics_module::{JacobianEndPoint, JacobianMode};
use optima::robot_set_modules::robot_set::RobotSet;
use optima::utils::utils_robot::robot_module_utils::RobotNames;
fn main() {
let robot_set = RobotSet::new_from_robot_names(vec![RobotNames::new_base("ur5")]);
let joint_state = robot_set.spawn_robot_set_joint_state(DVector::from_vec(vec![0.0; 6])).expect("error");
let full_jacobian_matrix = robot_set.robot_set_kinematics_module().compute_jacobian(&joint_state, 0, None, 9, &JacobianEndPoint::Link, None, JacobianMode::Full).expect("error");
println!("{}", full_jacobian_matrix);
println!("////////////////////////////////////////////////////////////////////////////////////");
let translational_jacobian_matrix = robot_set.robot_set_kinematics_module().compute_jacobian(&joint_state, 0, None, 9, &JacobianEndPoint::Link, None, JacobianMode::Translational).expect("error");
println!("{}", translational_jacobian_matrix);
println!("////////////////////////////////////////////////////////////////////////////////////");
let robot_set = RobotSet::new_from_set_name("test_configuration");
let joint_state = robot_set.spawn_robot_set_joint_state(DVector::from_vec(vec![0.0; 16])).expect("error");
let full_jacobian_matrix = robot_set.robot_set_kinematics_module().compute_jacobian(&joint_state, 1, None, 18, &JacobianEndPoint::InertialOrigin, None, JacobianMode::Full).expect("error");
println!("{}", full_jacobian_matrix);
println!("////////////////////////////////////////////////////////////////////////////////////");
}