franka_interface/
types.rs1pub use franka::Matrix7;
5pub use franka::Vector7;
6use franka::{Finishable, Matrix6x7};
7use nalgebra::{Isometry3, Vector6};
8
9#[derive(Debug)]
11pub struct RobotState {
12 pub joint_positions_d: Vector7,
14 pub joint_positions: Vector7,
16 pub joint_velocities: Vector7,
18 pub joint_velocities_d: Vector7,
20 pub joint_torques: Vector7,
22 pub end_effector_pose_c: Isometry3<f64>,
24 pub end_effector_pose: Isometry3<f64>,
26 pub end_effector_pose_d: Isometry3<f64>,
28 pub end_effector_velocity_d: Vector6<f64>,
30 pub jacobian: Matrix6x7,
32 pub mass_matrix: Matrix7,
34 pub coriolis: Vector7,
36 pub gravity: Vector7,
38 pub control_command_success_rate: f64,
40}
41pub struct GripperState {
43 pub gripper_width: f64,
45 pub closed: bool,
47}
48pub struct Torques {
50 pub torques: Vector7,
52 pub is_finished: bool,
54}
55
56impl From<franka::Torques> for Torques {
57 fn from(t: franka::Torques) -> Self {
58 let is_finished = t.is_finished();
59 Torques {
60 torques: Vector7::from_column_slice(&t.tau_J),
61 is_finished,
62 }
63 }
64}
65
66impl From<Torques> for franka::Torques {
67 fn from(t: Torques) -> Self {
68 let is_finished = t.is_finished;
69 let mut out = franka::Torques::new(t.torques.into());
70 out.set_motion_finished(is_finished);
71 out
72 }
73}
74
75impl From<Vector7> for Torques {
76 fn from(vec: Vector7) -> Self {
77 Torques {
78 torques: vec,
79 is_finished: false,
80 }
81 }
82}
83pub struct JointPositions {
85 pub joint_positions: Vector7,
87 pub is_finished: bool,
89}
90
91impl From<franka::JointPositions> for JointPositions {
92 fn from(t: franka::JointPositions) -> Self {
93 let is_finished = t.is_finished();
94 JointPositions {
95 joint_positions: Vector7::from_column_slice(&t.q),
96 is_finished,
97 }
98 }
99}
100
101impl From<JointPositions> for franka::JointPositions {
102 fn from(t: JointPositions) -> Self {
103 let is_finished = t.is_finished;
104 let mut out = franka::JointPositions::new(t.joint_positions.into());
105 out.set_motion_finished(is_finished);
106 out
107 }
108}
109
110impl From<Vector7> for JointPositions {
111 fn from(vec: Vector7) -> Self {
112 JointPositions {
113 joint_positions: vec,
114 is_finished: false,
115 }
116 }
117}
118pub struct CartesianPose {
120 pub pose: Isometry3<f64>,
122 pub is_finished: bool,
124}
125
126impl From<franka::CartesianPose> for CartesianPose {
127 fn from(pose: franka::CartesianPose) -> Self {
128 CartesianPose {
129 pose: franka::utils::array_to_isometry(&pose.O_T_EE),
130 is_finished: pose.is_finished(),
131 }
132 }
133}
134
135impl From<CartesianPose> for franka::CartesianPose {
136 fn from(pose: CartesianPose) -> Self {
137 let is_finished = pose.is_finished;
138 let mut out: franka::CartesianPose = pose.pose.into();
139 out.set_motion_finished(is_finished);
140 out
141 }
142}
143
144impl From<Isometry3<f64>> for CartesianPose {
145 fn from(pose: Isometry3<f64>) -> Self {
146 CartesianPose {
147 pose,
148 is_finished: false,
149 }
150 }
151}
152
153impl From<franka::RobotState> for RobotState {
154 fn from(state: franka::RobotState) -> Self {
155 RobotState {
156 joint_positions_d: Vector7::from_column_slice(&state.q_d),
157 joint_positions: Vector7::from_column_slice(&state.q),
158 joint_velocities: Vector7::from_column_slice(&state.dq),
159 joint_velocities_d: Vector7::from_column_slice(&state.dq),
160 joint_torques: Vector7::from_column_slice(&state.tau_J),
161 end_effector_pose_c: franka::utils::array_to_isometry(&state.O_T_EE_c),
162 end_effector_pose_d: franka::utils::array_to_isometry(&state.O_T_EE_d),
163 end_effector_pose: franka::utils::array_to_isometry(&state.O_T_EE),
164 end_effector_velocity_d: state.O_dP_EE_d.into(),
165 jacobian: Matrix6x7::zeros(),
166 mass_matrix: Matrix7::zeros(),
167 coriolis: Vector7::zeros(),
168 gravity: Vector7::zeros(),
169 control_command_success_rate: state.control_command_success_rate,
170 }
171 }
172}
173
174impl From<franka::GripperState> for GripperState {
175 fn from(state: franka::GripperState) -> Self {
176 GripperState {
177 gripper_width: state.width,
178 closed: state.is_grasped,
179 }
180 }
181}
182
183#[cfg(test)]
184mod tests {
185 use crate::types::{Torques, Vector7};
186
187 #[test]
188 pub fn convert_torques() {
189 let vec = Vector7::from_column_slice(&[0., 1., 2., 3., 4., 5., 6.]);
190 let torque = Torques::from(vec.clone());
191 let franka_torque: franka::Torques = torque.into();
192 let orig_torque: Torques = franka_torque.into();
193 let orig_vec: Vector7 = orig_torque.torques;
194 for i in 0..7 {
195 assert_eq!(orig_vec[i], vec[i]);
196 }
197 }
198}