From 418046b5bed012eaadae89f7a8e0135ab6853b21 Mon Sep 17 00:00:00 2001 From: AndreasKuhner Date: Fri, 6 Sep 2024 09:27:15 +0000 Subject: [PATCH] deploy: 6ba8dde2208189f5c6f93aa2e5d1036812f150d9 --- Logo_FRANKA_ROBOTICS_dark.png | Bin 0 -> 4620 bytes active__control_8h.html | 152 ++ active__control_8h__dep__incl.map | 5 + active__control_8h__dep__incl.md5 | 1 + active__control_8h__dep__incl.png | Bin 0 -> 7409 bytes active__control_8h__incl.map | 30 + active__control_8h__incl.md5 | 1 + active__control_8h__incl.png | Bin 0 -> 129494 bytes active__control_8h_source.html | 192 ++ active__control__base_8h.html | 147 ++ active__control__base_8h__dep__incl.map | 6 + active__control__base_8h__dep__incl.md5 | 1 + active__control__base_8h__dep__incl.png | Bin 0 -> 11609 bytes active__control__base_8h__incl.map | 22 + active__control__base_8h__incl.md5 | 1 + active__control__base_8h__incl.png | Bin 0 -> 49532 bytes active__control__base_8h_source.html | 149 ++ active__motion__generator_8h.html | 140 ++ active__motion__generator_8h__incl.map | 31 + active__motion__generator_8h__incl.md5 | 1 + active__motion__generator_8h__incl.png | Bin 0 -> 132689 bytes active__motion__generator_8h_source.html | 123 ++ active__torque__control_8h.html | 140 ++ active__torque__control_8h__incl.map | 31 + active__torque__control_8h__incl.md5 | 1 + active__torque__control_8h__incl.png | Bin 0 -> 132519 bytes active__torque__control_8h_source.html | 118 ++ annotated.html | 121 ++ bc_s.png | Bin 0 -> 676 bytes bdwn.png | Bin 0 -> 147 bytes cartesian_impedance_control_8cpp-example.html | 223 ++ classMotionGenerator-members.html | 88 + classMotionGenerator.html | 187 ++ classRobotModelBase-members.html | 90 + classRobotModelBase.html | 332 +++ classRobotModelBase__inherit__graph.map | 4 + classRobotModelBase__inherit__graph.md5 | 1 + classRobotModelBase__inherit__graph.png | Bin 0 -> 3861 bytes classes.html | 128 ++ classfranka_1_1ActiveControl-members.html | 109 + classfranka_1_1ActiveControl.html | 618 ++++++ classfranka_1_1ActiveControlBase-members.html | 102 + classfranka_1_1ActiveControlBase.html | 524 +++++ ...a_1_1ActiveControlBase__inherit__graph.map | 6 + ...a_1_1ActiveControlBase__inherit__graph.md5 | 1 + ...a_1_1ActiveControlBase__inherit__graph.png | Bin 0 -> 12036 bytes classfranka_1_1ActiveControl__coll__graph.map | 4 + classfranka_1_1ActiveControl__coll__graph.md5 | 1 + classfranka_1_1ActiveControl__coll__graph.png | Bin 0 -> 4463 bytes ...ranka_1_1ActiveControl__inherit__graph.map | 6 + ...ranka_1_1ActiveControl__inherit__graph.md5 | 1 + ...ranka_1_1ActiveControl__inherit__graph.png | Bin 0 -> 12032 bytes ...anka_1_1ActiveMotionGenerator-members.html | 111 + classfranka_1_1ActiveMotionGenerator.html | 253 +++ ..._1_1ActiveMotionGenerator__coll__graph.map | 5 + ..._1_1ActiveMotionGenerator__coll__graph.md5 | 1 + ..._1_1ActiveMotionGenerator__coll__graph.png | Bin 0 -> 8096 bytes ...1ActiveMotionGenerator__inherit__graph.map | 5 + ...1ActiveMotionGenerator__inherit__graph.md5 | 1 + ...1ActiveMotionGenerator__inherit__graph.png | Bin 0 -> 8096 bytes ...franka_1_1ActiveTorqueControl-members.html | 110 + classfranka_1_1ActiveTorqueControl.html | 236 +++ ...ka_1_1ActiveTorqueControl__coll__graph.map | 5 + ...ka_1_1ActiveTorqueControl__coll__graph.md5 | 1 + ...ka_1_1ActiveTorqueControl__coll__graph.png | Bin 0 -> 7670 bytes ...1_1ActiveTorqueControl__inherit__graph.map | 5 + ...1_1ActiveTorqueControl__inherit__graph.md5 | 1 + ...1_1ActiveTorqueControl__inherit__graph.png | Bin 0 -> 7670 bytes classfranka_1_1CartesianPose-members.html | 98 + classfranka_1_1CartesianPose.html | 384 ++++ classfranka_1_1CartesianPose__coll__graph.map | 4 + classfranka_1_1CartesianPose__coll__graph.md5 | 1 + classfranka_1_1CartesianPose__coll__graph.png | Bin 0 -> 3873 bytes ...ranka_1_1CartesianPose__inherit__graph.map | 4 + ...ranka_1_1CartesianPose__inherit__graph.md5 | 1 + ...ranka_1_1CartesianPose__inherit__graph.png | Bin 0 -> 3873 bytes ...franka_1_1CartesianVelocities-members.html | 98 + classfranka_1_1CartesianVelocities.html | 367 ++++ ...ka_1_1CartesianVelocities__coll__graph.map | 4 + ...ka_1_1CartesianVelocities__coll__graph.md5 | 1 + ...ka_1_1CartesianVelocities__coll__graph.png | Bin 0 -> 4207 bytes ...1_1CartesianVelocities__inherit__graph.map | 4 + ...1_1CartesianVelocities__inherit__graph.md5 | 1 + ...1_1CartesianVelocities__inherit__graph.png | Bin 0 -> 4207 bytes classfranka_1_1Duration-members.html | 117 ++ classfranka_1_1Duration.html | 1043 ++++++++++ classfranka_1_1Gripper-members.html | 101 + classfranka_1_1Gripper.html | 489 +++++ classfranka_1_1JointPositions-members.html | 94 + classfranka_1_1JointPositions.html | 210 ++ ...sfranka_1_1JointPositions__coll__graph.map | 4 + ...sfranka_1_1JointPositions__coll__graph.md5 | 1 + ...sfranka_1_1JointPositions__coll__graph.png | Bin 0 -> 3250 bytes ...anka_1_1JointPositions__inherit__graph.map | 4 + ...anka_1_1JointPositions__inherit__graph.md5 | 1 + ...anka_1_1JointPositions__inherit__graph.png | Bin 0 -> 3250 bytes classfranka_1_1JointVelocities-members.html | 94 + classfranka_1_1JointVelocities.html | 210 ++ ...franka_1_1JointVelocities__coll__graph.map | 4 + ...franka_1_1JointVelocities__coll__graph.md5 | 1 + ...franka_1_1JointVelocities__coll__graph.png | Bin 0 -> 3608 bytes ...nka_1_1JointVelocities__inherit__graph.map | 4 + ...nka_1_1JointVelocities__inherit__graph.md5 | 1 + ...nka_1_1JointVelocities__inherit__graph.png | Bin 0 -> 3608 bytes classfranka_1_1Model-members.html | 108 + classfranka_1_1Model.html | 955 +++++++++ classfranka_1_1Robot-members.html | 127 ++ classfranka_1_1Robot.html | 1844 +++++++++++++++++ classfranka_1_1RobotModel-members.html | 95 + classfranka_1_1RobotModel.html | 348 ++++ classfranka_1_1RobotModel__coll__graph.map | 4 + classfranka_1_1RobotModel__coll__graph.md5 | 1 + classfranka_1_1RobotModel__coll__graph.png | Bin 0 -> 3869 bytes classfranka_1_1RobotModel__inherit__graph.map | 4 + classfranka_1_1RobotModel__inherit__graph.md5 | 1 + classfranka_1_1RobotModel__inherit__graph.png | Bin 0 -> 3869 bytes classfranka_1_1Torques-members.html | 94 + classfranka_1_1Torques.html | 210 ++ classfranka_1_1Torques__coll__graph.map | 4 + classfranka_1_1Torques__coll__graph.md5 | 1 + classfranka_1_1Torques__coll__graph.png | Bin 0 -> 3264 bytes classfranka_1_1Torques__inherit__graph.map | 4 + classfranka_1_1Torques__inherit__graph.md5 | 1 + classfranka_1_1Torques__inherit__graph.png | Bin 0 -> 3264 bytes classfranka_1_1VacuumGripper-members.html | 101 + classfranka_1_1VacuumGripper.html | 438 ++++ closed.png | Bin 0 -> 132 bytes communication_test_8cpp-example.html | 226 ++ control__tools_8h.html | 369 ++++ control__tools_8h__incl.map | 8 + control__tools_8h__incl.md5 | 1 + control__tools_8h__incl.png | Bin 0 -> 10328 bytes control__tools_8h_source.html | 164 ++ control__types_8h.html | 391 ++++ control__types_8h__dep__incl.map | 12 + control__types_8h__dep__incl.md5 | 1 + control__types_8h__dep__incl.png | Bin 0 -> 39196 bytes control__types_8h__incl.map | 6 + control__types_8h__incl.md5 | 1 + control__types_8h__incl.png | Bin 0 -> 7677 bytes control__types_8h_source.html | 230 ++ dir_000000_000001.html | 83 + dir_5f30c89189ebb3336d6b33aa932838ba.html | 148 ++ dir_d28a4824dc47e487b107a5db32ef43c4.html | 104 + dir_d28a4824dc47e487b107a5db32ef43c4_dep.map | 5 + dir_d28a4824dc47e487b107a5db32ef43c4_dep.md5 | 1 + dir_d28a4824dc47e487b107a5db32ef43c4_dep.png | Bin 0 -> 3212 bytes dir_d44c64559bbebec7f509842c48db8b23.html | 91 + doc.png | Bin 0 -> 746 bytes doxygen.css | 1793 ++++++++++++++++ doxygen.svg | 26 + duration_8h.html | 193 ++ duration_8h__dep__incl.map | 17 + duration_8h__dep__incl.md5 | 1 + duration_8h__dep__incl.png | Bin 0 -> 65546 bytes duration_8h__incl.map | 6 + duration_8h__incl.md5 | 1 + duration_8h__incl.png | Bin 0 -> 6069 bytes duration_8h_source.html | 153 ++ dynsections.js | 121 ++ echo_robot_state_8cpp-example.html | 122 ++ errors_8h.html | 181 ++ errors_8h__dep__incl.map | 13 + errors_8h__dep__incl.md5 | 1 + errors_8h__dep__incl.png | Bin 0 -> 49640 bytes errors_8h__incl.map | 5 + errors_8h__incl.md5 | 1 + errors_8h__incl.png | Bin 0 -> 5511 bytes errors_8h_source.html | 205 ++ examples.html | 127 ++ examples__common_8h.html | 174 ++ examples__common_8h__incl.map | 24 + examples__common_8h__incl.md5 | 1 + examples__common_8h__incl.png | Bin 0 -> 98466 bytes examples__common_8h_source.html | 145 ++ exception_8h.html | 165 ++ exception_8h__dep__incl.map | 7 + exception_8h__dep__incl.md5 | 1 + exception_8h__dep__incl.png | Bin 0 -> 15889 bytes exception_8h__incl.map | 18 + exception_8h__incl.md5 | 1 + exception_8h__incl.png | Bin 0 -> 34488 bytes exception_8h_source.html | 155 ++ files.html | 112 + folderclosed.png | Bin 0 -> 616 bytes folderopen.png | Bin 0 -> 597 bytes force_control_8cpp-example.html | 213 ++ functions.html | 92 + functions_b.html | 92 + functions_c.html | 184 ++ functions_d.html | 114 + functions_e.html | 100 + functions_enum.html | 84 + functions_f.html | 104 + functions_func.html | 407 ++++ functions_g.html | 97 + functions_h.html | 90 + functions_i.html | 104 + functions_j.html | 134 ++ functions_k.html | 86 + functions_l.html | 98 + functions_m.html | 121 ++ functions_n.html | 86 + functions_o.html | 179 ++ functions_p.html | 98 + functions_q.html | 90 + functions_r.html | 104 + functions_rela.html | 85 + functions_s.html | 154 ++ functions_t.html | 119 ++ functions_type.html | 86 + functions_v.html | 90 + functions_vars.html | 512 +++++ functions_w.html | 92 + functions_z.html | 86 + functions_~.html | 95 + ...te_cartesian_pose_motion_8cpp-example.html | 168 ++ ...on_external_control_loop_8cpp-example.html | 187 ++ ...artesian_velocity_motion_8cpp-example.html | 178 ++ ...on_external_control_loop_8cpp-example.html | 198 ++ ...rate_consecutive_motions_8cpp-example.html | 172 ++ generate_elbow_motion_8cpp-example.html | 169 ++ ...te_joint_position_motion_8cpp-example.html | 166 ++ ...on_external_control_loop_8cpp-example.html | 184 ++ ...te_joint_velocity_motion_8cpp-example.html | 160 ++ ...on_external_control_loop_8cpp-example.html | 180 ++ globals.html | 84 + globals_func.html | 84 + graph_legend.html | 143 ++ graph_legend.md5 | 1 + graph_legend.png | Bin 0 -> 20615 bytes grasp_object_8cpp-example.html | 158 ++ gripper_8h.html | 123 ++ gripper_8h__incl.map | 11 + gripper_8h__incl.md5 | 1 + gripper_8h__incl.png | Bin 0 -> 24665 bytes gripper_8h_source.html | 153 ++ gripper__state_8h.html | 174 ++ gripper__state_8h__dep__incl.map | 4 + gripper__state_8h__dep__incl.md5 | 1 + gripper__state_8h__dep__incl.png | Bin 0 -> 5015 bytes gripper__state_8h__incl.map | 8 + gripper__state_8h__incl.md5 | 1 + gripper__state_8h__incl.png | Bin 0 -> 12351 bytes gripper__state_8h_source.html | 122 ++ hierarchy.html | 123 ++ index.html | 88 + inherit_graph_0.map | 6 + inherit_graph_0.md5 | 1 + inherit_graph_0.png | Bin 0 -> 11062 bytes inherit_graph_1.map | 3 + inherit_graph_1.md5 | 1 + inherit_graph_1.png | Bin 0 -> 1323 bytes inherit_graph_10.map | 3 + inherit_graph_10.md5 | 1 + inherit_graph_10.png | Bin 0 -> 1867 bytes inherit_graph_11.map | 3 + inherit_graph_11.md5 | 1 + inherit_graph_11.png | Bin 0 -> 1636 bytes inherit_graph_12.map | 3 + inherit_graph_12.md5 | 1 + inherit_graph_12.png | Bin 0 -> 1804 bytes inherit_graph_13.map | 3 + inherit_graph_13.md5 | 1 + inherit_graph_13.png | Bin 0 -> 2076 bytes inherit_graph_14.map | 3 + inherit_graph_14.md5 | 1 + inherit_graph_14.png | Bin 0 -> 1485 bytes inherit_graph_15.map | 4 + inherit_graph_15.md5 | 1 + inherit_graph_15.png | Bin 0 -> 2586 bytes inherit_graph_2.map | 3 + inherit_graph_2.md5 | 1 + inherit_graph_2.png | Bin 0 -> 1128 bytes inherit_graph_3.map | 12 + inherit_graph_3.md5 | 1 + inherit_graph_3.png | Bin 0 -> 39755 bytes inherit_graph_4.map | 8 + inherit_graph_4.md5 | 1 + inherit_graph_4.png | Bin 0 -> 14761 bytes inherit_graph_5.map | 3 + inherit_graph_5.md5 | 1 + inherit_graph_5.png | Bin 0 -> 1285 bytes inherit_graph_6.map | 3 + inherit_graph_6.md5 | 1 + inherit_graph_6.png | Bin 0 -> 1570 bytes inherit_graph_7.map | 3 + inherit_graph_7.md5 | 1 + inherit_graph_7.png | Bin 0 -> 1403 bytes inherit_graph_8.map | 3 + inherit_graph_8.md5 | 1 + inherit_graph_8.png | Bin 0 -> 1612 bytes inherit_graph_9.map | 3 + inherit_graph_9.md5 | 1 + inherit_graph_9.png | Bin 0 -> 1229 bytes inherits.html | 185 ++ joint_impedance_control_8cpp-example.html | 321 +++ joint_point_to_point_motion_8cpp-example.html | 144 ++ jquery.js | 35 + log_8h.html | 181 ++ log_8h__dep__incl.map | 8 + log_8h__dep__incl.md5 | 1 + log_8h__dep__incl.png | Bin 0 -> 18098 bytes log_8h__incl.map | 15 + log_8h__incl.md5 | 1 + log_8h__incl.png | Bin 0 -> 28286 bytes log_8h_source.html | 131 ++ lowpass__filter_8h.html | 267 +++ lowpass__filter_8h__dep__incl.map | 9 + lowpass__filter_8h__dep__incl.md5 | 1 + lowpass__filter_8h__dep__incl.png | Bin 0 -> 21776 bytes lowpass__filter_8h__incl.map | 5 + lowpass__filter_8h__incl.md5 | 1 + lowpass__filter_8h__incl.png | Bin 0 -> 5987 bytes lowpass__filter_8h_source.html | 108 + menu.js | 51 + menudata.js | 107 + model_8h.html | 211 ++ model_8h__incl.map | 23 + model_8h__incl.md5 | 1 + model_8h__incl.png | Bin 0 -> 100631 bytes model_8h_source.html | 215 ++ motion_with_control_8cpp-example.html | 304 +++ ...ol_external_control_loop_8cpp-example.html | 325 +++ nav_f.png | Bin 0 -> 153 bytes nav_g.png | Bin 0 -> 95 bytes nav_h.png | Bin 0 -> 98 bytes open.png | Bin 0 -> 123 bytes print_joint_poses_8cpp-example.html | 132 ++ rate__limiting_8h.html | 1094 ++++++++++ rate__limiting_8h__incl.map | 7 + rate__limiting_8h__incl.md5 | 1 + rate__limiting_8h__incl.png | Bin 0 -> 8972 bytes rate__limiting_8h_source.html | 254 +++ robot_8h.html | 154 ++ robot_8h__dep__incl.map | 8 + robot_8h__dep__incl.md5 | 1 + robot_8h__dep__incl.png | Bin 0 -> 17905 bytes robot_8h__incl.map | 22 + robot_8h__incl.md5 | 1 + robot_8h__incl.png | Bin 0 -> 73652 bytes robot_8h_source.html | 299 +++ robot__model_8h_source.html | 145 ++ robot__model__base_8h_source.html | 118 ++ robot__state_8h.html | 243 +++ robot__state_8h__dep__incl.map | 12 + robot__state_8h__dep__incl.md5 | 1 + robot__state_8h__dep__incl.png | Bin 0 -> 46603 bytes robot__state_8h__incl.map | 10 + robot__state_8h__incl.md5 | 1 + robot__state_8h__incl.png | Bin 0 -> 16165 bytes robot__state_8h_source.html | 264 +++ search/all_0.html | 37 + search/all_0.js | 13 + search/all_1.html | 37 + search/all_1.js | 6 + search/all_10.html | 37 + search/all_10.js | 5 + search/all_11.html | 37 + search/all_11.js | 19 + search/all_12.html | 37 + search/all_12.js | 24 + search/all_13.html | 37 + search/all_13.js | 15 + search/all_14.html | 37 + search/all_14.js | 9 + search/all_15.html | 37 + search/all_15.js | 5 + search/all_16.html | 37 + search/all_16.js | 4 + search/all_17.html | 37 + search/all_17.js | 7 + search/all_2.html | 37 + search/all_2.js | 46 + search/all_3.html | 37 + search/all_3.js | 14 + search/all_4.html | 37 + search/all_4.js | 12 + search/all_5.html | 37 + search/all_5.js | 12 + search/all_6.html | 37 + search/all_6.js | 10 + search/all_7.html | 37 + search/all_7.js | 6 + search/all_8.html | 37 + search/all_8.js | 13 + search/all_9.html | 37 + search/all_9.js | 20 + search/all_a.html | 37 + search/all_a.js | 28 + search/all_b.html | 37 + search/all_b.js | 14 + search/all_c.html | 37 + search/all_c.js | 18 + search/all_d.html | 37 + search/all_d.js | 5 + search/all_e.html | 37 + search/all_e.js | 35 + search/all_f.html | 37 + search/all_f.js | 9 + search/classes_0.html | 37 + search/classes_0.js | 7 + search/classes_1.html | 37 + search/classes_1.js | 7 + search/classes_2.html | 37 + search/classes_2.js | 4 + search/classes_3.html | 37 + search/classes_3.js | 5 + search/classes_4.html | 37 + search/classes_4.js | 4 + search/classes_5.html | 37 + search/classes_5.js | 5 + search/classes_6.html | 37 + search/classes_6.js | 5 + search/classes_7.html | 37 + search/classes_7.js | 5 + search/classes_8.html | 37 + search/classes_8.js | 6 + search/classes_9.html | 37 + search/classes_9.js | 4 + search/classes_a.html | 37 + search/classes_a.js | 4 + search/classes_b.html | 37 + search/classes_b.js | 10 + search/classes_c.html | 37 + search/classes_c.js | 4 + search/classes_d.html | 37 + search/classes_d.js | 5 + search/close.svg | 31 + search/enums_0.html | 37 + search/enums_0.js | 4 + search/enums_1.html | 37 + search/enums_1.js | 4 + search/enums_2.html | 37 + search/enums_2.js | 4 + search/enums_3.html | 37 + search/enums_3.js | 5 + search/enums_4.html | 37 + search/enums_4.js | 4 + search/enumvalues_0.html | 37 + search/enumvalues_0.js | 7 + search/files_0.html | 37 + search/files_0.js | 7 + search/files_1.html | 37 + search/files_1.js | 5 + search/files_2.html | 37 + search/files_2.js | 4 + search/files_3.html | 37 + search/files_3.js | 6 + search/files_4.html | 37 + search/files_4.js | 5 + search/files_5.html | 37 + search/files_5.js | 5 + search/files_6.html | 37 + search/files_6.js | 4 + search/files_7.html | 37 + search/files_7.js | 6 + search/files_8.html | 37 + search/files_8.js | 5 + search/functions_0.html | 37 + search/functions_0.js | 5 + search/functions_1.html | 37 + search/functions_1.js | 4 + search/functions_10.html | 37 + search/functions_10.js | 5 + search/functions_11.html | 37 + search/functions_11.js | 4 + search/functions_12.html | 37 + search/functions_12.js | 4 + search/functions_13.html | 37 + search/functions_13.js | 7 + search/functions_2.html | 37 + search/functions_2.js | 14 + search/functions_3.html | 37 + search/functions_3.js | 5 + search/functions_4.html | 37 + search/functions_4.js | 4 + search/functions_5.html | 37 + search/functions_5.js | 7 + search/functions_6.html | 37 + search/functions_6.js | 6 + search/functions_7.html | 37 + search/functions_7.js | 6 + search/functions_8.html | 37 + search/functions_8.js | 5 + search/functions_9.html | 37 + search/functions_9.js | 7 + search/functions_a.html | 37 + search/functions_a.js | 8 + search/functions_b.html | 37 + search/functions_b.js | 26 + search/functions_c.html | 37 + search/functions_c.js | 4 + search/functions_d.html | 37 + search/functions_d.js | 6 + search/functions_e.html | 37 + search/functions_e.js | 19 + search/functions_f.html | 37 + search/functions_f.js | 6 + search/mag_sel.svg | 74 + search/nomatches.html | 13 + search/pages_0.html | 37 + search/pages_0.js | 4 + search/related_0.html | 37 + search/related_0.js | 4 + search/search.css | 257 +++ search/search.js | 816 ++++++++ search/search_l.png | Bin 0 -> 567 bytes search/search_m.png | Bin 0 -> 158 bytes search/search_r.png | Bin 0 -> 553 bytes search/searchdata.js | 42 + search/typedefs_0.html | 37 + search/typedefs_0.js | 4 + search/variables_0.html | 37 + search/variables_0.js | 4 + search/variables_1.html | 37 + search/variables_1.js | 5 + search/variables_10.html | 37 + search/variables_10.js | 7 + search/variables_11.html | 37 + search/variables_11.js | 11 + search/variables_12.html | 37 + search/variables_12.js | 4 + search/variables_13.html | 37 + search/variables_13.js | 4 + search/variables_2.html | 37 + search/variables_2.js | 31 + search/variables_3.html | 37 + search/variables_3.js | 11 + search/variables_4.html | 37 + search/variables_4.js | 7 + search/variables_5.html | 37 + search/variables_5.js | 10 + search/variables_6.html | 37 + search/variables_6.js | 9 + search/variables_7.html | 37 + search/variables_7.js | 18 + search/variables_8.html | 37 + search/variables_8.js | 24 + search/variables_9.html | 37 + search/variables_9.js | 7 + search/variables_a.html | 37 + search/variables_a.js | 11 + search/variables_b.html | 37 + search/variables_b.js | 4 + search/variables_c.html | 37 + search/variables_c.js | 12 + search/variables_d.html | 37 + search/variables_d.js | 6 + search/variables_e.html | 37 + search/variables_e.js | 5 + search/variables_f.html | 37 + search/variables_f.js | 5 + splitbar.png | Bin 0 -> 314 bytes structfranka_1_1CommandException.html | 117 ++ ...ranka_1_1CommandException__coll__graph.map | 5 + ...ranka_1_1CommandException__coll__graph.md5 | 1 + ...ranka_1_1CommandException__coll__graph.png | Bin 0 -> 6766 bytes ...ka_1_1CommandException__inherit__graph.map | 5 + ...ka_1_1CommandException__inherit__graph.md5 | 1 + ...ka_1_1CommandException__inherit__graph.png | Bin 0 -> 6766 bytes structfranka_1_1ControlException-members.html | 92 + structfranka_1_1ControlException.html | 184 ++ ...ranka_1_1ControlException__coll__graph.map | 5 + ...ranka_1_1ControlException__coll__graph.md5 | 1 + ...ranka_1_1ControlException__coll__graph.png | Bin 0 -> 6413 bytes ...ka_1_1ControlException__inherit__graph.map | 5 + ...ka_1_1ControlException__inherit__graph.md5 | 1 + ...ka_1_1ControlException__inherit__graph.png | Bin 0 -> 6413 bytes structfranka_1_1Errors-members.html | 137 ++ structfranka_1_1Errors.html | 461 +++++ structfranka_1_1Exception.html | 125 ++ structfranka_1_1Exception__coll__graph.map | 4 + structfranka_1_1Exception__coll__graph.md5 | 1 + structfranka_1_1Exception__coll__graph.png | Bin 0 -> 3508 bytes structfranka_1_1Exception__inherit__graph.map | 12 + structfranka_1_1Exception__inherit__graph.md5 | 1 + structfranka_1_1Exception__inherit__graph.png | Bin 0 -> 40258 bytes structfranka_1_1Finishable-members.html | 91 + structfranka_1_1Finishable.html | 123 ++ ...ctfranka_1_1Finishable__inherit__graph.map | 8 + ...ctfranka_1_1Finishable__inherit__graph.md5 | 1 + ...ctfranka_1_1Finishable__inherit__graph.png | Bin 0 -> 15399 bytes structfranka_1_1GripperState-members.html | 95 + structfranka_1_1GripperState.html | 187 ++ structfranka_1_1GripperState__coll__graph.map | 4 + structfranka_1_1GripperState__coll__graph.md5 | 1 + structfranka_1_1GripperState__coll__graph.png | Bin 0 -> 4233 bytes ...1IncompatibleVersionException-members.html | 93 + ...ranka_1_1IncompatibleVersionException.html | 185 ++ ...ompatibleVersionException__coll__graph.map | 5 + ...ompatibleVersionException__coll__graph.md5 | 1 + ...ompatibleVersionException__coll__graph.png | Bin 0 -> 7209 bytes ...atibleVersionException__inherit__graph.map | 5 + ...atibleVersionException__inherit__graph.md5 | 1 + ...atibleVersionException__inherit__graph.png | Bin 0 -> 7209 bytes ...ctfranka_1_1InvalidOperationException.html | 117 ++ ...InvalidOperationException__coll__graph.map | 5 + ...InvalidOperationException__coll__graph.md5 | 1 + ...InvalidOperationException__coll__graph.png | Bin 0 -> 6477 bytes ...alidOperationException__inherit__graph.map | 5 + ...alidOperationException__inherit__graph.md5 | 1 + ...alidOperationException__inherit__graph.png | Bin 0 -> 6477 bytes structfranka_1_1ModelException.html | 117 ++ ...tfranka_1_1ModelException__coll__graph.map | 5 + ...tfranka_1_1ModelException__coll__graph.md5 | 1 + ...tfranka_1_1ModelException__coll__graph.png | Bin 0 -> 6511 bytes ...anka_1_1ModelException__inherit__graph.map | 5 + ...anka_1_1ModelException__inherit__graph.md5 | 1 + ...anka_1_1ModelException__inherit__graph.png | Bin 0 -> 6511 bytes structfranka_1_1NetworkException.html | 117 ++ ...ranka_1_1NetworkException__coll__graph.map | 5 + ...ranka_1_1NetworkException__coll__graph.md5 | 1 + ...ranka_1_1NetworkException__coll__graph.png | Bin 0 -> 6621 bytes ...ka_1_1NetworkException__inherit__graph.map | 5 + ...ka_1_1NetworkException__inherit__graph.md5 | 1 + ...ka_1_1NetworkException__inherit__graph.png | Bin 0 -> 6621 bytes structfranka_1_1ProtocolException.html | 117 ++ ...anka_1_1ProtocolException__coll__graph.map | 5 + ...anka_1_1ProtocolException__coll__graph.md5 | 1 + ...anka_1_1ProtocolException__coll__graph.png | Bin 0 -> 6380 bytes ...a_1_1ProtocolException__inherit__graph.map | 5 + ...a_1_1ProtocolException__inherit__graph.md5 | 1 + ...a_1_1ProtocolException__inherit__graph.png | Bin 0 -> 6380 bytes structfranka_1_1RealtimeException.html | 117 ++ ...anka_1_1RealtimeException__coll__graph.map | 5 + ...anka_1_1RealtimeException__coll__graph.md5 | 1 + ...anka_1_1RealtimeException__coll__graph.png | Bin 0 -> 6578 bytes ...a_1_1RealtimeException__inherit__graph.map | 5 + ...a_1_1RealtimeException__inherit__graph.md5 | 1 + ...a_1_1RealtimeException__inherit__graph.png | Bin 0 -> 6578 bytes structfranka_1_1Record-members.html | 92 + structfranka_1_1Record.html | 131 ++ structfranka_1_1Record__coll__graph.map | 13 + structfranka_1_1Record__coll__graph.md5 | 1 + structfranka_1_1Record__coll__graph.png | Bin 0 -> 47102 bytes structfranka_1_1RobotCommand-members.html | 95 + structfranka_1_1RobotCommand.html | 139 ++ structfranka_1_1RobotCommand__coll__graph.map | 9 + structfranka_1_1RobotCommand__coll__graph.md5 | 1 + structfranka_1_1RobotCommand__coll__graph.png | Bin 0 -> 26922 bytes structfranka_1_1RobotState-members.html | 137 ++ structfranka_1_1RobotState.html | 939 +++++++++ structfranka_1_1RobotState__coll__graph.map | 5 + structfranka_1_1RobotState__coll__graph.md5 | 1 + structfranka_1_1RobotState__coll__graph.png | Bin 0 -> 7168 bytes ...tfranka_1_1VacuumGripperState-members.html | 97 + structfranka_1_1VacuumGripperState.html | 193 ++ ...nka_1_1VacuumGripperState__coll__graph.map | 4 + ...nka_1_1VacuumGripperState__coll__graph.md5 | 1 + ...nka_1_1VacuumGripperState__coll__graph.png | Bin 0 -> 4946 bytes sync_off.png | Bin 0 -> 853 bytes sync_on.png | Bin 0 -> 845 bytes tab_a.png | Bin 0 -> 142 bytes tab_b.png | Bin 0 -> 169 bytes tab_h.png | Bin 0 -> 177 bytes tab_s.png | Bin 0 -> 184 bytes tabs.css | 1 + vacuum__gripper_8h.html | 124 ++ vacuum__gripper_8h__incl.map | 11 + vacuum__gripper_8h__incl.md5 | 1 + vacuum__gripper_8h__incl.png | Bin 0 -> 30772 bytes vacuum__gripper_8h_source.html | 152 ++ vacuum__gripper__state_8h.html | 222 ++ vacuum__gripper__state_8h__dep__incl.map | 4 + vacuum__gripper__state_8h__dep__incl.md5 | 1 + vacuum__gripper__state_8h__dep__incl.png | Bin 0 -> 5306 bytes vacuum__gripper__state_8h__incl.map | 9 + vacuum__gripper__state_8h__incl.md5 | 1 + vacuum__gripper__state_8h__incl.png | Bin 0 -> 16523 bytes vacuum__gripper__state_8h_source.html | 142 ++ vacuum_object_8cpp-example.html | 143 ++ 672 files changed, 41318 insertions(+) create mode 100644 Logo_FRANKA_ROBOTICS_dark.png create mode 100644 active__control_8h.html create mode 100644 active__control_8h__dep__incl.map create mode 100644 active__control_8h__dep__incl.md5 create mode 100644 active__control_8h__dep__incl.png create mode 100644 active__control_8h__incl.map create mode 100644 active__control_8h__incl.md5 create mode 100644 active__control_8h__incl.png create mode 100644 active__control_8h_source.html create mode 100644 active__control__base_8h.html create mode 100644 active__control__base_8h__dep__incl.map create mode 100644 active__control__base_8h__dep__incl.md5 create mode 100644 active__control__base_8h__dep__incl.png create mode 100644 active__control__base_8h__incl.map create mode 100644 active__control__base_8h__incl.md5 create mode 100644 active__control__base_8h__incl.png create mode 100644 active__control__base_8h_source.html create mode 100644 active__motion__generator_8h.html create mode 100644 active__motion__generator_8h__incl.map create mode 100644 active__motion__generator_8h__incl.md5 create mode 100644 active__motion__generator_8h__incl.png create mode 100644 active__motion__generator_8h_source.html create mode 100644 active__torque__control_8h.html create mode 100644 active__torque__control_8h__incl.map create mode 100644 active__torque__control_8h__incl.md5 create mode 100644 active__torque__control_8h__incl.png create mode 100644 active__torque__control_8h_source.html create mode 100644 annotated.html create mode 100644 bc_s.png create mode 100644 bdwn.png create mode 100644 cartesian_impedance_control_8cpp-example.html create mode 100644 classMotionGenerator-members.html create mode 100644 classMotionGenerator.html create mode 100644 classRobotModelBase-members.html create mode 100644 classRobotModelBase.html create mode 100644 classRobotModelBase__inherit__graph.map create mode 100644 classRobotModelBase__inherit__graph.md5 create mode 100644 classRobotModelBase__inherit__graph.png create mode 100644 classes.html create mode 100644 classfranka_1_1ActiveControl-members.html create mode 100644 classfranka_1_1ActiveControl.html create mode 100644 classfranka_1_1ActiveControlBase-members.html create mode 100644 classfranka_1_1ActiveControlBase.html create mode 100644 classfranka_1_1ActiveControlBase__inherit__graph.map create mode 100644 classfranka_1_1ActiveControlBase__inherit__graph.md5 create mode 100644 classfranka_1_1ActiveControlBase__inherit__graph.png create mode 100644 classfranka_1_1ActiveControl__coll__graph.map create mode 100644 classfranka_1_1ActiveControl__coll__graph.md5 create mode 100644 classfranka_1_1ActiveControl__coll__graph.png create mode 100644 classfranka_1_1ActiveControl__inherit__graph.map create mode 100644 classfranka_1_1ActiveControl__inherit__graph.md5 create mode 100644 classfranka_1_1ActiveControl__inherit__graph.png create mode 100644 classfranka_1_1ActiveMotionGenerator-members.html create mode 100644 classfranka_1_1ActiveMotionGenerator.html create mode 100644 classfranka_1_1ActiveMotionGenerator__coll__graph.map create mode 100644 classfranka_1_1ActiveMotionGenerator__coll__graph.md5 create mode 100644 classfranka_1_1ActiveMotionGenerator__coll__graph.png create mode 100644 classfranka_1_1ActiveMotionGenerator__inherit__graph.map create mode 100644 classfranka_1_1ActiveMotionGenerator__inherit__graph.md5 create mode 100644 classfranka_1_1ActiveMotionGenerator__inherit__graph.png create mode 100644 classfranka_1_1ActiveTorqueControl-members.html create mode 100644 classfranka_1_1ActiveTorqueControl.html create mode 100644 classfranka_1_1ActiveTorqueControl__coll__graph.map create mode 100644 classfranka_1_1ActiveTorqueControl__coll__graph.md5 create mode 100644 classfranka_1_1ActiveTorqueControl__coll__graph.png create mode 100644 classfranka_1_1ActiveTorqueControl__inherit__graph.map create mode 100644 classfranka_1_1ActiveTorqueControl__inherit__graph.md5 create mode 100644 classfranka_1_1ActiveTorqueControl__inherit__graph.png create mode 100644 classfranka_1_1CartesianPose-members.html create mode 100644 classfranka_1_1CartesianPose.html create mode 100644 classfranka_1_1CartesianPose__coll__graph.map create mode 100644 classfranka_1_1CartesianPose__coll__graph.md5 create mode 100644 classfranka_1_1CartesianPose__coll__graph.png create mode 100644 classfranka_1_1CartesianPose__inherit__graph.map create mode 100644 classfranka_1_1CartesianPose__inherit__graph.md5 create mode 100644 classfranka_1_1CartesianPose__inherit__graph.png create mode 100644 classfranka_1_1CartesianVelocities-members.html create mode 100644 classfranka_1_1CartesianVelocities.html create mode 100644 classfranka_1_1CartesianVelocities__coll__graph.map create mode 100644 classfranka_1_1CartesianVelocities__coll__graph.md5 create mode 100644 classfranka_1_1CartesianVelocities__coll__graph.png create mode 100644 classfranka_1_1CartesianVelocities__inherit__graph.map create mode 100644 classfranka_1_1CartesianVelocities__inherit__graph.md5 create mode 100644 classfranka_1_1CartesianVelocities__inherit__graph.png create mode 100644 classfranka_1_1Duration-members.html create mode 100644 classfranka_1_1Duration.html create mode 100644 classfranka_1_1Gripper-members.html create mode 100644 classfranka_1_1Gripper.html create mode 100644 classfranka_1_1JointPositions-members.html create mode 100644 classfranka_1_1JointPositions.html create mode 100644 classfranka_1_1JointPositions__coll__graph.map create mode 100644 classfranka_1_1JointPositions__coll__graph.md5 create mode 100644 classfranka_1_1JointPositions__coll__graph.png create mode 100644 classfranka_1_1JointPositions__inherit__graph.map create mode 100644 classfranka_1_1JointPositions__inherit__graph.md5 create mode 100644 classfranka_1_1JointPositions__inherit__graph.png create mode 100644 classfranka_1_1JointVelocities-members.html create mode 100644 classfranka_1_1JointVelocities.html create mode 100644 classfranka_1_1JointVelocities__coll__graph.map create mode 100644 classfranka_1_1JointVelocities__coll__graph.md5 create mode 100644 classfranka_1_1JointVelocities__coll__graph.png create mode 100644 classfranka_1_1JointVelocities__inherit__graph.map create mode 100644 classfranka_1_1JointVelocities__inherit__graph.md5 create mode 100644 classfranka_1_1JointVelocities__inherit__graph.png create mode 100644 classfranka_1_1Model-members.html create mode 100644 classfranka_1_1Model.html create mode 100644 classfranka_1_1Robot-members.html create mode 100644 classfranka_1_1Robot.html create mode 100644 classfranka_1_1RobotModel-members.html create mode 100644 classfranka_1_1RobotModel.html create mode 100644 classfranka_1_1RobotModel__coll__graph.map create mode 100644 classfranka_1_1RobotModel__coll__graph.md5 create mode 100644 classfranka_1_1RobotModel__coll__graph.png create mode 100644 classfranka_1_1RobotModel__inherit__graph.map create mode 100644 classfranka_1_1RobotModel__inherit__graph.md5 create mode 100644 classfranka_1_1RobotModel__inherit__graph.png create mode 100644 classfranka_1_1Torques-members.html create mode 100644 classfranka_1_1Torques.html create mode 100644 classfranka_1_1Torques__coll__graph.map create mode 100644 classfranka_1_1Torques__coll__graph.md5 create mode 100644 classfranka_1_1Torques__coll__graph.png create mode 100644 classfranka_1_1Torques__inherit__graph.map create mode 100644 classfranka_1_1Torques__inherit__graph.md5 create mode 100644 classfranka_1_1Torques__inherit__graph.png create mode 100644 classfranka_1_1VacuumGripper-members.html create mode 100644 classfranka_1_1VacuumGripper.html create mode 100644 closed.png create mode 100644 communication_test_8cpp-example.html create mode 100644 control__tools_8h.html create mode 100644 control__tools_8h__incl.map create mode 100644 control__tools_8h__incl.md5 create mode 100644 control__tools_8h__incl.png create mode 100644 control__tools_8h_source.html create mode 100644 control__types_8h.html create mode 100644 control__types_8h__dep__incl.map create mode 100644 control__types_8h__dep__incl.md5 create mode 100644 control__types_8h__dep__incl.png create mode 100644 control__types_8h__incl.map create mode 100644 control__types_8h__incl.md5 create mode 100644 control__types_8h__incl.png create mode 100644 control__types_8h_source.html create mode 100644 dir_000000_000001.html create mode 100644 dir_5f30c89189ebb3336d6b33aa932838ba.html create mode 100644 dir_d28a4824dc47e487b107a5db32ef43c4.html create mode 100644 dir_d28a4824dc47e487b107a5db32ef43c4_dep.map create mode 100644 dir_d28a4824dc47e487b107a5db32ef43c4_dep.md5 create mode 100644 dir_d28a4824dc47e487b107a5db32ef43c4_dep.png create mode 100644 dir_d44c64559bbebec7f509842c48db8b23.html create mode 100644 doc.png create mode 100644 doxygen.css create mode 100644 doxygen.svg create mode 100644 duration_8h.html create mode 100644 duration_8h__dep__incl.map create mode 100644 duration_8h__dep__incl.md5 create mode 100644 duration_8h__dep__incl.png create mode 100644 duration_8h__incl.map create mode 100644 duration_8h__incl.md5 create mode 100644 duration_8h__incl.png create mode 100644 duration_8h_source.html create mode 100644 dynsections.js create mode 100644 echo_robot_state_8cpp-example.html create mode 100644 errors_8h.html create mode 100644 errors_8h__dep__incl.map create mode 100644 errors_8h__dep__incl.md5 create mode 100644 errors_8h__dep__incl.png create mode 100644 errors_8h__incl.map create mode 100644 errors_8h__incl.md5 create mode 100644 errors_8h__incl.png create mode 100644 errors_8h_source.html create mode 100644 examples.html create mode 100644 examples__common_8h.html create mode 100644 examples__common_8h__incl.map create mode 100644 examples__common_8h__incl.md5 create mode 100644 examples__common_8h__incl.png create mode 100644 examples__common_8h_source.html create mode 100644 exception_8h.html create mode 100644 exception_8h__dep__incl.map create mode 100644 exception_8h__dep__incl.md5 create mode 100644 exception_8h__dep__incl.png create mode 100644 exception_8h__incl.map create mode 100644 exception_8h__incl.md5 create mode 100644 exception_8h__incl.png create mode 100644 exception_8h_source.html create mode 100644 files.html create mode 100644 folderclosed.png create mode 100644 folderopen.png create mode 100644 force_control_8cpp-example.html create mode 100644 functions.html create mode 100644 functions_b.html create mode 100644 functions_c.html create mode 100644 functions_d.html create mode 100644 functions_e.html create mode 100644 functions_enum.html create mode 100644 functions_f.html create mode 100644 functions_func.html create mode 100644 functions_g.html create mode 100644 functions_h.html create mode 100644 functions_i.html create mode 100644 functions_j.html create mode 100644 functions_k.html create mode 100644 functions_l.html create mode 100644 functions_m.html create mode 100644 functions_n.html create mode 100644 functions_o.html create mode 100644 functions_p.html create mode 100644 functions_q.html create mode 100644 functions_r.html create mode 100644 functions_rela.html create mode 100644 functions_s.html create mode 100644 functions_t.html create mode 100644 functions_type.html create mode 100644 functions_v.html create mode 100644 functions_vars.html create mode 100644 functions_w.html create mode 100644 functions_z.html create mode 100644 functions_~.html create mode 100644 generate_cartesian_pose_motion_8cpp-example.html create mode 100644 generate_cartesian_pose_motion_external_control_loop_8cpp-example.html create mode 100644 generate_cartesian_velocity_motion_8cpp-example.html create mode 100644 generate_cartesian_velocity_motion_external_control_loop_8cpp-example.html create mode 100644 generate_consecutive_motions_8cpp-example.html create mode 100644 generate_elbow_motion_8cpp-example.html create mode 100644 generate_joint_position_motion_8cpp-example.html create mode 100644 generate_joint_position_motion_external_control_loop_8cpp-example.html create mode 100644 generate_joint_velocity_motion_8cpp-example.html create mode 100644 generate_joint_velocity_motion_external_control_loop_8cpp-example.html create mode 100644 globals.html create mode 100644 globals_func.html create mode 100644 graph_legend.html create mode 100644 graph_legend.md5 create mode 100644 graph_legend.png create mode 100644 grasp_object_8cpp-example.html create mode 100644 gripper_8h.html create mode 100644 gripper_8h__incl.map create mode 100644 gripper_8h__incl.md5 create mode 100644 gripper_8h__incl.png create mode 100644 gripper_8h_source.html create mode 100644 gripper__state_8h.html create mode 100644 gripper__state_8h__dep__incl.map create mode 100644 gripper__state_8h__dep__incl.md5 create mode 100644 gripper__state_8h__dep__incl.png create mode 100644 gripper__state_8h__incl.map create mode 100644 gripper__state_8h__incl.md5 create mode 100644 gripper__state_8h__incl.png create mode 100644 gripper__state_8h_source.html create mode 100644 hierarchy.html create mode 100644 index.html create mode 100644 inherit_graph_0.map create mode 100644 inherit_graph_0.md5 create mode 100644 inherit_graph_0.png create mode 100644 inherit_graph_1.map create mode 100644 inherit_graph_1.md5 create mode 100644 inherit_graph_1.png create mode 100644 inherit_graph_10.map create mode 100644 inherit_graph_10.md5 create mode 100644 inherit_graph_10.png create mode 100644 inherit_graph_11.map create mode 100644 inherit_graph_11.md5 create mode 100644 inherit_graph_11.png create mode 100644 inherit_graph_12.map create mode 100644 inherit_graph_12.md5 create mode 100644 inherit_graph_12.png create mode 100644 inherit_graph_13.map create mode 100644 inherit_graph_13.md5 create mode 100644 inherit_graph_13.png create mode 100644 inherit_graph_14.map create mode 100644 inherit_graph_14.md5 create mode 100644 inherit_graph_14.png create mode 100644 inherit_graph_15.map create mode 100644 inherit_graph_15.md5 create mode 100644 inherit_graph_15.png create mode 100644 inherit_graph_2.map create mode 100644 inherit_graph_2.md5 create mode 100644 inherit_graph_2.png create mode 100644 inherit_graph_3.map create mode 100644 inherit_graph_3.md5 create mode 100644 inherit_graph_3.png create mode 100644 inherit_graph_4.map create mode 100644 inherit_graph_4.md5 create mode 100644 inherit_graph_4.png create mode 100644 inherit_graph_5.map create mode 100644 inherit_graph_5.md5 create mode 100644 inherit_graph_5.png create mode 100644 inherit_graph_6.map create mode 100644 inherit_graph_6.md5 create mode 100644 inherit_graph_6.png create mode 100644 inherit_graph_7.map create mode 100644 inherit_graph_7.md5 create mode 100644 inherit_graph_7.png create mode 100644 inherit_graph_8.map create mode 100644 inherit_graph_8.md5 create mode 100644 inherit_graph_8.png create mode 100644 inherit_graph_9.map create mode 100644 inherit_graph_9.md5 create mode 100644 inherit_graph_9.png create mode 100644 inherits.html create mode 100644 joint_impedance_control_8cpp-example.html create mode 100644 joint_point_to_point_motion_8cpp-example.html create mode 100644 jquery.js create mode 100644 log_8h.html create mode 100644 log_8h__dep__incl.map create mode 100644 log_8h__dep__incl.md5 create mode 100644 log_8h__dep__incl.png create mode 100644 log_8h__incl.map create mode 100644 log_8h__incl.md5 create mode 100644 log_8h__incl.png create mode 100644 log_8h_source.html create mode 100644 lowpass__filter_8h.html create mode 100644 lowpass__filter_8h__dep__incl.map create mode 100644 lowpass__filter_8h__dep__incl.md5 create mode 100644 lowpass__filter_8h__dep__incl.png create mode 100644 lowpass__filter_8h__incl.map create mode 100644 lowpass__filter_8h__incl.md5 create mode 100644 lowpass__filter_8h__incl.png create mode 100644 lowpass__filter_8h_source.html create mode 100644 menu.js create mode 100644 menudata.js create mode 100644 model_8h.html create mode 100644 model_8h__incl.map create mode 100644 model_8h__incl.md5 create mode 100644 model_8h__incl.png create mode 100644 model_8h_source.html create mode 100644 motion_with_control_8cpp-example.html create mode 100644 motion_with_control_external_control_loop_8cpp-example.html create mode 100644 nav_f.png create mode 100644 nav_g.png create mode 100644 nav_h.png create mode 100644 open.png create mode 100644 print_joint_poses_8cpp-example.html create mode 100644 rate__limiting_8h.html create mode 100644 rate__limiting_8h__incl.map create mode 100644 rate__limiting_8h__incl.md5 create mode 100644 rate__limiting_8h__incl.png create mode 100644 rate__limiting_8h_source.html create mode 100644 robot_8h.html create mode 100644 robot_8h__dep__incl.map create mode 100644 robot_8h__dep__incl.md5 create mode 100644 robot_8h__dep__incl.png create mode 100644 robot_8h__incl.map create mode 100644 robot_8h__incl.md5 create mode 100644 robot_8h__incl.png create mode 100644 robot_8h_source.html create mode 100644 robot__model_8h_source.html create mode 100644 robot__model__base_8h_source.html create mode 100644 robot__state_8h.html create mode 100644 robot__state_8h__dep__incl.map create mode 100644 robot__state_8h__dep__incl.md5 create mode 100644 robot__state_8h__dep__incl.png create mode 100644 robot__state_8h__incl.map create mode 100644 robot__state_8h__incl.md5 create mode 100644 robot__state_8h__incl.png create mode 100644 robot__state_8h_source.html create mode 100644 search/all_0.html create mode 100644 search/all_0.js create mode 100644 search/all_1.html create mode 100644 search/all_1.js create mode 100644 search/all_10.html create mode 100644 search/all_10.js create mode 100644 search/all_11.html create mode 100644 search/all_11.js create mode 100644 search/all_12.html create mode 100644 search/all_12.js create mode 100644 search/all_13.html create mode 100644 search/all_13.js create mode 100644 search/all_14.html create mode 100644 search/all_14.js create mode 100644 search/all_15.html create mode 100644 search/all_15.js create mode 100644 search/all_16.html create mode 100644 search/all_16.js create mode 100644 search/all_17.html create mode 100644 search/all_17.js create mode 100644 search/all_2.html create mode 100644 search/all_2.js create mode 100644 search/all_3.html create mode 100644 search/all_3.js create mode 100644 search/all_4.html create mode 100644 search/all_4.js create mode 100644 search/all_5.html create mode 100644 search/all_5.js create mode 100644 search/all_6.html create mode 100644 search/all_6.js create mode 100644 search/all_7.html create mode 100644 search/all_7.js create mode 100644 search/all_8.html create mode 100644 search/all_8.js create mode 100644 search/all_9.html create mode 100644 search/all_9.js create mode 100644 search/all_a.html create mode 100644 search/all_a.js create mode 100644 search/all_b.html create mode 100644 search/all_b.js create mode 100644 search/all_c.html create mode 100644 search/all_c.js create mode 100644 search/all_d.html create mode 100644 search/all_d.js create mode 100644 search/all_e.html create mode 100644 search/all_e.js create mode 100644 search/all_f.html create mode 100644 search/all_f.js create mode 100644 search/classes_0.html create mode 100644 search/classes_0.js create mode 100644 search/classes_1.html create mode 100644 search/classes_1.js create mode 100644 search/classes_2.html create mode 100644 search/classes_2.js create mode 100644 search/classes_3.html create mode 100644 search/classes_3.js create mode 100644 search/classes_4.html create mode 100644 search/classes_4.js create mode 100644 search/classes_5.html create mode 100644 search/classes_5.js create mode 100644 search/classes_6.html create mode 100644 search/classes_6.js create mode 100644 search/classes_7.html create mode 100644 search/classes_7.js create mode 100644 search/classes_8.html create mode 100644 search/classes_8.js create mode 100644 search/classes_9.html create mode 100644 search/classes_9.js create mode 100644 search/classes_a.html create mode 100644 search/classes_a.js create mode 100644 search/classes_b.html create mode 100644 search/classes_b.js create mode 100644 search/classes_c.html create mode 100644 search/classes_c.js create mode 100644 search/classes_d.html create mode 100644 search/classes_d.js create mode 100644 search/close.svg create mode 100644 search/enums_0.html create mode 100644 search/enums_0.js create mode 100644 search/enums_1.html create mode 100644 search/enums_1.js create mode 100644 search/enums_2.html create mode 100644 search/enums_2.js create mode 100644 search/enums_3.html create mode 100644 search/enums_3.js create mode 100644 search/enums_4.html create mode 100644 search/enums_4.js create mode 100644 search/enumvalues_0.html create mode 100644 search/enumvalues_0.js create mode 100644 search/files_0.html create mode 100644 search/files_0.js create mode 100644 search/files_1.html create mode 100644 search/files_1.js create mode 100644 search/files_2.html create mode 100644 search/files_2.js create mode 100644 search/files_3.html create mode 100644 search/files_3.js create mode 100644 search/files_4.html create mode 100644 search/files_4.js create mode 100644 search/files_5.html create mode 100644 search/files_5.js create mode 100644 search/files_6.html create mode 100644 search/files_6.js create mode 100644 search/files_7.html create mode 100644 search/files_7.js create mode 100644 search/files_8.html create mode 100644 search/files_8.js create mode 100644 search/functions_0.html create mode 100644 search/functions_0.js create mode 100644 search/functions_1.html create mode 100644 search/functions_1.js create mode 100644 search/functions_10.html create mode 100644 search/functions_10.js create mode 100644 search/functions_11.html create mode 100644 search/functions_11.js create mode 100644 search/functions_12.html create mode 100644 search/functions_12.js create mode 100644 search/functions_13.html create mode 100644 search/functions_13.js create mode 100644 search/functions_2.html create mode 100644 search/functions_2.js create mode 100644 search/functions_3.html create mode 100644 search/functions_3.js create mode 100644 search/functions_4.html create mode 100644 search/functions_4.js create mode 100644 search/functions_5.html create mode 100644 search/functions_5.js create mode 100644 search/functions_6.html create mode 100644 search/functions_6.js create mode 100644 search/functions_7.html create mode 100644 search/functions_7.js create mode 100644 search/functions_8.html create mode 100644 search/functions_8.js create mode 100644 search/functions_9.html create mode 100644 search/functions_9.js create mode 100644 search/functions_a.html create mode 100644 search/functions_a.js create mode 100644 search/functions_b.html create mode 100644 search/functions_b.js create mode 100644 search/functions_c.html create mode 100644 search/functions_c.js create mode 100644 search/functions_d.html create mode 100644 search/functions_d.js create mode 100644 search/functions_e.html create mode 100644 search/functions_e.js create mode 100644 search/functions_f.html create mode 100644 search/functions_f.js create mode 100644 search/mag_sel.svg create mode 100644 search/nomatches.html create mode 100644 search/pages_0.html create mode 100644 search/pages_0.js create mode 100644 search/related_0.html create mode 100644 search/related_0.js create mode 100644 search/search.css create mode 100644 search/search.js create mode 100644 search/search_l.png create mode 100644 search/search_m.png create mode 100644 search/search_r.png create mode 100644 search/searchdata.js create mode 100644 search/typedefs_0.html create mode 100644 search/typedefs_0.js create mode 100644 search/variables_0.html create mode 100644 search/variables_0.js create mode 100644 search/variables_1.html create mode 100644 search/variables_1.js create mode 100644 search/variables_10.html create mode 100644 search/variables_10.js create mode 100644 search/variables_11.html create mode 100644 search/variables_11.js create mode 100644 search/variables_12.html create mode 100644 search/variables_12.js create mode 100644 search/variables_13.html create mode 100644 search/variables_13.js create mode 100644 search/variables_2.html create mode 100644 search/variables_2.js create mode 100644 search/variables_3.html create mode 100644 search/variables_3.js create mode 100644 search/variables_4.html create mode 100644 search/variables_4.js create mode 100644 search/variables_5.html create mode 100644 search/variables_5.js create mode 100644 search/variables_6.html create mode 100644 search/variables_6.js create mode 100644 search/variables_7.html create mode 100644 search/variables_7.js create mode 100644 search/variables_8.html create mode 100644 search/variables_8.js create mode 100644 search/variables_9.html create mode 100644 search/variables_9.js create mode 100644 search/variables_a.html create mode 100644 search/variables_a.js create mode 100644 search/variables_b.html create mode 100644 search/variables_b.js create mode 100644 search/variables_c.html create mode 100644 search/variables_c.js create mode 100644 search/variables_d.html create mode 100644 search/variables_d.js create mode 100644 search/variables_e.html create mode 100644 search/variables_e.js create mode 100644 search/variables_f.html create mode 100644 search/variables_f.js create mode 100644 splitbar.png create mode 100644 structfranka_1_1CommandException.html create mode 100644 structfranka_1_1CommandException__coll__graph.map create mode 100644 structfranka_1_1CommandException__coll__graph.md5 create mode 100644 structfranka_1_1CommandException__coll__graph.png create mode 100644 structfranka_1_1CommandException__inherit__graph.map create mode 100644 structfranka_1_1CommandException__inherit__graph.md5 create mode 100644 structfranka_1_1CommandException__inherit__graph.png create mode 100644 structfranka_1_1ControlException-members.html create mode 100644 structfranka_1_1ControlException.html create mode 100644 structfranka_1_1ControlException__coll__graph.map create mode 100644 structfranka_1_1ControlException__coll__graph.md5 create mode 100644 structfranka_1_1ControlException__coll__graph.png create mode 100644 structfranka_1_1ControlException__inherit__graph.map create mode 100644 structfranka_1_1ControlException__inherit__graph.md5 create mode 100644 structfranka_1_1ControlException__inherit__graph.png create mode 100644 structfranka_1_1Errors-members.html create mode 100644 structfranka_1_1Errors.html create mode 100644 structfranka_1_1Exception.html create mode 100644 structfranka_1_1Exception__coll__graph.map create mode 100644 structfranka_1_1Exception__coll__graph.md5 create mode 100644 structfranka_1_1Exception__coll__graph.png create mode 100644 structfranka_1_1Exception__inherit__graph.map create mode 100644 structfranka_1_1Exception__inherit__graph.md5 create mode 100644 structfranka_1_1Exception__inherit__graph.png create mode 100644 structfranka_1_1Finishable-members.html create mode 100644 structfranka_1_1Finishable.html create mode 100644 structfranka_1_1Finishable__inherit__graph.map create mode 100644 structfranka_1_1Finishable__inherit__graph.md5 create mode 100644 structfranka_1_1Finishable__inherit__graph.png create mode 100644 structfranka_1_1GripperState-members.html create mode 100644 structfranka_1_1GripperState.html create mode 100644 structfranka_1_1GripperState__coll__graph.map create mode 100644 structfranka_1_1GripperState__coll__graph.md5 create mode 100644 structfranka_1_1GripperState__coll__graph.png create mode 100644 structfranka_1_1IncompatibleVersionException-members.html create mode 100644 structfranka_1_1IncompatibleVersionException.html create mode 100644 structfranka_1_1IncompatibleVersionException__coll__graph.map create mode 100644 structfranka_1_1IncompatibleVersionException__coll__graph.md5 create mode 100644 structfranka_1_1IncompatibleVersionException__coll__graph.png create mode 100644 structfranka_1_1IncompatibleVersionException__inherit__graph.map create mode 100644 structfranka_1_1IncompatibleVersionException__inherit__graph.md5 create mode 100644 structfranka_1_1IncompatibleVersionException__inherit__graph.png create mode 100644 structfranka_1_1InvalidOperationException.html create mode 100644 structfranka_1_1InvalidOperationException__coll__graph.map create mode 100644 structfranka_1_1InvalidOperationException__coll__graph.md5 create mode 100644 structfranka_1_1InvalidOperationException__coll__graph.png create mode 100644 structfranka_1_1InvalidOperationException__inherit__graph.map create mode 100644 structfranka_1_1InvalidOperationException__inherit__graph.md5 create mode 100644 structfranka_1_1InvalidOperationException__inherit__graph.png create mode 100644 structfranka_1_1ModelException.html create mode 100644 structfranka_1_1ModelException__coll__graph.map create mode 100644 structfranka_1_1ModelException__coll__graph.md5 create mode 100644 structfranka_1_1ModelException__coll__graph.png create mode 100644 structfranka_1_1ModelException__inherit__graph.map create mode 100644 structfranka_1_1ModelException__inherit__graph.md5 create mode 100644 structfranka_1_1ModelException__inherit__graph.png create mode 100644 structfranka_1_1NetworkException.html create mode 100644 structfranka_1_1NetworkException__coll__graph.map create mode 100644 structfranka_1_1NetworkException__coll__graph.md5 create mode 100644 structfranka_1_1NetworkException__coll__graph.png create mode 100644 structfranka_1_1NetworkException__inherit__graph.map create mode 100644 structfranka_1_1NetworkException__inherit__graph.md5 create mode 100644 structfranka_1_1NetworkException__inherit__graph.png create mode 100644 structfranka_1_1ProtocolException.html create mode 100644 structfranka_1_1ProtocolException__coll__graph.map create mode 100644 structfranka_1_1ProtocolException__coll__graph.md5 create mode 100644 structfranka_1_1ProtocolException__coll__graph.png create mode 100644 structfranka_1_1ProtocolException__inherit__graph.map create mode 100644 structfranka_1_1ProtocolException__inherit__graph.md5 create mode 100644 structfranka_1_1ProtocolException__inherit__graph.png create mode 100644 structfranka_1_1RealtimeException.html create mode 100644 structfranka_1_1RealtimeException__coll__graph.map create mode 100644 structfranka_1_1RealtimeException__coll__graph.md5 create mode 100644 structfranka_1_1RealtimeException__coll__graph.png create mode 100644 structfranka_1_1RealtimeException__inherit__graph.map create mode 100644 structfranka_1_1RealtimeException__inherit__graph.md5 create mode 100644 structfranka_1_1RealtimeException__inherit__graph.png create mode 100644 structfranka_1_1Record-members.html create mode 100644 structfranka_1_1Record.html create mode 100644 structfranka_1_1Record__coll__graph.map create mode 100644 structfranka_1_1Record__coll__graph.md5 create mode 100644 structfranka_1_1Record__coll__graph.png create mode 100644 structfranka_1_1RobotCommand-members.html create mode 100644 structfranka_1_1RobotCommand.html create mode 100644 structfranka_1_1RobotCommand__coll__graph.map create mode 100644 structfranka_1_1RobotCommand__coll__graph.md5 create mode 100644 structfranka_1_1RobotCommand__coll__graph.png create mode 100644 structfranka_1_1RobotState-members.html create mode 100644 structfranka_1_1RobotState.html create mode 100644 structfranka_1_1RobotState__coll__graph.map create mode 100644 structfranka_1_1RobotState__coll__graph.md5 create mode 100644 structfranka_1_1RobotState__coll__graph.png create mode 100644 structfranka_1_1VacuumGripperState-members.html create mode 100644 structfranka_1_1VacuumGripperState.html create mode 100644 structfranka_1_1VacuumGripperState__coll__graph.map create mode 100644 structfranka_1_1VacuumGripperState__coll__graph.md5 create mode 100644 structfranka_1_1VacuumGripperState__coll__graph.png create mode 100644 sync_off.png create mode 100644 sync_on.png create mode 100644 tab_a.png create mode 100644 tab_b.png create mode 100644 tab_h.png create mode 100644 tab_s.png create mode 100644 tabs.css create mode 100644 vacuum__gripper_8h.html create mode 100644 vacuum__gripper_8h__incl.map create mode 100644 vacuum__gripper_8h__incl.md5 create mode 100644 vacuum__gripper_8h__incl.png create mode 100644 vacuum__gripper_8h_source.html create mode 100644 vacuum__gripper__state_8h.html create mode 100644 vacuum__gripper__state_8h__dep__incl.map create mode 100644 vacuum__gripper__state_8h__dep__incl.md5 create mode 100644 vacuum__gripper__state_8h__dep__incl.png create mode 100644 vacuum__gripper__state_8h__incl.map create mode 100644 vacuum__gripper__state_8h__incl.md5 create mode 100644 vacuum__gripper__state_8h__incl.png create mode 100644 vacuum__gripper__state_8h_source.html create mode 100644 vacuum_object_8cpp-example.html diff --git a/Logo_FRANKA_ROBOTICS_dark.png b/Logo_FRANKA_ROBOTICS_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..b38bb6b4d885527281e680762b1f71f8ee1bf83f GIT binary patch literal 4620 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 + + + + + + +Project: include/franka/active_control.h File Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
active_control.h File Reference
+
+
+ +

Implements the ActiveControlBase abstract class. +More...

+
#include <franka/active_control_base.h>
+#include <franka/exception.h>
+#include "robot.h"
+
+Include dependency graph for active_control.h:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + +
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  franka::ActiveControl
 Documented in ActiveControlBase. More...
 
+

Detailed Description

+

Implements the ActiveControlBase abstract class.

+

Contains the franka::ActiveControl, franka::ActiveTorqueControl and franka::ActiveMotionGenerator type.

+
+ + + + diff --git a/active__control_8h__dep__incl.map b/active__control_8h__dep__incl.map new file mode 100644 index 00000000..0e04e39c --- /dev/null +++ b/active__control_8h__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/active__control_8h__dep__incl.md5 b/active__control_8h__dep__incl.md5 new file mode 100644 index 00000000..76ef17fe --- /dev/null +++ b/active__control_8h__dep__incl.md5 @@ -0,0 +1 @@ +9a374d8e50e3a608f6533cbfcd76543f \ No newline at end of file diff --git a/active__control_8h__dep__incl.png b/active__control_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..8e40e06f2208fbae4bef0c39a30ad5a0cf7b7a5d GIT binary patch literal 7409 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 literal 0 HcmV?d00001 diff --git a/active__control_8h__incl.map b/active__control_8h__incl.map new file mode 100644 index 00000000..5b10d8e2 --- /dev/null +++ b/active__control_8h__incl.map @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/active__control_8h__incl.md5 b/active__control_8h__incl.md5 new file mode 100644 index 00000000..b8f86930 --- /dev/null +++ b/active__control_8h__incl.md5 @@ -0,0 +1 @@ +023ffc9f29468d08c3bc15bf2684a02f \ No newline at end of file diff --git a/active__control_8h__incl.png b/active__control_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..a2ca9250a2b3e1818ca9b345491908381bd2e5da GIT binary patch literal 129494 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 G$o~Li%+r7X literal 0 HcmV?d00001 diff --git a/active__control_8h_source.html b/active__control_8h_source.html new file mode 100644 index 00000000..eec7068f --- /dev/null +++ b/active__control_8h_source.html @@ -0,0 +1,192 @@ + + + + + + + +Project: include/franka/active_control.h Source File + + + + + + + + + + + +

+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
active_control.h
+
+
+Go to the documentation of this file.
1 // Copyright (c) 2023 Franka Robotics GmbH
+
2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
3 #pragma once
+
4 
+ +
6 #include <franka/exception.h>
+
7 
+
8 #include "robot.h"
+
9 
+
16 namespace franka {
+
17 
+ +
22  public:
+
23  ~ActiveControl() override;
+
24 
+
25  std::pair<RobotState, Duration> readOnce() override;
+
26 
+
27  void writeOnce(const Torques& /* control_input */) override {
+
28  throw franka::ControlException(wrong_write_once_method_called);
+
29  };
+
30 
+
31  void writeOnce(const JointPositions& /* motion_generator_input */,
+
32  const std::optional<const Torques>& /*control_input*/) override {
+
33  throw franka::ControlException(wrong_write_once_method_called);
+
34  };
+
35 
+
36  void writeOnce(const JointVelocities& /* motion_generator_input */,
+
37  const std::optional<const Torques>& /* control_input */) override {
+
38  throw franka::ControlException(wrong_write_once_method_called);
+
39  };
+
40 
+
41  void writeOnce(const CartesianPose& /* motion_generator_input */,
+
42  const std::optional<const Torques>& /* control_input */) override {
+
43  throw franka::ControlException(wrong_write_once_method_called);
+
44  };
+
45 
+
46  void writeOnce(const CartesianVelocities& /* motion_generator_input */,
+
47  const std::optional<const Torques>& /* control_input */) override {
+
48  throw franka::ControlException(wrong_write_once_method_called);
+
49  };
+
50 
+
51  void writeOnce(const JointPositions& motion_generator_input) override {
+
52  writeOnce(motion_generator_input, std::optional<const Torques>());
+
53  };
+
54 
+
55  void writeOnce(const JointVelocities& motion_generator_input) override {
+
56  writeOnce(motion_generator_input, std::optional<const Torques>());
+
57  };
+
58 
+
59  void writeOnce(const CartesianPose& motion_generator_input) override {
+
60  writeOnce(motion_generator_input, std::optional<const Torques>());
+
61  };
+
62 
+
63  void writeOnce(const CartesianVelocities& motion_generator_input) override {
+
64  writeOnce(motion_generator_input, std::optional<const Torques>());
+
65  };
+
66 
+
67  protected:
+
76  ActiveControl(std::shared_ptr<Robot::Impl> robot_impl,
+
77  uint32_t motion_id,
+
78  std::unique_lock<std::mutex> control_lock);
+
79 
+
81  std::shared_ptr<Robot::Impl> robot_impl;
+
82 
+
84  uint32_t motion_id;
+
85 
+
87  std::unique_lock<std::mutex> control_lock;
+
88 
+ +
91 
+
93  std::optional<Duration> last_read_access;
+
94 
+
95  private:
+
96  const std::string wrong_write_once_method_called{
+
97  "Wrong writeOnce method called for currently active control!"};
+
98 };
+
99 
+
100 } // namespace franka
+
Abstract interface class as the base of the active controllers.
+
Allows the user to read the state of a Robot and to send new control commands after starting a contro...
Definition: active_control_base.h:27
+
Documented in ActiveControlBase.
Definition: active_control.h:21
+
uint32_t motion_id
motion id of running motion
Definition: active_control.h:84
+
void writeOnce(const CartesianVelocities &, const std::optional< const Torques > &) override
Updates the cartesian velocity and torque commands of an active control.
Definition: active_control.h:46
+
std::optional< Duration > last_read_access
duration to last read access
Definition: active_control.h:93
+
void writeOnce(const JointVelocities &, const std::optional< const Torques > &) override
Updates the joint velocity and torque commands of an active control.
Definition: active_control.h:36
+
ActiveControl(std::shared_ptr< Robot::Impl > robot_impl, uint32_t motion_id, std::unique_lock< std::mutex > control_lock)
Construct a new ActiveControl object.
+
void writeOnce(const CartesianPose &, const std::optional< const Torques > &) override
Updates the cartesian position and torque commands of an active control.
Definition: active_control.h:41
+
std::pair< RobotState, Duration > readOnce() override
Waits for a robot state update and returns it.
+
void writeOnce(const CartesianPose &motion_generator_input) override
Updates the cartesian pose commands of an active control, with internal controller.
Definition: active_control.h:59
+
void writeOnce(const JointPositions &, const std::optional< const Torques > &) override
Updates the joint position and torque commands of an active control.
Definition: active_control.h:31
+
void writeOnce(const JointVelocities &motion_generator_input) override
Updates the joint velocity commands of an active control, with internal controller.
Definition: active_control.h:55
+
void writeOnce(const JointPositions &motion_generator_input) override
Updates the joint position commands of an active control, with internal controller.
Definition: active_control.h:51
+
void writeOnce(const Torques &) override
Updates torque commands of an active control.
Definition: active_control.h:27
+
std::shared_ptr< Robot::Impl > robot_impl
shared pointer to Robot::Impl instance for read and write accesses
Definition: active_control.h:81
+
void writeOnce(const CartesianVelocities &motion_generator_input) override
Updates the cartesian velocity commands of an active control, with internal controller.
Definition: active_control.h:63
+
std::unique_lock< std::mutex > control_lock
control-lock preventing parallel control processes
Definition: active_control.h:87
+
bool control_finished
flag indicating if control process is finished
Definition: active_control.h:90
+
Stores values for Cartesian pose motion generation.
Definition: control_types.h:127
+
Stores values for Cartesian velocity motion generation.
Definition: control_types.h:211
+
Stores values for joint position motion generation.
Definition: control_types.h:72
+
Stores values for joint velocity motion generation.
Definition: control_types.h:99
+
Stores joint-level torque commands without gravity and friction.
Definition: control_types.h:45
+
Contains exception definitions.
+
Contains the franka::Robot type.
+
ControlException is thrown if an error occurs during motion generation or torque control.
Definition: exception.h:73
+
+ + + + diff --git a/active__control__base_8h.html b/active__control__base_8h.html new file mode 100644 index 00000000..a9a81bdd --- /dev/null +++ b/active__control__base_8h.html @@ -0,0 +1,147 @@ + + + + + + + +Project: include/franka/active_control_base.h File Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
active_control_base.h File Reference
+
+
+ +

Abstract interface class as the base of the active controllers. +More...

+
#include <franka/control_types.h>
+#include <franka/exception.h>
+#include <franka/robot_state.h>
+#include <memory>
+#include <optional>
+#include <utility>
+
+Include dependency graph for active_control_base.h:
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + +
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  franka::ActiveControlBase
 Allows the user to read the state of a Robot and to send new control commands after starting a control process of a Robot. More...
 
+

Detailed Description

+

Abstract interface class as the base of the active controllers.

+
+ + + + diff --git a/active__control__base_8h__dep__incl.map b/active__control__base_8h__dep__incl.map new file mode 100644 index 00000000..14f7dc36 --- /dev/null +++ b/active__control__base_8h__dep__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/active__control__base_8h__dep__incl.md5 b/active__control__base_8h__dep__incl.md5 new file mode 100644 index 00000000..a915c99e --- /dev/null +++ b/active__control__base_8h__dep__incl.md5 @@ -0,0 +1 @@ +a4c32c995e7506a493bc22231017038b \ No newline at end of file diff --git a/active__control__base_8h__dep__incl.png b/active__control__base_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..5dff5530f4053df94a1d1ac51ed4e2e280022bce GIT binary patch literal 11609 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 + + + + + + + + + + + + + + + + + + + + + diff --git a/active__control__base_8h__incl.md5 b/active__control__base_8h__incl.md5 new file mode 100644 index 00000000..45664dd5 --- /dev/null +++ b/active__control__base_8h__incl.md5 @@ -0,0 +1 @@ +4bffc3ae33d90eb6762ee332775cfebe \ No newline at end of file diff --git a/active__control__base_8h__incl.png b/active__control__base_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..943e7f587eede271a6b0b95afcf8f44f638a3a47 GIT binary patch literal 49532 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 literal 0 HcmV?d00001 diff --git a/active__control__base_8h_source.html b/active__control__base_8h_source.html new file mode 100644 index 00000000..0a848883 --- /dev/null +++ b/active__control__base_8h_source.html @@ -0,0 +1,149 @@ + + + + + + + +Project: include/franka/active_control_base.h Source File + + + + + + + + + + + + +
+
+
active_control_base.h
+
+
+Go to the documentation of this file.
1 // Copyright (c) 2023 Franka Robotics GmbH
+
2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
3 #pragma once
+
4 
+
5 #include <franka/control_types.h>
+
6 #include <franka/exception.h>
+
7 #include <franka/robot_state.h>
+
8 #include <memory>
+
9 #include <optional>
+
10 #include <utility>
+
11 
+
17 namespace franka {
+
18 
+ +
28  public:
+
29  virtual ~ActiveControlBase() = default;
+
30 
+
40  virtual std::pair<RobotState, Duration> readOnce() = 0;
+
41 
+
48  virtual void writeOnce(const Torques& /* control_input */) = 0;
+
49 
+
56  virtual void writeOnce(const JointPositions& /* motion_generator_input */,
+
57  const std::optional<const Torques>& /*control_input*/) = 0;
+
58 
+
65  virtual void writeOnce(const JointVelocities& /* motion_generator_input */,
+
66  const std::optional<const Torques>& /* control_input */) = 0;
+
73  virtual void writeOnce(const CartesianPose& /* motion_generator_input */,
+
74  const std::optional<const Torques>& /* control_input */) = 0;
+
75 
+
82  virtual void writeOnce(const CartesianVelocities& /* motion_generator_input */,
+
83  const std::optional<const Torques>& /* control_input */) = 0;
+
90  virtual void writeOnce(const JointPositions& motion_generator_input) = 0;
+
91 
+
98  virtual void writeOnce(const JointVelocities& motion_generator_input) = 0;
+
105  virtual void writeOnce(const CartesianPose& motion_generator_input) = 0;
+
106 
+
113  virtual void writeOnce(const CartesianVelocities& motion_generator_input) = 0;
+
114 
+
115  protected:
+
116  ActiveControlBase() = default;
+
117 };
+
118 
+
119 } // namespace franka
+
Allows the user to read the state of a Robot and to send new control commands after starting a contro...
Definition: active_control_base.h:27
+
virtual void writeOnce(const Torques &)=0
Updates torque commands of an active control.
+
virtual void writeOnce(const CartesianVelocities &motion_generator_input)=0
Updates the cartesian velocity commands of an active control, with internal controller.
+
virtual void writeOnce(const JointVelocities &, const std::optional< const Torques > &)=0
Updates the joint velocity and torque commands of an active control.
+
virtual void writeOnce(const CartesianPose &, const std::optional< const Torques > &)=0
Updates the cartesian position and torque commands of an active control.
+
virtual void writeOnce(const JointPositions &motion_generator_input)=0
Updates the joint position commands of an active control, with internal controller.
+
virtual void writeOnce(const CartesianPose &motion_generator_input)=0
Updates the cartesian pose commands of an active control, with internal controller.
+
virtual void writeOnce(const JointPositions &, const std::optional< const Torques > &)=0
Updates the joint position and torque commands of an active control.
+
virtual void writeOnce(const CartesianVelocities &, const std::optional< const Torques > &)=0
Updates the cartesian velocity and torque commands of an active control.
+
virtual void writeOnce(const JointVelocities &motion_generator_input)=0
Updates the joint velocity commands of an active control, with internal controller.
+
virtual std::pair< RobotState, Duration > readOnce()=0
Waits for a robot state update and returns it.
+
Stores values for Cartesian pose motion generation.
Definition: control_types.h:127
+
Stores values for Cartesian velocity motion generation.
Definition: control_types.h:211
+
Stores values for joint position motion generation.
Definition: control_types.h:72
+
Stores values for joint velocity motion generation.
Definition: control_types.h:99
+
Stores joint-level torque commands without gravity and friction.
Definition: control_types.h:45
+
Contains helper types for returning motion generation and joint-level torque commands.
+
Contains exception definitions.
+
Contains the franka::RobotState types.
+
+ + + + diff --git a/active__motion__generator_8h.html b/active__motion__generator_8h.html new file mode 100644 index 00000000..718e4bd2 --- /dev/null +++ b/active__motion__generator_8h.html @@ -0,0 +1,140 @@ + + + + + + + +Project: include/franka/active_motion_generator.h File Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
active_motion_generator.h File Reference
+
+
+ +

Contains the franka::ActiveMotionGenerator type. +More...

+
#include "active_control.h"
+
+Include dependency graph for active_motion_generator.h:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  franka::ActiveMotionGenerator< MotionGeneratorType >
 Allows the user to read the state of a Robot and to send new motion generator commands after starting a control process of a Robot. More...
 
+

Detailed Description

+

Contains the franka::ActiveMotionGenerator type.

+
+ + + + diff --git a/active__motion__generator_8h__incl.map b/active__motion__generator_8h__incl.map new file mode 100644 index 00000000..0065912b --- /dev/null +++ b/active__motion__generator_8h__incl.map @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/active__motion__generator_8h__incl.md5 b/active__motion__generator_8h__incl.md5 new file mode 100644 index 00000000..b74f747e --- /dev/null +++ b/active__motion__generator_8h__incl.md5 @@ -0,0 +1 @@ +136cc88766ca8f4ab2e394bce22ab51f \ No newline at end of file diff --git a/active__motion__generator_8h__incl.png b/active__motion__generator_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..748cb39d90018e5391a253b23bbd65aaff838b2f GIT binary patch literal 132689 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 L7gMNmJMjMi-$n%g literal 0 HcmV?d00001 diff --git a/active__motion__generator_8h_source.html b/active__motion__generator_8h_source.html new file mode 100644 index 00000000..e723203c --- /dev/null +++ b/active__motion__generator_8h_source.html @@ -0,0 +1,123 @@ + + + + + + + +Project: include/franka/active_motion_generator.h Source File + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
active_motion_generator.h
+
+
+Go to the documentation of this file.
1 // Copyright (c) 2023 Franka Robotics GmbH
+
2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
3 #pragma once
+
4 
+
5 #include "active_control.h"
+
6 
+
12 namespace franka {
+
13 
+
21 template <typename MotionGeneratorType>
+ +
23  public:
+
36  void writeOnce(const MotionGeneratorType& motion_generator_input,
+
37  const std::optional<const Torques>& control_input) override;
+
43  friend class Robot;
+
44 
+
45  private:
+
55  ActiveMotionGenerator(std::shared_ptr<Robot::Impl> robot_impl,
+
56  uint32_t motion_id,
+
57  std::unique_lock<std::mutex> control_lock,
+
58  research_interface::robot::Move::ControllerMode controller_type)
+ +
60  controller_type_(controller_type){};
+
61 
+
62  bool isTorqueControlFinished(const std::optional<const Torques>& control_input);
+
63 
+
64  research_interface::robot::Move::ControllerMode controller_type_;
+
65 };
+
66 } // namespace franka
+
Implements the ActiveControlBase abstract class.
+
Documented in ActiveControlBase.
Definition: active_control.h:21
+
uint32_t motion_id
motion id of running motion
Definition: active_control.h:84
+
std::shared_ptr< Robot::Impl > robot_impl
shared pointer to Robot::Impl instance for read and write accesses
Definition: active_control.h:81
+
std::unique_lock< std::mutex > control_lock
control-lock preventing parallel control processes
Definition: active_control.h:87
+
Allows the user to read the state of a Robot and to send new motion generator commands after starting...
Definition: active_motion_generator.h:22
+
void writeOnce(const MotionGeneratorType &motion_generator_input, const std::optional< const Torques > &control_input) override
Updates the motion generator commands of an active control.
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
+ + + + diff --git a/active__torque__control_8h.html b/active__torque__control_8h.html new file mode 100644 index 00000000..6e624003 --- /dev/null +++ b/active__torque__control_8h.html @@ -0,0 +1,140 @@ + + + + + + + +Project: include/franka/active_torque_control.h File Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
active_torque_control.h File Reference
+
+
+ +

Contains the franka::ActiveTorqueControl type. +More...

+
#include "active_control.h"
+
+Include dependency graph for active_torque_control.h:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  franka::ActiveTorqueControl
 Allows the user to read the state of a Robot and to send new torque control commands after starting a control process of a Robot. More...
 
+

Detailed Description

+

Contains the franka::ActiveTorqueControl type.

+
+ + + + diff --git a/active__torque__control_8h__incl.map b/active__torque__control_8h__incl.map new file mode 100644 index 00000000..2f24fc60 --- /dev/null +++ b/active__torque__control_8h__incl.map @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/active__torque__control_8h__incl.md5 b/active__torque__control_8h__incl.md5 new file mode 100644 index 00000000..9128abbe --- /dev/null +++ b/active__torque__control_8h__incl.md5 @@ -0,0 +1 @@ +b31b574c20f489381f32fd3c62c8b7a4 \ No newline at end of file diff --git a/active__torque__control_8h__incl.png b/active__torque__control_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..fd37df6893ebd4d220896b845a1f98ed7de354d7 GIT binary patch literal 132519 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

J@idVg|C83q)m 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�Y7>xa((oi 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 + + + + + + +Project: include/franka/active_torque_control.h Source File + + + + + + + + + + + +

+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
active_torque_control.h
+
+
+Go to the documentation of this file.
1 // Copyright (c) 2023 Franka Robotics GmbH
+
2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
3 #pragma once
+
4 
+
5 #include "active_control.h"
+
6 
+
12 namespace franka {
+
13 
+ +
22  public:
+
32  void writeOnce(const Torques& control_input) override;
+
33 
+
39  friend class Robot;
+
40 
+
41  private:
+
50  ActiveTorqueControl(std::shared_ptr<Robot::Impl> robot_impl,
+
51  uint32_t motion_id,
+
52  std::unique_lock<std::mutex> control_lock)
+
53  : ActiveControl(std::move(robot_impl), motion_id, std::move(control_lock)){};
+
54 };
+
55 
+
56 } // namespace franka
+
Implements the ActiveControlBase abstract class.
+
Documented in ActiveControlBase.
Definition: active_control.h:21
+
uint32_t motion_id
motion id of running motion
Definition: active_control.h:84
+
std::shared_ptr< Robot::Impl > robot_impl
shared pointer to Robot::Impl instance for read and write accesses
Definition: active_control.h:81
+
std::unique_lock< std::mutex > control_lock
control-lock preventing parallel control processes
Definition: active_control.h:87
+
Allows the user to read the state of a Robot and to send new torque control commands after starting a...
Definition: active_torque_control.h:21
+
void writeOnce(const Torques &control_input) override
Updates the joint-level based torque commands of an active joint effort control.
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
Stores joint-level torque commands without gravity and friction.
Definition: control_types.h:45
+
+ + + + diff --git a/annotated.html b/annotated.html new file mode 100644 index 00000000..454c1fda --- /dev/null +++ b/annotated.html @@ -0,0 +1,121 @@ + + + + + + + +Project: Class List + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 12]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Nfranka
 CActiveControlDocumented in ActiveControlBase
 CActiveControlBaseAllows the user to read the state of a Robot and to send new control commands after starting a control process of a Robot
 CActiveMotionGeneratorAllows the user to read the state of a Robot and to send new motion generator commands after starting a control process of a Robot
 CActiveTorqueControlAllows the user to read the state of a Robot and to send new torque control commands after starting a control process of a Robot
 CFinishableHelper type for control and motion generation loops
 CTorquesStores joint-level torque commands without gravity and friction
 CJointPositionsStores values for joint position motion generation
 CJointVelocitiesStores values for joint velocity motion generation
 CCartesianPoseStores values for Cartesian pose motion generation
 CCartesianVelocitiesStores values for Cartesian velocity motion generation
 CDurationRepresents a duration with millisecond resolution
 CErrorsEnumerates errors that can occur while controlling a franka::Robot
 CExceptionBase class for all exceptions used by libfranka
 CModelExceptionModelException is thrown if an error occurs when loading the model library
 CNetworkExceptionNetworkException is thrown if a connection to the robot cannot be established, or when a timeout occurs
 CProtocolExceptionProtocolException is thrown if the robot returns an incorrect message
 CIncompatibleVersionExceptionIncompatibleVersionException is thrown if the robot does not support this version of libfranka
 CControlExceptionControlException is thrown if an error occurs during motion generation or torque control
 CCommandExceptionCommandException is thrown if an error occurs during command execution
 CRealtimeExceptionRealtimeException is thrown if realtime priority cannot be set
 CInvalidOperationExceptionInvalidOperationException is thrown if an operation cannot be performed
 CGripperMaintains a network connection to the gripper, provides the current gripper state, and allows the execution of commands
 CGripperStateDescribes the gripper state
 CRobotCommandCommand sent to the robot
 CRecordOne row of the log contains a robot command of timestamp n and a corresponding robot state of timestamp n+1
 CModelCalculates poses of joints and dynamic properties of the robot
 CRobotMaintains a network connection to the robot, provides the current robot state, gives access to the model library and allows to control the robot
 CRobotModelImplements RobotModelBase using Pinocchio
 CRobotStateDescribes the robot state
 CVacuumGripperMaintains a network connection to the vacuum gripper, provides the current vacuum gripper state, and allows the execution of commands
 CVacuumGripperStateDescribes the vacuum gripper state
 CMotionGeneratorAn example showing how to generate a joint pose motion to a goal position
 CRobotModelBaseRobot dynamic parameters computed from the URDF model with Pinocchio
+
+
+ + + + diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/bdwn.png b/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T + + + + + + +Project: cartesian_impedance_control.cpp + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
cartesian_impedance_control.cpp
+
+
+

An example showing a simple cartesian impedance controller without inertia shaping that renders a spring damper system where the equilibrium is the initial configuration.After starting the controller try to push the robot around and try different stiffness levels.

+
Warning
collision thresholds are set to high values. Make sure you have the user stop at hand!
+
// Copyright (c) 2023 Franka Robotics GmbH
+
// Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
#include <array>
+
#include <cmath>
+
#include <functional>
+
#include <iostream>
+
+
#include <Eigen/Dense>
+
+ + +
#include <franka/model.h>
+
#include <franka/robot.h>
+
+ +
+
int main(int argc, char** argv) {
+
// Check whether the required arguments were passed
+
if (argc != 2) {
+
std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
+
return -1;
+
}
+
+
// Compliance parameters
+
const double translational_stiffness{150.0};
+
const double rotational_stiffness{10.0};
+
Eigen::MatrixXd stiffness(6, 6), damping(6, 6);
+
stiffness.setZero();
+
stiffness.topLeftCorner(3, 3) << translational_stiffness * Eigen::MatrixXd::Identity(3, 3);
+
stiffness.bottomRightCorner(3, 3) << rotational_stiffness * Eigen::MatrixXd::Identity(3, 3);
+
damping.setZero();
+
damping.topLeftCorner(3, 3) << 2.0 * sqrt(translational_stiffness) *
+
Eigen::MatrixXd::Identity(3, 3);
+
damping.bottomRightCorner(3, 3) << 2.0 * sqrt(rotational_stiffness) *
+
Eigen::MatrixXd::Identity(3, 3);
+
+
try {
+
// connect to robot
+
franka::Robot robot(argv[1]);
+ +
// load the kinematics and dynamics model
+
franka::Model model = robot.loadModel();
+
+
franka::RobotState initial_state = robot.readOnce();
+
+
// equilibrium point is the initial position
+
Eigen::Affine3d initial_transform(Eigen::Matrix4d::Map(initial_state.O_T_EE.data()));
+
Eigen::Vector3d position_d(initial_transform.translation());
+
Eigen::Quaterniond orientation_d(initial_transform.rotation());
+
+
// set collision behavior
+
robot.setCollisionBehavior({{100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0}},
+
{{100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0}},
+
{{100.0, 100.0, 100.0, 100.0, 100.0, 100.0}},
+
{{100.0, 100.0, 100.0, 100.0, 100.0, 100.0}});
+
+
// define callback for the torque control loop
+ +
impedance_control_callback = [&](const franka::RobotState& robot_state,
+
franka::Duration /*duration*/) -> franka::Torques {
+
// get state variables
+
std::array<double, 7> coriolis_array = model.coriolis(robot_state);
+
std::array<double, 42> jacobian_array =
+
model.zeroJacobian(franka::Frame::kEndEffector, robot_state);
+
+
// convert to Eigen
+
Eigen::Map<const Eigen::Matrix<double, 7, 1>> coriolis(coriolis_array.data());
+
Eigen::Map<const Eigen::Matrix<double, 6, 7>> jacobian(jacobian_array.data());
+
Eigen::Map<const Eigen::Matrix<double, 7, 1>> q(robot_state.q.data());
+
Eigen::Map<const Eigen::Matrix<double, 7, 1>> dq(robot_state.dq.data());
+
Eigen::Affine3d transform(Eigen::Matrix4d::Map(robot_state.O_T_EE.data()));
+
Eigen::Vector3d position(transform.translation());
+
Eigen::Quaterniond orientation(transform.rotation());
+
+
// compute error to desired equilibrium pose
+
// position error
+
Eigen::Matrix<double, 6, 1> error;
+
error.head(3) << position - position_d;
+
+
// orientation error
+
// "difference" quaternion
+
if (orientation_d.coeffs().dot(orientation.coeffs()) < 0.0) {
+
orientation.coeffs() << -orientation.coeffs();
+
}
+
// "difference" quaternion
+
Eigen::Quaterniond error_quaternion(orientation.inverse() * orientation_d);
+
error.tail(3) << error_quaternion.x(), error_quaternion.y(), error_quaternion.z();
+
// Transform to base frame
+
error.tail(3) << -transform.rotation() * error.tail(3);
+
+
// compute control
+
Eigen::VectorXd tau_task(7), tau_d(7);
+
+
// Spring damper system with damping ratio=1
+
tau_task << jacobian.transpose() * (-stiffness * error - damping * (jacobian * dq));
+
tau_d << tau_task + coriolis;
+
+
std::array<double, 7> tau_d_array{};
+
Eigen::VectorXd::Map(&tau_d_array[0], 7) = tau_d;
+
return tau_d_array;
+
};
+
+
// start real-time control loop
+
std::cout << "WARNING: Collision thresholds are set to high values. "
+
<< "Make sure you have the user stop at hand!" << std::endl
+
<< "After starting try to push the robot and see how it reacts." << std::endl
+
<< "Press Enter to continue..." << std::endl;
+
std::cin.ignore();
+
robot.control(impedance_control_callback);
+
+
} catch (const franka::Exception& ex) {
+
// print exception
+
std::cout << ex.what() << std::endl;
+
}
+
+
return 0;
+
}
+
Represents a duration with millisecond resolution.
Definition: duration.h:19
+
Calculates poses of joints and dynamic properties of the robot.
Definition: model.h:52
+
std::array< double, 42 > zeroJacobian(Frame frame, const franka::RobotState &robot_state) const
Gets the 6x7 Jacobian for the given joint relative to the base frame.
+
std::array< double, 7 > coriolis(const franka::RobotState &robot_state) const noexcept
Calculates the Coriolis force vector (state-space equation): , in .
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
void control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
Starts a control loop for sending joint-level torque commands.
+
void setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds_acceleration, const std::array< double, 7 > &upper_torque_thresholds_acceleration, const std::array< double, 7 > &lower_torque_thresholds_nominal, const std::array< double, 7 > &upper_torque_thresholds_nominal, const std::array< double, 6 > &lower_force_thresholds_acceleration, const std::array< double, 6 > &upper_force_thresholds_acceleration, const std::array< double, 6 > &lower_force_thresholds_nominal, const std::array< double, 6 > &upper_force_thresholds_nominal)
Changes the collision behavior.
+
Model loadModel()
Loads the model library from the robot.
+
virtual RobotState readOnce()
Waits for a robot state update and returns it.
+
Stores joint-level torque commands without gravity and friction.
Definition: control_types.h:45
+
Contains the franka::Duration type.
+
Contains common types and functions for the examples.
+
void setDefaultBehavior(franka::Robot &robot)
Sets a default collision behavior, joint impedance and Cartesian impedance.
Definition: examples_common.cpp:12
+
Contains exception definitions.
+
Contains model library types.
+
Contains the franka::Robot type.
+
Base class for all exceptions used by libfranka.
Definition: exception.h:20
+
Describes the robot state.
Definition: robot_state.h:34
+
std::array< double, 16 > O_T_EE
Measured end effector pose in base frame.
Definition: robot_state.h:40
+
std::array< double, 7 > q
Measured joint position.
Definition: robot_state.h:233
+
std::array< double, 7 > dq
Measured joint velocity.
Definition: robot_state.h:245
+
+ + + + diff --git a/classMotionGenerator-members.html b/classMotionGenerator-members.html new file mode 100644 index 00000000..0a87fb33 --- /dev/null +++ b/classMotionGenerator-members.html @@ -0,0 +1,88 @@ + + + + + + + +Project: Member List + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
MotionGenerator Member List
+
+
+ +

This is the complete list of members for MotionGenerator, including all inherited members.

+ + + +
MotionGenerator(double speed_factor, const std::array< double, 7 > q_goal)MotionGenerator
operator()(const franka::RobotState &robot_state, franka::Duration period)MotionGenerator
+ + + + diff --git a/classMotionGenerator.html b/classMotionGenerator.html new file mode 100644 index 00000000..7bfaba9d --- /dev/null +++ b/classMotionGenerator.html @@ -0,0 +1,187 @@ + + + + + + + +Project: MotionGenerator Class Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
MotionGenerator Class Reference
+
+
+ +

An example showing how to generate a joint pose motion to a goal position. + More...

+ +

#include <examples_common.h>

+ + + + + + + + +

+Public Member Functions

 MotionGenerator (double speed_factor, const std::array< double, 7 > q_goal)
 Creates a new MotionGenerator instance for a target q. More...
 
franka::JointPositions operator() (const franka::RobotState &robot_state, franka::Duration period)
 Sends joint position calculations. More...
 
+

Detailed Description

+

Constructor & Destructor Documentation

+ +

◆ MotionGenerator()

+ +
+
+ + + + + + + + + + + + + + + + + + +
MotionGenerator::MotionGenerator (double speed_factor,
const std::array< double, 7 > q_goal 
)
+
+ +

Creates a new MotionGenerator instance for a target q.

+
Parameters
+ + + +
[in]speed_factorGeneral speed factor in range [0, 1].
[in]q_goalTarget joint positions.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ operator()()

+ +
+
+ + + + + + + + + + + + + + + + + + +
franka::JointPositions MotionGenerator::operator() (const franka::RobotStaterobot_state,
franka::Duration period 
)
+
+ +

Sends joint position calculations.

+
Parameters
+ + + +
[in]robot_stateCurrent state of the robot.
[in]periodDuration of execution.
+
+
+
Returns
Joint positions for use inside a control loop.
+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classRobotModelBase-members.html b/classRobotModelBase-members.html new file mode 100644 index 00000000..a07da456 --- /dev/null +++ b/classRobotModelBase-members.html @@ -0,0 +1,90 @@ + + + + + + + +Project: Member List + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
RobotModelBase Member List
+
+
+ +

This is the complete list of members for RobotModelBase, including all inherited members.

+ + + + + +
coriolis(const std::array< double, 7 > &q, const std::array< double, 7 > &dq, const std::array< double, 9 > &i_total, double m_total, const std::array< double, 3 > &f_x_ctotal, std::array< double, 7 > &c_ne)=0RobotModelBasepure virtual
gravity(const std::array< double, 7 > &q, const std::array< double, 3 > &g_earth, double m_total, const std::array< double, 3 > &f_x_ctotal, std::array< double, 7 > &g_ne)=0RobotModelBasepure virtual
mass(const std::array< double, 7 > &q, const std::array< double, 9 > &i_total, double m_total, const std::array< double, 3 > &f_x_ctotal, std::array< double, 49 > &m_ne)=0RobotModelBasepure virtual
~RobotModelBase()=default (defined in RobotModelBase)RobotModelBasevirtual
+ + + + diff --git a/classRobotModelBase.html b/classRobotModelBase.html new file mode 100644 index 00000000..6c20a438 --- /dev/null +++ b/classRobotModelBase.html @@ -0,0 +1,332 @@ + + + + + + + +Project: RobotModelBase Class Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
RobotModelBase Class Referenceabstract
+
+
+ +

Robot dynamic parameters computed from the URDF model with Pinocchio. + More...

+ +

#include <robot_model_base.h>

+
+Inheritance diagram for RobotModelBase:
+
+
Inheritance graph
+ + + + +
[legend]
+ + + + + + + + + + + +

+Public Member Functions

virtual void coriolis (const std::array< double, 7 > &q, const std::array< double, 7 > &dq, const std::array< double, 9 > &i_total, double m_total, const std::array< double, 3 > &f_x_ctotal, std::array< double, 7 > &c_ne)=0
 Calculates the Coriolis force vector (state-space equation): \( c= C \times dq\), in \([Nm]\). More...
 
virtual void gravity (const std::array< double, 7 > &q, const std::array< double, 3 > &g_earth, double m_total, const std::array< double, 3 > &f_x_ctotal, std::array< double, 7 > &g_ne)=0
 Calculates the gravity vector. More...
 
virtual void mass (const std::array< double, 7 > &q, const std::array< double, 9 > &i_total, double m_total, const std::array< double, 3 > &f_x_ctotal, std::array< double, 49 > &m_ne)=0
 Calculates the 7x7 mass matrix. More...
 
+

Detailed Description

+

Robot dynamic parameters computed from the URDF model with Pinocchio.

+

Member Function Documentation

+ +

◆ coriolis()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual void RobotModelBase::coriolis (const std::array< double, 7 > & q,
const std::array< double, 7 > & dq,
const std::array< double, 9 > & i_total,
double m_total,
const std::array< double, 3 > & f_x_ctotal,
std::array< double, 7 > & c_ne 
)
+
+pure virtual
+
+ +

Calculates the Coriolis force vector (state-space equation): \( c= C \times dq\), in \([Nm]\).

+
Parameters
+ + + + + + + +
[in]qJoint position.
[in]dqJoint velocity.
[in]i_totalInertia of the attached total load including end effector, relative to center of mass, given as vectorized 3x3 column-major matrix. Unit: \([kg \times m^2]\).
[in]m_totalWeight of the attached total load including end effector. Unit: \([kg]\).
[in]f_x_ctotalTranslation from flange to center of mass of the attached total load. Unit: \([m]\).
[out]c_neCoriolis force vector. Unit: \([Nm]\).
+
+
+ +

Implemented in franka::RobotModel.

+ +
+
+ +

◆ gravity()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual void RobotModelBase::gravity (const std::array< double, 7 > & q,
const std::array< double, 3 > & g_earth,
double m_total,
const std::array< double, 3 > & f_x_ctotal,
std::array< double, 7 > & g_ne 
)
+
+pure virtual
+
+ +

Calculates the gravity vector.

+

Unit: \([Nm]\).

+
Parameters
+ + + + + + +
[in]qJoint position.
[in]gravity_earthEarth's gravity vector. Unit: \(\frac{m}{s^2}\).
[in]m_totalWeight of the attached total load including end effector. Unit: \([kg]\).
[in]f_x_CtotalTranslation from flange to center of mass of the attached total load.
[out]g_neGravity vector. Unit: \([Nm]\).
+
+
+ +

Implemented in franka::RobotModel.

+ +
+
+ +

◆ mass()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual void RobotModelBase::mass (const std::array< double, 7 > & q,
const std::array< double, 9 > & i_total,
double m_total,
const std::array< double, 3 > & f_x_ctotal,
std::array< double, 49 > & m_ne 
)
+
+pure virtual
+
+ +

Calculates the 7x7 mass matrix.

+

Unit: \([kg \times m^2]\).

+
Parameters
+ + + + + + +
[in]qJoint position.
[in]i_totalInertia of the attached total load including end effector, relative to center of mass, given as vectorized 3x3 column-major matrix. Unit: \([kg \times m^2]\).
[in]m_totalWeight of the attached total load including end effector. Unit: \([kg]\).
[in]f_x_ctotalTranslation from flange to center of mass of the attached total load. Unit: \([m]\).
[out]m_neVectorized 7x7 mass matrix, column-major.
+
+
+ +

Implemented in franka::RobotModel.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classRobotModelBase__inherit__graph.map b/classRobotModelBase__inherit__graph.map new file mode 100644 index 00000000..18b3fb6b --- /dev/null +++ b/classRobotModelBase__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classRobotModelBase__inherit__graph.md5 b/classRobotModelBase__inherit__graph.md5 new file mode 100644 index 00000000..313a50b4 --- /dev/null +++ b/classRobotModelBase__inherit__graph.md5 @@ -0,0 +1 @@ +5205bb79c6252f1a60f22ff1b3838562 \ No newline at end of file diff --git a/classRobotModelBase__inherit__graph.png b/classRobotModelBase__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..baa0b89d344ee8d7894b2385a3f3b0c934e6f41a GIT binary patch literal 3861 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 + + + + + + +Project: Class Index + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+
+
A | C | D | E | F | G | I | J | M | N | P | R | T | V
+
+
+
A
+
ActiveControl (franka)
ActiveControlBase (franka)
ActiveMotionGenerator (franka)
ActiveTorqueControl (franka)
+
+
C
+
CartesianPose (franka)
CartesianVelocities (franka)
CommandException (franka)
ControlException (franka)
+
+
D
+
Duration (franka)
+
+
E
+
Errors (franka)
Exception (franka)
+
+
F
+
Finishable (franka)
+
+
G
+
Gripper (franka)
GripperState (franka)
+
+
I
+
IncompatibleVersionException (franka)
InvalidOperationException (franka)
+
+
J
+
JointPositions (franka)
JointVelocities (franka)
+
+
M
+
Model (franka)
ModelException (franka)
MotionGenerator
+
+
N
+
NetworkException (franka)
+
+
P
+
ProtocolException (franka)
+
+
R
+
RealtimeException (franka)
Record (franka)
Robot (franka)
RobotCommand (franka)
RobotModel (franka)
RobotModelBase
RobotState (franka)
+
+
T
+
Torques (franka)
+
+
V
+
VacuumGripper (franka)
VacuumGripperState (franka)
+
+
+ + + + diff --git a/classfranka_1_1ActiveControl-members.html b/classfranka_1_1ActiveControl-members.html new file mode 100644 index 00000000..4ea9c621 --- /dev/null +++ b/classfranka_1_1ActiveControl-members.html @@ -0,0 +1,109 @@ + + + + + + + +Project: Member List + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
franka::ActiveControl Member List
+
+
+ +

This is the complete list of members for franka::ActiveControl, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
ActiveControl(std::shared_ptr< Robot::Impl > robot_impl, uint32_t motion_id, std::unique_lock< std::mutex > control_lock)franka::ActiveControlprotected
ActiveControlBase()=default (defined in franka::ActiveControlBase)franka::ActiveControlBaseprotected
control_finishedfranka::ActiveControlprotected
control_lockfranka::ActiveControlprotected
last_read_accessfranka::ActiveControlprotected
motion_idfranka::ActiveControlprotected
readOnce() overridefranka::ActiveControlvirtual
robot_implfranka::ActiveControlprotected
writeOnce(const Torques &) overridefranka::ActiveControlinlinevirtual
writeOnce(const JointPositions &, const std::optional< const Torques > &) overridefranka::ActiveControlinlinevirtual
writeOnce(const JointVelocities &, const std::optional< const Torques > &) overridefranka::ActiveControlinlinevirtual
writeOnce(const CartesianPose &, const std::optional< const Torques > &) overridefranka::ActiveControlinlinevirtual
writeOnce(const CartesianVelocities &, const std::optional< const Torques > &) overridefranka::ActiveControlinlinevirtual
writeOnce(const JointPositions &motion_generator_input) overridefranka::ActiveControlinlinevirtual
writeOnce(const JointVelocities &motion_generator_input) overridefranka::ActiveControlinlinevirtual
writeOnce(const CartesianPose &motion_generator_input) overridefranka::ActiveControlinlinevirtual
writeOnce(const CartesianVelocities &motion_generator_input) overridefranka::ActiveControlinlinevirtual
~ActiveControl() override (defined in franka::ActiveControl)franka::ActiveControl
~ActiveControlBase()=default (defined in franka::ActiveControlBase)franka::ActiveControlBasevirtual
+ + + + diff --git a/classfranka_1_1ActiveControl.html b/classfranka_1_1ActiveControl.html new file mode 100644 index 00000000..d2996b68 --- /dev/null +++ b/classfranka_1_1ActiveControl.html @@ -0,0 +1,618 @@ + + + + + + + +Project: franka::ActiveControl Class Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
franka::ActiveControl Class Reference
+
+
+ +

Documented in ActiveControlBase. + More...

+ +

#include <active_control.h>

+
+Inheritance diagram for franka::ActiveControl:
+
+
Inheritance graph
+ + + + + + +
[legend]
+
+Collaboration diagram for franka::ActiveControl:
+
+
Collaboration graph
+ + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

std::pair< RobotState, DurationreadOnce () override
 Waits for a robot state update and returns it. More...
 
void writeOnce (const Torques &) override
 Updates torque commands of an active control. More...
 
void writeOnce (const JointPositions &, const std::optional< const Torques > &) override
 Updates the joint position and torque commands of an active control. More...
 
void writeOnce (const JointVelocities &, const std::optional< const Torques > &) override
 Updates the joint velocity and torque commands of an active control. More...
 
void writeOnce (const CartesianPose &, const std::optional< const Torques > &) override
 Updates the cartesian position and torque commands of an active control. More...
 
void writeOnce (const CartesianVelocities &, const std::optional< const Torques > &) override
 Updates the cartesian velocity and torque commands of an active control. More...
 
void writeOnce (const JointPositions &motion_generator_input) override
 Updates the joint position commands of an active control, with internal controller. More...
 
void writeOnce (const JointVelocities &motion_generator_input) override
 Updates the joint velocity commands of an active control, with internal controller. More...
 
void writeOnce (const CartesianPose &motion_generator_input) override
 Updates the cartesian pose commands of an active control, with internal controller. More...
 
void writeOnce (const CartesianVelocities &motion_generator_input) override
 Updates the cartesian velocity commands of an active control, with internal controller. More...
 
+ + + + +

+Protected Member Functions

 ActiveControl (std::shared_ptr< Robot::Impl > robot_impl, uint32_t motion_id, std::unique_lock< std::mutex > control_lock)
 Construct a new ActiveControl object. More...
 
+ + + + + + + + + + + + + + + + +

+Protected Attributes

+std::shared_ptr< Robot::Impl > robot_impl
 shared pointer to Robot::Impl instance for read and write accesses
 
+uint32_t motion_id
 motion id of running motion
 
+std::unique_lock< std::mutex > control_lock
 control-lock preventing parallel control processes
 
+bool control_finished
 flag indicating if control process is finished
 
+std::optional< Durationlast_read_access
 duration to last read access
 
+

Detailed Description

+

Documented in ActiveControlBase.

+

Constructor & Destructor Documentation

+ +

◆ ActiveControl()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
franka::ActiveControl::ActiveControl (std::shared_ptr< Robot::Impl > robot_impl,
uint32_t motion_id,
std::unique_lock< std::mutex > control_lock 
)
+
+protected
+
+ +

Construct a new ActiveControl object.

+
Parameters
+ + + + +
robot_implshared_ptr to the Robot::Impl in the Robot
motion_idid of the managed motion
control_lockof the Robot, preventing other read and write accesses during the active control
+
+
+ +
+
+

Member Function Documentation

+ +

◆ readOnce()

+ +
+
+ + + + + +
+ + + + + + + +
std::pair<RobotState, Duration> franka::ActiveControl::readOnce ()
+
+overridevirtual
+
+ +

Waits for a robot state update and returns it.

+
Returns
Current robot state & time since last read operation
+
Exceptions
+ + + + +
NetworkExceptionif the connection is lost, e.g. after a timeout.
ProtocolExceptionif robot returns an unexpected message.
ControlExceptionif robot is in an error state.
+
+
+ +

Implements franka::ActiveControlBase.

+ +
+
+ +

◆ writeOnce() [1/9]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void franka::ActiveControl::writeOnce (const CartesianPose,
const std::optional< const Torques > &  
)
+
+inlineoverridevirtual
+
+ +

Updates the cartesian position and torque commands of an active control.

+

hint: implemented in ActiveMotionGenerator<CartesianPose>

+ +

Implements franka::ActiveControlBase.

+ +
+
+ +

◆ writeOnce() [2/9]

+ +
+
+ + + + + +
+ + + + + + + + +
void franka::ActiveControl::writeOnce (const CartesianPosemotion_generator_input)
+
+inlineoverridevirtual
+
+ +

Updates the cartesian pose commands of an active control, with internal controller.

+
Parameters
+ + +
motion_generator_inputthe new motion generator input
+
+
+ +

Implements franka::ActiveControlBase.

+ +
+
+ +

◆ writeOnce() [3/9]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void franka::ActiveControl::writeOnce (const CartesianVelocities,
const std::optional< const Torques > &  
)
+
+inlineoverridevirtual
+
+ +

Updates the cartesian velocity and torque commands of an active control.

+

hint: implemented in ActiveMotionGenerator<CartesianVelocities>

+ +

Implements franka::ActiveControlBase.

+ +
+
+ +

◆ writeOnce() [4/9]

+ +
+
+ + + + + +
+ + + + + + + + +
void franka::ActiveControl::writeOnce (const CartesianVelocitiesmotion_generator_input)
+
+inlineoverridevirtual
+
+ +

Updates the cartesian velocity commands of an active control, with internal controller.

+
Parameters
+ + +
motion_generator_inputthe new motion generator input
+
+
+ +

Implements franka::ActiveControlBase.

+ +
+
+ +

◆ writeOnce() [5/9]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void franka::ActiveControl::writeOnce (const JointPositions,
const std::optional< const Torques > &  
)
+
+inlineoverridevirtual
+
+ +

Updates the joint position and torque commands of an active control.

+

hint: implemented in ActiveMotionGenerator<JointPositions>

+ +

Implements franka::ActiveControlBase.

+ +
+
+ +

◆ writeOnce() [6/9]

+ +
+
+ + + + + +
+ + + + + + + + +
void franka::ActiveControl::writeOnce (const JointPositionsmotion_generator_input)
+
+inlineoverridevirtual
+
+ +

Updates the joint position commands of an active control, with internal controller.

+
Parameters
+ + +
motion_generator_inputthe new motion generator input
+
+
+ +

Implements franka::ActiveControlBase.

+ +
+
+ +

◆ writeOnce() [7/9]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void franka::ActiveControl::writeOnce (const JointVelocities,
const std::optional< const Torques > &  
)
+
+inlineoverridevirtual
+
+ +

Updates the joint velocity and torque commands of an active control.

+

hint: implemented in ActiveMotionGenerator<JointVelocities>

+ +

Implements franka::ActiveControlBase.

+ +
+
+ +

◆ writeOnce() [8/9]

+ +
+
+ + + + + +
+ + + + + + + + +
void franka::ActiveControl::writeOnce (const JointVelocitiesmotion_generator_input)
+
+inlineoverridevirtual
+
+ +

Updates the joint velocity commands of an active control, with internal controller.

+
Parameters
+ + +
motion_generator_inputthe new motion generator input
+
+
+ +

Implements franka::ActiveControlBase.

+ +
+
+ +

◆ writeOnce() [9/9]

+ +
+
+ + + + + +
+ + + + + + + + +
void franka::ActiveControl::writeOnce (const Torques)
+
+inlineoverridevirtual
+
+ +

Updates torque commands of an active control.

+

hint: implemented in ActiveTorqueControl

+ +

Implements franka::ActiveControlBase.

+ +

Reimplemented in franka::ActiveTorqueControl.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classfranka_1_1ActiveControlBase-members.html b/classfranka_1_1ActiveControlBase-members.html new file mode 100644 index 00000000..897596f5 --- /dev/null +++ b/classfranka_1_1ActiveControlBase-members.html @@ -0,0 +1,102 @@ + + + + + + + +Project: Member List + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
franka::ActiveControlBase Member List
+
+
+ +

This is the complete list of members for franka::ActiveControlBase, including all inherited members.

+ + + + + + + + + + + + + +
ActiveControlBase()=default (defined in franka::ActiveControlBase)franka::ActiveControlBaseprotected
readOnce()=0franka::ActiveControlBasepure virtual
writeOnce(const Torques &)=0franka::ActiveControlBasepure virtual
writeOnce(const JointPositions &, const std::optional< const Torques > &)=0franka::ActiveControlBasepure virtual
writeOnce(const JointVelocities &, const std::optional< const Torques > &)=0franka::ActiveControlBasepure virtual
writeOnce(const CartesianPose &, const std::optional< const Torques > &)=0franka::ActiveControlBasepure virtual
writeOnce(const CartesianVelocities &, const std::optional< const Torques > &)=0franka::ActiveControlBasepure virtual
writeOnce(const JointPositions &motion_generator_input)=0franka::ActiveControlBasepure virtual
writeOnce(const JointVelocities &motion_generator_input)=0franka::ActiveControlBasepure virtual
writeOnce(const CartesianPose &motion_generator_input)=0franka::ActiveControlBasepure virtual
writeOnce(const CartesianVelocities &motion_generator_input)=0franka::ActiveControlBasepure virtual
~ActiveControlBase()=default (defined in franka::ActiveControlBase)franka::ActiveControlBasevirtual
+ + + + diff --git a/classfranka_1_1ActiveControlBase.html b/classfranka_1_1ActiveControlBase.html new file mode 100644 index 00000000..54d314ab --- /dev/null +++ b/classfranka_1_1ActiveControlBase.html @@ -0,0 +1,524 @@ + + + + + + + +Project: franka::ActiveControlBase Class Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
franka::ActiveControlBase Class Referenceabstract
+
+
+ +

Allows the user to read the state of a Robot and to send new control commands after starting a control process of a Robot. + More...

+ +

#include <active_control_base.h>

+
+Inheritance diagram for franka::ActiveControlBase:
+
+
Inheritance graph
+ + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual std::pair< RobotState, DurationreadOnce ()=0
 Waits for a robot state update and returns it. More...
 
virtual void writeOnce (const Torques &)=0
 Updates torque commands of an active control. More...
 
virtual void writeOnce (const JointPositions &, const std::optional< const Torques > &)=0
 Updates the joint position and torque commands of an active control. More...
 
virtual void writeOnce (const JointVelocities &, const std::optional< const Torques > &)=0
 Updates the joint velocity and torque commands of an active control. More...
 
virtual void writeOnce (const CartesianPose &, const std::optional< const Torques > &)=0
 Updates the cartesian position and torque commands of an active control. More...
 
virtual void writeOnce (const CartesianVelocities &, const std::optional< const Torques > &)=0
 Updates the cartesian velocity and torque commands of an active control. More...
 
virtual void writeOnce (const JointPositions &motion_generator_input)=0
 Updates the joint position commands of an active control, with internal controller. More...
 
virtual void writeOnce (const JointVelocities &motion_generator_input)=0
 Updates the joint velocity commands of an active control, with internal controller. More...
 
virtual void writeOnce (const CartesianPose &motion_generator_input)=0
 Updates the cartesian pose commands of an active control, with internal controller. More...
 
virtual void writeOnce (const CartesianVelocities &motion_generator_input)=0
 Updates the cartesian velocity commands of an active control, with internal controller. More...
 
+

Detailed Description

+

Allows the user to read the state of a Robot and to send new control commands after starting a control process of a Robot.

+

hint: To create an ActiveControlBase, see franka::ActiveTorqueControl or franka::ActiveMotionGenerator

+

Member Function Documentation

+ +

◆ readOnce()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::pair<RobotState, Duration> franka::ActiveControlBase::readOnce ()
+
+pure virtual
+
+ +

Waits for a robot state update and returns it.

+
Returns
Current robot state & time since last read operation
+
Exceptions
+ + + + +
NetworkExceptionif the connection is lost, e.g. after a timeout.
ProtocolExceptionif robot returns an unexpected message.
ControlExceptionif robot is in an error state.
+
+
+ +

Implemented in franka::ActiveControl.

+ +
+
+ +

◆ writeOnce() [1/9]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void franka::ActiveControlBase::writeOnce (const CartesianPose,
const std::optional< const Torques > &  
)
+
+pure virtual
+
+ +

Updates the cartesian position and torque commands of an active control.

+

hint: implemented in ActiveMotionGenerator<CartesianPose>

+ +

Implemented in franka::ActiveControl.

+ +
+
+ +

◆ writeOnce() [2/9]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void franka::ActiveControlBase::writeOnce (const CartesianPosemotion_generator_input)
+
+pure virtual
+
+ +

Updates the cartesian pose commands of an active control, with internal controller.

+
Parameters
+ + +
motion_generator_inputthe new motion generator input
+
+
+ +

Implemented in franka::ActiveControl.

+ +
+
+ +

◆ writeOnce() [3/9]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void franka::ActiveControlBase::writeOnce (const CartesianVelocities,
const std::optional< const Torques > &  
)
+
+pure virtual
+
+ +

Updates the cartesian velocity and torque commands of an active control.

+

hint: implemented in ActiveMotionGenerator<CartesianVelocities>

+ +

Implemented in franka::ActiveControl.

+ +
+
+ +

◆ writeOnce() [4/9]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void franka::ActiveControlBase::writeOnce (const CartesianVelocitiesmotion_generator_input)
+
+pure virtual
+
+ +

Updates the cartesian velocity commands of an active control, with internal controller.

+
Parameters
+ + +
motion_generator_inputthe new motion generator input
+
+
+ +

Implemented in franka::ActiveControl.

+ +
+
+ +

◆ writeOnce() [5/9]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void franka::ActiveControlBase::writeOnce (const JointPositions,
const std::optional< const Torques > &  
)
+
+pure virtual
+
+ +

Updates the joint position and torque commands of an active control.

+

hint: implemented in ActiveMotionGenerator<JointPositions>

+ +

Implemented in franka::ActiveControl.

+ +
+
+ +

◆ writeOnce() [6/9]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void franka::ActiveControlBase::writeOnce (const JointPositionsmotion_generator_input)
+
+pure virtual
+
+ +

Updates the joint position commands of an active control, with internal controller.

+
Parameters
+ + +
motion_generator_inputthe new motion generator input
+
+
+ +

Implemented in franka::ActiveControl.

+ +
+
+ +

◆ writeOnce() [7/9]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void franka::ActiveControlBase::writeOnce (const JointVelocities,
const std::optional< const Torques > &  
)
+
+pure virtual
+
+ +

Updates the joint velocity and torque commands of an active control.

+

hint: implemented in ActiveMotionGenerator<JointVelocities>

+ +

Implemented in franka::ActiveControl.

+ +
+
+ +

◆ writeOnce() [8/9]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void franka::ActiveControlBase::writeOnce (const JointVelocitiesmotion_generator_input)
+
+pure virtual
+
+ +

Updates the joint velocity commands of an active control, with internal controller.

+
Parameters
+ + +
motion_generator_inputthe new motion generator input
+
+
+ +

Implemented in franka::ActiveControl.

+ +
+
+ +

◆ writeOnce() [9/9]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void franka::ActiveControlBase::writeOnce (const Torques)
+
+pure virtual
+
+ +

Updates torque commands of an active control.

+

hint: implemented in ActiveTorqueControl

+ +

Implemented in franka::ActiveTorqueControl, and franka::ActiveControl.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classfranka_1_1ActiveControlBase__inherit__graph.map b/classfranka_1_1ActiveControlBase__inherit__graph.map new file mode 100644 index 00000000..002eb182 --- /dev/null +++ b/classfranka_1_1ActiveControlBase__inherit__graph.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/classfranka_1_1ActiveControlBase__inherit__graph.md5 b/classfranka_1_1ActiveControlBase__inherit__graph.md5 new file mode 100644 index 00000000..7ba6e473 --- /dev/null +++ b/classfranka_1_1ActiveControlBase__inherit__graph.md5 @@ -0,0 +1 @@ +aa03fd1901c28b61a439fe458b0e5614 \ No newline at end of file diff --git a/classfranka_1_1ActiveControlBase__inherit__graph.png b/classfranka_1_1ActiveControlBase__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..230e2662981f7a9405d0c1187e67146d7798ad81 GIT binary patch literal 12036 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 JiyoT1{%^4IiS_^h literal 0 HcmV?d00001 diff --git a/classfranka_1_1ActiveControl__coll__graph.map b/classfranka_1_1ActiveControl__coll__graph.map new file mode 100644 index 00000000..dd4e764f --- /dev/null +++ b/classfranka_1_1ActiveControl__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classfranka_1_1ActiveControl__coll__graph.md5 b/classfranka_1_1ActiveControl__coll__graph.md5 new file mode 100644 index 00000000..c8f07a3c --- /dev/null +++ b/classfranka_1_1ActiveControl__coll__graph.md5 @@ -0,0 +1 @@ +e649630b56bc1d780882f73637fc8cdd \ No newline at end of file diff --git a/classfranka_1_1ActiveControl__coll__graph.png b/classfranka_1_1ActiveControl__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..61ee01887f27a3634e657f2ec503ac7e37ceef88 GIT binary patch literal 4463 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 literal 0 HcmV?d00001 diff --git a/classfranka_1_1ActiveControl__inherit__graph.map b/classfranka_1_1ActiveControl__inherit__graph.map new file mode 100644 index 00000000..ac16dbee --- /dev/null +++ b/classfranka_1_1ActiveControl__inherit__graph.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/classfranka_1_1ActiveControl__inherit__graph.md5 b/classfranka_1_1ActiveControl__inherit__graph.md5 new file mode 100644 index 00000000..0ae66989 --- /dev/null +++ b/classfranka_1_1ActiveControl__inherit__graph.md5 @@ -0,0 +1 @@ +dbf0db27a226cca34edfe498f13494fe \ No newline at end of file diff --git a/classfranka_1_1ActiveControl__inherit__graph.png b/classfranka_1_1ActiveControl__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..31500519f79e6a19785608f2304baa2c256f5590 GIT binary patch literal 12032 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 IG + + + + + + +Project: Member List + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
franka::ActiveMotionGenerator< MotionGeneratorType > Member List
+
+
+ +

This is the complete list of members for franka::ActiveMotionGenerator< MotionGeneratorType >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
ActiveControl(std::shared_ptr< Robot::Impl > robot_impl, uint32_t motion_id, std::unique_lock< std::mutex > control_lock)franka::ActiveControlprotected
ActiveControlBase()=default (defined in franka::ActiveControlBase)franka::ActiveControlBaseprotected
control_finishedfranka::ActiveControlprotected
control_lockfranka::ActiveControlprotected
last_read_accessfranka::ActiveControlprotected
motion_idfranka::ActiveControlprotected
readOnce() overridefranka::ActiveControlvirtual
Robot classfranka::ActiveMotionGenerator< MotionGeneratorType >friend
robot_implfranka::ActiveControlprotected
writeOnce(const MotionGeneratorType &motion_generator_input, const std::optional< const Torques > &control_input) overridefranka::ActiveMotionGenerator< MotionGeneratorType >
franka::ActiveControl::writeOnce(const Torques &) overridefranka::ActiveControlinlinevirtual
franka::ActiveControl::writeOnce(const JointPositions &, const std::optional< const Torques > &) overridefranka::ActiveControlinlinevirtual
franka::ActiveControl::writeOnce(const JointVelocities &, const std::optional< const Torques > &) overridefranka::ActiveControlinlinevirtual
franka::ActiveControl::writeOnce(const CartesianPose &, const std::optional< const Torques > &) overridefranka::ActiveControlinlinevirtual
franka::ActiveControl::writeOnce(const CartesianVelocities &, const std::optional< const Torques > &) overridefranka::ActiveControlinlinevirtual
franka::ActiveControl::writeOnce(const JointPositions &motion_generator_input) overridefranka::ActiveControlinlinevirtual
franka::ActiveControl::writeOnce(const JointVelocities &motion_generator_input) overridefranka::ActiveControlinlinevirtual
franka::ActiveControl::writeOnce(const CartesianPose &motion_generator_input) overridefranka::ActiveControlinlinevirtual
franka::ActiveControl::writeOnce(const CartesianVelocities &motion_generator_input) overridefranka::ActiveControlinlinevirtual
~ActiveControl() override (defined in franka::ActiveControl)franka::ActiveControl
~ActiveControlBase()=default (defined in franka::ActiveControlBase)franka::ActiveControlBasevirtual
+ + + + diff --git a/classfranka_1_1ActiveMotionGenerator.html b/classfranka_1_1ActiveMotionGenerator.html new file mode 100644 index 00000000..00d04115 --- /dev/null +++ b/classfranka_1_1ActiveMotionGenerator.html @@ -0,0 +1,253 @@ + + + + + + + +Project: franka::ActiveMotionGenerator< MotionGeneratorType > Class Template Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
franka::ActiveMotionGenerator< MotionGeneratorType > Class Template Reference
+
+
+ +

Allows the user to read the state of a Robot and to send new motion generator commands after starting a control process of a Robot. + More...

+ +

#include <active_motion_generator.h>

+
+Inheritance diagram for franka::ActiveMotionGenerator< MotionGeneratorType >:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for franka::ActiveMotionGenerator< MotionGeneratorType >:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void writeOnce (const MotionGeneratorType &motion_generator_input, const std::optional< const Torques > &control_input) override
 Updates the motion generator commands of an active control. More...
 
- Public Member Functions inherited from franka::ActiveControl
std::pair< RobotState, DurationreadOnce () override
 Waits for a robot state update and returns it. More...
 
void writeOnce (const Torques &) override
 Updates torque commands of an active control. More...
 
void writeOnce (const JointPositions &, const std::optional< const Torques > &) override
 Updates the joint position and torque commands of an active control. More...
 
void writeOnce (const JointVelocities &, const std::optional< const Torques > &) override
 Updates the joint velocity and torque commands of an active control. More...
 
void writeOnce (const CartesianPose &, const std::optional< const Torques > &) override
 Updates the cartesian position and torque commands of an active control. More...
 
void writeOnce (const CartesianVelocities &, const std::optional< const Torques > &) override
 Updates the cartesian velocity and torque commands of an active control. More...
 
void writeOnce (const JointPositions &motion_generator_input) override
 Updates the joint position commands of an active control, with internal controller. More...
 
void writeOnce (const JointVelocities &motion_generator_input) override
 Updates the joint velocity commands of an active control, with internal controller. More...
 
void writeOnce (const CartesianPose &motion_generator_input) override
 Updates the cartesian pose commands of an active control, with internal controller. More...
 
void writeOnce (const CartesianVelocities &motion_generator_input) override
 Updates the cartesian velocity commands of an active control, with internal controller. More...
 
+ + + + +

+Friends

+class Robot
 franka::Robot as friend to allow construction of ActiveMotionGenerator<MotionGeneratorType> in start<MotionGeneratorType>Control methods
 
+ + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from franka::ActiveControl
 ActiveControl (std::shared_ptr< Robot::Impl > robot_impl, uint32_t motion_id, std::unique_lock< std::mutex > control_lock)
 Construct a new ActiveControl object. More...
 
- Protected Attributes inherited from franka::ActiveControl
+std::shared_ptr< Robot::Impl > robot_impl
 shared pointer to Robot::Impl instance for read and write accesses
 
+uint32_t motion_id
 motion id of running motion
 
+std::unique_lock< std::mutex > control_lock
 control-lock preventing parallel control processes
 
+bool control_finished
 flag indicating if control process is finished
 
+std::optional< Durationlast_read_access
 duration to last read access
 
+

Detailed Description

+

template<typename MotionGeneratorType>
+class franka::ActiveMotionGenerator< MotionGeneratorType >

+ +

Allows the user to read the state of a Robot and to send new motion generator commands after starting a control process of a Robot.

+

hint: To create an ActiveMotionGenerator, see franka::Robot

+

Member Function Documentation

+ +

◆ writeOnce()

+ +
+
+
+template<typename MotionGeneratorType >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void franka::ActiveMotionGenerator< MotionGeneratorType >::writeOnce (const MotionGeneratorType & motion_generator_input,
const std::optional< const Torques > & control_input 
)
+
+override
+
+ +

Updates the motion generator commands of an active control.

+
Parameters
+ + + +
motion_generator_inputthe new motion generator input
control_inputoptional: the external control input for each joint, if an external controller is used
+
+
+
Exceptions
+ + + +
ControlExceptionif an error related to torque control or motion generation occurred, or the motion was already finished.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classfranka_1_1ActiveMotionGenerator__coll__graph.map b/classfranka_1_1ActiveMotionGenerator__coll__graph.map new file mode 100644 index 00000000..952cec4f --- /dev/null +++ b/classfranka_1_1ActiveMotionGenerator__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classfranka_1_1ActiveMotionGenerator__coll__graph.md5 b/classfranka_1_1ActiveMotionGenerator__coll__graph.md5 new file mode 100644 index 00000000..291f0ddc --- /dev/null +++ b/classfranka_1_1ActiveMotionGenerator__coll__graph.md5 @@ -0,0 +1 @@ +f15dced3563b4a11398c9b07dbca4622 \ No newline at end of file diff --git a/classfranka_1_1ActiveMotionGenerator__coll__graph.png b/classfranka_1_1ActiveMotionGenerator__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..96f6fe082a045a2b78fdf6812974b03a8c085660 GIT binary patch literal 8096 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 literal 0 HcmV?d00001 diff --git a/classfranka_1_1ActiveMotionGenerator__inherit__graph.map b/classfranka_1_1ActiveMotionGenerator__inherit__graph.map new file mode 100644 index 00000000..952cec4f --- /dev/null +++ b/classfranka_1_1ActiveMotionGenerator__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classfranka_1_1ActiveMotionGenerator__inherit__graph.md5 b/classfranka_1_1ActiveMotionGenerator__inherit__graph.md5 new file mode 100644 index 00000000..291f0ddc --- /dev/null +++ b/classfranka_1_1ActiveMotionGenerator__inherit__graph.md5 @@ -0,0 +1 @@ +f15dced3563b4a11398c9b07dbca4622 \ No newline at end of file diff --git a/classfranka_1_1ActiveMotionGenerator__inherit__graph.png b/classfranka_1_1ActiveMotionGenerator__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..96f6fe082a045a2b78fdf6812974b03a8c085660 GIT binary patch literal 8096 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 literal 0 HcmV?d00001 diff --git a/classfranka_1_1ActiveTorqueControl-members.html b/classfranka_1_1ActiveTorqueControl-members.html new file mode 100644 index 00000000..a222971b --- /dev/null +++ b/classfranka_1_1ActiveTorqueControl-members.html @@ -0,0 +1,110 @@ + + + + + + + +Project: Member List + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
franka::ActiveTorqueControl Member List
+
+
+ +

This is the complete list of members for franka::ActiveTorqueControl, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
ActiveControl(std::shared_ptr< Robot::Impl > robot_impl, uint32_t motion_id, std::unique_lock< std::mutex > control_lock)franka::ActiveControlprotected
ActiveControlBase()=default (defined in franka::ActiveControlBase)franka::ActiveControlBaseprotected
control_finishedfranka::ActiveControlprotected
control_lockfranka::ActiveControlprotected
last_read_accessfranka::ActiveControlprotected
motion_idfranka::ActiveControlprotected
readOnce() overridefranka::ActiveControlvirtual
Robot classfranka::ActiveTorqueControlfriend
robot_implfranka::ActiveControlprotected
writeOnce(const Torques &control_input) overridefranka::ActiveTorqueControlvirtual
franka::ActiveControl::writeOnce(const JointPositions &, const std::optional< const Torques > &) overridefranka::ActiveControlinlinevirtual
franka::ActiveControl::writeOnce(const JointVelocities &, const std::optional< const Torques > &) overridefranka::ActiveControlinlinevirtual
franka::ActiveControl::writeOnce(const CartesianPose &, const std::optional< const Torques > &) overridefranka::ActiveControlinlinevirtual
franka::ActiveControl::writeOnce(const CartesianVelocities &, const std::optional< const Torques > &) overridefranka::ActiveControlinlinevirtual
franka::ActiveControl::writeOnce(const JointPositions &motion_generator_input) overridefranka::ActiveControlinlinevirtual
franka::ActiveControl::writeOnce(const JointVelocities &motion_generator_input) overridefranka::ActiveControlinlinevirtual
franka::ActiveControl::writeOnce(const CartesianPose &motion_generator_input) overridefranka::ActiveControlinlinevirtual
franka::ActiveControl::writeOnce(const CartesianVelocities &motion_generator_input) overridefranka::ActiveControlinlinevirtual
~ActiveControl() override (defined in franka::ActiveControl)franka::ActiveControl
~ActiveControlBase()=default (defined in franka::ActiveControlBase)franka::ActiveControlBasevirtual
+ + + + diff --git a/classfranka_1_1ActiveTorqueControl.html b/classfranka_1_1ActiveTorqueControl.html new file mode 100644 index 00000000..c21b82d3 --- /dev/null +++ b/classfranka_1_1ActiveTorqueControl.html @@ -0,0 +1,236 @@ + + + + + + + +Project: franka::ActiveTorqueControl Class Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
franka::ActiveTorqueControl Class Reference
+
+
+ +

Allows the user to read the state of a Robot and to send new torque control commands after starting a control process of a Robot. + More...

+ +

#include <active_torque_control.h>

+
+Inheritance diagram for franka::ActiveTorqueControl:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for franka::ActiveTorqueControl:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void writeOnce (const Torques &control_input) override
 Updates the joint-level based torque commands of an active joint effort control. More...
 
- Public Member Functions inherited from franka::ActiveControl
std::pair< RobotState, DurationreadOnce () override
 Waits for a robot state update and returns it. More...
 
void writeOnce (const JointPositions &, const std::optional< const Torques > &) override
 Updates the joint position and torque commands of an active control. More...
 
void writeOnce (const JointVelocities &, const std::optional< const Torques > &) override
 Updates the joint velocity and torque commands of an active control. More...
 
void writeOnce (const CartesianPose &, const std::optional< const Torques > &) override
 Updates the cartesian position and torque commands of an active control. More...
 
void writeOnce (const CartesianVelocities &, const std::optional< const Torques > &) override
 Updates the cartesian velocity and torque commands of an active control. More...
 
void writeOnce (const JointPositions &motion_generator_input) override
 Updates the joint position commands of an active control, with internal controller. More...
 
void writeOnce (const JointVelocities &motion_generator_input) override
 Updates the joint velocity commands of an active control, with internal controller. More...
 
void writeOnce (const CartesianPose &motion_generator_input) override
 Updates the cartesian pose commands of an active control, with internal controller. More...
 
void writeOnce (const CartesianVelocities &motion_generator_input) override
 Updates the cartesian velocity commands of an active control, with internal controller. More...
 
+ + + + +

+Friends

+class Robot
 franka::Robot as friend to allow construction of ActiveTorqueControl in startTorqueControl methods
 
+ + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from franka::ActiveControl
 ActiveControl (std::shared_ptr< Robot::Impl > robot_impl, uint32_t motion_id, std::unique_lock< std::mutex > control_lock)
 Construct a new ActiveControl object. More...
 
- Protected Attributes inherited from franka::ActiveControl
+std::shared_ptr< Robot::Impl > robot_impl
 shared pointer to Robot::Impl instance for read and write accesses
 
+uint32_t motion_id
 motion id of running motion
 
+std::unique_lock< std::mutex > control_lock
 control-lock preventing parallel control processes
 
+bool control_finished
 flag indicating if control process is finished
 
+std::optional< Durationlast_read_access
 duration to last read access
 
+

Detailed Description

+

Allows the user to read the state of a Robot and to send new torque control commands after starting a control process of a Robot.

+

hint: To create an ActiveTorqueControl, see franka::Robot

+

Member Function Documentation

+ +

◆ writeOnce()

+ +
+
+ + + + + +
+ + + + + + + + +
void franka::ActiveTorqueControl::writeOnce (const Torquescontrol_input)
+
+overridevirtual
+
+ +

Updates the joint-level based torque commands of an active joint effort control.

+
Parameters
+ + +
control_inputthe new joint-level based torques
+
+
+
Exceptions
+ + + +
ControlExceptionif an error related to torque control or motion generation occurred, or the motion was already finished.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+ +

Reimplemented from franka::ActiveControl.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classfranka_1_1ActiveTorqueControl__coll__graph.map b/classfranka_1_1ActiveTorqueControl__coll__graph.map new file mode 100644 index 00000000..c409c1e9 --- /dev/null +++ b/classfranka_1_1ActiveTorqueControl__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classfranka_1_1ActiveTorqueControl__coll__graph.md5 b/classfranka_1_1ActiveTorqueControl__coll__graph.md5 new file mode 100644 index 00000000..e7810a63 --- /dev/null +++ b/classfranka_1_1ActiveTorqueControl__coll__graph.md5 @@ -0,0 +1 @@ +d5b6f841bc0f1b25e2f9a049ecced612 \ No newline at end of file diff --git a/classfranka_1_1ActiveTorqueControl__coll__graph.png b/classfranka_1_1ActiveTorqueControl__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..4150b6748d83a38d5be4f0672519cacdaf03504d GIT binary patch literal 7670 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 + + + + diff --git a/classfranka_1_1ActiveTorqueControl__inherit__graph.md5 b/classfranka_1_1ActiveTorqueControl__inherit__graph.md5 new file mode 100644 index 00000000..e7810a63 --- /dev/null +++ b/classfranka_1_1ActiveTorqueControl__inherit__graph.md5 @@ -0,0 +1 @@ +d5b6f841bc0f1b25e2f9a049ecced612 \ No newline at end of file diff --git a/classfranka_1_1ActiveTorqueControl__inherit__graph.png b/classfranka_1_1ActiveTorqueControl__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..4150b6748d83a38d5be4f0672519cacdaf03504d GIT binary patch literal 7670 zcmdU!hd-5J{P%A{_NXK)q7;=CLRQFL>4@w|L{?<42*=(bo9wKz_Z}%^cMg$}y|VZ3 z>-T&1^A9`^FV5{g$9-S-b$!SC^SJ`lRAkAB>4*^oA(NMrR)^Oi_^BZzfZzY>vAOU< zV5BH3jhvo+r`BahAqZo>y!1nqQ{u|Ft1jy8iTL^mEoG~O*14%K&0ZMu{3&1RF>TWF z3*3)&qqSV)D*Usq=fu#P|HW@e53?l08r;R5{*PW(u)SApckSD-4 z=StL-vjf_tYC{JHfs^eb&ux>t!L*-qpJW@YV9JE==5NO5ef~^p;I`3L#2Hxfj^pOd z^S^%m66Pw}j9;vej*k9a*gWbb;J7-bf46rn_rG25?7~_petC6uj74=jba(FD;dWRa z6@YHMp>f7Ot`67F48#D(|JiHsbiK;p)QtWRuTeP}{5aU|Kv0 zx7VY^@6hP6u`#pbgKa)b3?J|P``Nu>hf2CnDe)q^XG<-y0_yogMmknjR;9MnGXHjV z*hol7Tn-kp7iPMm=r$=B1SO=Um6eq*QBq2roSY1fj^>oDFg|eTLsPLny4?q1{7FLMivw{+91f~Rf&G2w35A|y9~3lvjLkfbPx3K@$nz4sfG7+?>@^x zqa~%JUhV&zr5k{$>+Igb2zbQ0KOm0-w)C?>YH5A%mtKXXse|~0U#>&e2YA8>GZu1;2?tIl;az=Br zWL{BGc3j*Q1!d(MEa_cQHwUs)Jn~B1=Fa687KSP*D=$p71x+0(CkRA@g@x^jaC3(r z9UbLVR>nmu+^F0Co4{u~C9R%|LTPEqA-5hpIBfbe!VSy(Z+G{mujIqb%*>gU6=hgA z;V@fG?9ZY4!C_U^G;?d~?B(UxUrI|qK|=YLr{%jltzh`+_{=EXPmgy8`}-v!<+g@( ztQYtks_7`x0)vB>ZR_Ue&4|g#hqdO8cPD64Muvu{5DqRbnmJi%>F}T+l1GmoZRc59 zULwXPV-icmU@&NOPF9v50|P@&RaHD1Z8cG^jO4&q_jZ|YAlmGAt@D)i%Q9`{o}QlQ z@Nft-6B83WuS>+fm9+|)>1k5_>K-0qNy2Xf5w%yZUR7XiHvcN)GAHk&(Zs~Wgop+T zMH#Wfv&xA|+RfxVwx`bPF@1>ed7ikz^Q}3!3a_C$PE`FLeTN;v7=t9p? zr<)Ct)$f!X8R;z_#nv=7#^BA&EFy9i3UuA07)+peLVP@qS9`*`s@OiBlppCsGc&Uy z?5ez*o5;6s-wch6a34~h<$GWtF@uN`C8DOTjtgrWe1%7HPJpS@>?g~0Hn#MF0x|>7 zV}3e1I&RY*2Bfh-rvgDjLqn(NUEsq<|GK$uv9rGm2_Zuy($ws+9?zc928V=Pi|uZE z#VQ+mX>L5*GPtJS*$BRB4U1gqyvYUwD0bQ~vh`3s>}zYoPjTO&{q1pRSy@wK zyfM{QX}@p*Suq~b+`7Q=kg_!;KQE8+!Ub;#pR_MuE|{0m)i|!n$jZtVVS)n#n=5Un z*QbKG((CK>Bg==(`KP9))U>n+s~w-7r@D6U-bL5lReYp#_RWUje4tX6JKDfy;Rfkd zkt?tmqZQUn`p&b|8>tQs4t`2(Qp(C9GGx;4{O>?xgw1}5!va^gaBNrFfrAwDmQ&SNY6&0ub+1L`8KixVPYK6=TB_${2nh{m>-N&f&#|%Ku`yjd0)q6i zGHP$;$>}h083>Et&U1{HsHxMcs%U+EeMgI*pNou&`m?x53^#x8=a&wX53x;1LgJH> z!nC}y@|Mm(uYCIP;WZY>zsb#BasPw_dSs}^c*IRASA>%O!2F`*EQZX=)GSZkX-=99w6t_RdME&kX1s@OF z{CA4@A2{(}2j*UrinQlsi%zAVL53R)HkEdM%X=RiD=Iur-FhGot={AGaAK+6yU_9X z?*_#rrUNI!7Zx?qN=gi*sUJEve(P|$w9HkreydQy$HSjxXgify14ldqn; zF{G*av#;-Sc3zwS1IM|czP@1VhPvOgvh&irJx1TTZF5Lb=8F`fJ*x75V!iwVrA$)m z_ohS!7YnT&9_J5rc2x!BahQl}w%IqO@k(fDC?tv-^iL-($jIQTKjGRo)=<)f%i7O$ zJ~FFe{hA>a5*B)qV3ZrDhu0FD|;{4X#ZM*-^#68xSo1ht}6t3|MGRZl=jlZM20(h)u`r0FT1&(=fE7r<>l?+*QB^Tj+~aqsxIEWdpELlV#wj>DXo1D z00i*Gwq85yll&pT$BxJwij)^GW~{xr8W|CR1C=Y7j-S}HC-I@OGFfC~WGady;^W7> zwSNT3C)MBFPD6?He#G%eO$YAzktIZLuMd0Y`GyK~aggM)+8I5;>nYip_@AtBn>-zCQ9 zL$2_oW9Ou$7Zw)yUiDu$x3s+B>gvjI>sDV}5sHKT&Yj?yH$u;zJ^T5^q&ugiB*NRr zhrhiM@Dhy%(!3=g@Bxh$J6f0e$ov~*fpTB+Oqn~+xk(=SX-WwTXNvO+`2L!5ye?f*36(+Rz~euIt8 z{PXn8jI?QQa%NT*8<5p?9UUDWhFvL*XV2teDYp)mik8O8InzG!TYR{J>Fku#E;Em5 zKl1WITvn^*a*B(?7nhdU+1UKlpF9aboBf;V+FHm?F~2jh-Cagh*- ziH!}~WMyILY-{sPPfvFlDiFJWS=f8aVgeM~-bA`v~eUGJ>+0XPxa!N|lIy&_ACkGaMe0+vIi9(2%PK6Z?!obJ~ zdJ!~VLx`sJ6GaBTEaO=7Xg5 z2OZH@r-{$Z^5W%7qqX042vVg>9;4u!aNpYDmmi=TP2E<%;uR4m?*9J%Vi2&k|GwRx zdbqN@Od7A`_wgfL2pyUbRAy@&k1=y>w`;A+eYZUudwcuT(o$5S!*n~DZ8B#yHWa2e z(1Wzei&VoDN(qdtxU}?rKmZYRTaO{VE_g7QmDbS`<3B4aA&ZOVNtn>Uzzd!UVtXR2 ztmlyR@ArDmK2Oii`hrRXCTr~KBI0T|;=RnJADpjQB$l{rSPxg3a5vkM#Ag*4EYGAWOpqEddvA8oqo(m&vIqZ}ulyX5X<5p5iiLSIN%Cg25PpO4O>fNpq@d9vPv5`d0a7mKf}d=O8*D zG5~~){(g@~R^3fHK)p7nr~rMZPk&nV@!z0l72FOOGt>esi|o`d-cl2 zA4v~rBu?G&Uo@uVUb)A|z|nraJIsNV_sZJ*wVutc-(Lr@a1rXRBP=LHJMMo zg=lc_p0I)S?99xTQ`0l^V}~p{!27eVm|rsy9ZHVF&;K$f|K5Nj`?*MHX;~^s80+J0 zEF<;uh@whQ+v1S?`Ub7f`}ZaXoc^zx)^Z8FTKs#@Az!`}Zn);-cuAQ|np@D@9@t0h ziQHX@yqf>~jBzTBJ2-JGcavDlKCZXXR2|$!ziLb4wP9zUYkP1QKseVsA!B0VlbmlP z3UI~kn|?KxGv;Bz)1ZOiU_1uV1D~t;Mi`qM($NT38p9XYCr`S?5w+Ywx&MTqU@4Qv z$SAus^;h~E%(#X61rm=R$0Xo$4JJ7N1<6e}xvR&%#6ZFlxE33`&O*#gu_I6GIQsSWN{eouWU zv-hu?9p7bS#I$c=FfyZ~T3e>hN+kb3pwx2OseDOoEd%hwPuaUlL0~tG)w$|Tm=vo( zTL=Za&s^ox`Trs3^wuBR=| z&o_oLKA2ov3j^IE|MNxc2Tr}f@87?RS)_<2KP}V^fQ(Qa)~{efZM829WZQzZ@#)j2 z$$*>5;ptry?_+Lj8i6|owa%|z@%gb_q}q6;?K$K2;C*GhML?0gnJ86CDyny}`Y!Tw z+aI_LLK_<;_6`mL2gDBMS>?^aXlmJ77^q3&it1V)(ln6okB#;?+K^=sv_WFI3}m1T zK@ZqyCgD2k3f%ns?lU_zbaqnA@;M(re&jamV`l%@f15?p#YGr8uI=(@iN0?hSA1NY zneLR+THUUpl~riPgojR;#x_8k-DssPEAF{-B}Q$;qobp#>FKxz?%UK~zJA>}+U#Ab zX%*Y-ObbM#B~(<%5oUgV>Z1Asjt_U9d1ordHiJlm5w(MI-2gM^Ow)sU25wXp-M$3( z-dM~plBC2#c7NYH-tYBnpY4u4n=Dd#0n$Hz{y^w?=1hRE_jS8IXL+KthR114mmC6X1k1?CnF=<+if@vsjU@38l%~tthdu!H$pdL7&*V| z3zGT-o{B|WoJl}HAWqa(AUz{vV>Z^HxxfDc0CL-dwOSvr+|D5$C;O(~6Yf*w=H>z@ ztd%@vX$G|a0|7>T`ziWub!DaDLVspmUQNyPbExEcq0X9E;aB~it{z5USpCgALK)Ga zp?(UP&Cn_M|0aR51`=pHYo<|M&=$@i&??WErTq0T-1FzpAA##lJtE}%@A}yZ8X6ji zPQ$~U73grqSICi^{QQ=K?WGNW@gp2qhVZTz&{6$|%gf}ImD?a7p1*z_{OhYJ>)pF# z`A-Wj%vn#=GlFIM5a1x$?Vo(2@LOUUF8$UlVx1m5LO{#~CR^L-u{J)h^rS1;=u^ zs^aPZqODA)d$OG`K8}L{bS5wC{(f(Q6y^U5Aom;`2gsH-aMSzx`n)h0ZQGL-Y{dqw zsUfEHmDbmnAw8C7V;m8@ExK1*UVa%I$Mu~Z0t62aj~VQXf`S6X3$O#cB!bhu4)ICg z8;~Nk;I&aq><*EEu`P1A{8i9)3eU@xi(fTagvis=6WQ&-n{eM{JhRb&1B^SvuQ?rW zkEE&HvVpa>!WMk~+zPo=49_95KND44R@RoMk#DoJ{4B(Fsg?`iGdv|FjNf9o@!L1B zN6EFyU&pIp(-aFJI1$9cVoA182fNW1(}T^k5Lb_!0Wy7UY000Q0_y~B$gSJATgGb~ zaS-E<&>^k%Z{HM-_D>Ri9iA6JK4oXOz_NTb?OlC~6&3P05(K{A0LRW;>GW@c_2kl0 zP>RO^5pO&x+*Y_^pBd=kH3S1V$tSdGPwz7kse)z2oC)$r**;7d4zzYg%&Zl#>FJIV}}bP*PLllaK_- zS|y-uj`nPqu@w|x_fBm=#=5~K!}|8NZ&DKDpgBLxV{20XFCWwIg+~jjp5B0!XEkoz zaiXcCLsmp>d3l+c5V!v5pCT!vFskEcr6ZDy;sDn#=zNr98iGJ=M0daaO#`W3>AK4a zwri`;j)&UnJ%0WnL8rA8cl+EJw4te~|M%}oBAegug`pf(tLZm;upE!X>xQfyQKjYO z-stt#i>iiwsSnS9OI=;vWjqupUchRM5V92Fk^t6JxGX6;`u+aqoa6oxWFwMFbqlev zvy-y53PYAF-pqzTh~VZ> z)*tWaY-BRoSkH+=Y(kbvf={Kbqq6}SI|Wbw2vE4f5(9w=TT6SBJ``#?IzbTRZhL?H zVV7!tr=r-$=N#AyL152=5=jNG5scd*t(P;M5uKf#62``?d0+#BvbQUM+y3~-4~4el zcb#jSiGqRxCCG;-*(%3*)l8qd;}n0YT5s#*z+4xDkbR9UCxfknz4?r=$=TWMe9Q&B zhexQJckYma6bc*MDKYMt{PSm{&)(SBSSeAE3d$$qMMf{s2*xy|juh + + + + + + +Project: Member List + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
franka::CartesianPose Member List
+
+
+ +

This is the complete list of members for franka::CartesianPose, including all inherited members.

+ + + + + + + + + +
CartesianPose(const std::array< double, 16 > &cartesian_pose) noexceptfranka::CartesianPose
CartesianPose(const std::array< double, 16 > &cartesian_pose, const std::array< double, 2 > &elbow) noexceptfranka::CartesianPose
CartesianPose(std::initializer_list< double > cartesian_pose)franka::CartesianPose
CartesianPose(std::initializer_list< double > cartesian_pose, std::initializer_list< double > elbow)franka::CartesianPose
elbowfranka::CartesianPose
hasElbow() const noexceptfranka::CartesianPose
motion_finishedfranka::Finishable
O_T_EEfranka::CartesianPose
+ + + + diff --git a/classfranka_1_1CartesianPose.html b/classfranka_1_1CartesianPose.html new file mode 100644 index 00000000..daf829b8 --- /dev/null +++ b/classfranka_1_1CartesianPose.html @@ -0,0 +1,384 @@ + + + + + + + +Project: franka::CartesianPose Class Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
franka::CartesianPose Class Reference
+
+
+ +

Stores values for Cartesian pose motion generation. + More...

+ +

#include <control_types.h>

+
+Inheritance diagram for franka::CartesianPose:
+
+
Inheritance graph
+ + + + +
[legend]
+
+Collaboration diagram for franka::CartesianPose:
+
+
Collaboration graph
+ + + + +
[legend]
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 CartesianPose (const std::array< double, 16 > &cartesian_pose) noexcept
 Creates a new CartesianPose instance. More...
 
 CartesianPose (const std::array< double, 16 > &cartesian_pose, const std::array< double, 2 > &elbow) noexcept
 Creates a new CartesianPose instance. More...
 
 CartesianPose (std::initializer_list< double > cartesian_pose)
 Creates a new CartesianPose instance. More...
 
 CartesianPose (std::initializer_list< double > cartesian_pose, std::initializer_list< double > elbow)
 Creates a new CartesianPose instance. More...
 
bool hasElbow () const noexcept
 Determines whether there is a stored elbow configuration. More...
 
+ + + + + + + + + + + +

+Public Attributes

std::array< double, 16 > O_T_EE {}
 Homogeneous transformation \(^O{\mathbf{T}_{EE}}_{d}\), column major, that transforms from the end effector frame \(EE\) to base frame \(O\). More...
 
std::array< double, 2 > elbow {}
 Elbow configuration. More...
 
- Public Attributes inherited from franka::Finishable
+bool motion_finished = false
 Determines whether to finish a currently running motion.
 
+

Detailed Description

+

Constructor & Destructor Documentation

+ +

◆ CartesianPose() [1/4]

+ +
+
+ + + + + +
+ + + + + + + + +
franka::CartesianPose::CartesianPose (const std::array< double, 16 > & cartesian_pose)
+
+noexcept
+
+ +

Creates a new CartesianPose instance.

+
Parameters
+ + +
[in]cartesian_poseDesired vectorized homogeneous transformation matrix \(^O {\mathbf{T}_{EE}}_{d}\), column major, that transforms from the end effector frame \(EE\) to base frame \(O\). Equivalently, it is the desired end effector pose in base frame.
+
+
+ +
+
+ +

◆ CartesianPose() [2/4]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
franka::CartesianPose::CartesianPose (const std::array< double, 16 > & cartesian_pose,
const std::array< double, 2 > & elbow 
)
+
+noexcept
+
+ +

Creates a new CartesianPose instance.

+
Parameters
+ + + +
[in]cartesian_poseDesired vectorized homogeneous transformation matrix \(^O {\mathbf{T}_{EE}}_{d}\), column major, that transforms from the end effector frame \(EE\) to base frame \(O\). Equivalently, it is the desired end effector pose in base frame.
[in]elbowElbow configuration (see elbow member for more details).
+
+
+ +
+
+ +

◆ CartesianPose() [3/4]

+ +
+
+ + + + + + + + +
franka::CartesianPose::CartesianPose (std::initializer_list< double > cartesian_pose)
+
+ +

Creates a new CartesianPose instance.

+
Parameters
+ + +
[in]cartesian_poseDesired vectorized homogeneous transformation matrix \(^O {\mathbf{T}_{EE}}_{d}\), column major, that transforms from the end effector frame \(EE\) to base frame \(O\). Equivalently, it is the desired end effector pose in base frame.
+
+
+
Exceptions
+ + +
std::invalid_argumentif the given initializer list has an invalid number of arguments.
+
+
+ +
+
+ +

◆ CartesianPose() [4/4]

+ +
+
+ + + + + + + + + + + + + + + + + + +
franka::CartesianPose::CartesianPose (std::initializer_list< double > cartesian_pose,
std::initializer_list< double > elbow 
)
+
+ +

Creates a new CartesianPose instance.

+
Parameters
+ + + +
[in]cartesian_poseDesired vectorized homogeneous transformation matrix \(^O {\mathbf{T}_{EE}}_{d}\), column major, that transforms from the end effector frame \(EE\) to base frame \(O\). Equivalently, it is the desired end effector pose in base frame.
[in]elbowElbow configuration (see elbow member for more details).
+
+
+
Exceptions
+ + +
std::invalid_argumentif a given initializer list has an invalid number of arguments.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ hasElbow()

+ +
+
+ + + + + +
+ + + + + + + +
bool franka::CartesianPose::hasElbow () const
+
+noexcept
+
+ +

Determines whether there is a stored elbow configuration.

+
Returns
True if there is a stored elbow configuration, false otherwise.
+ +
+
+

Member Data Documentation

+ +

◆ elbow

+ +
+
+ + + + +
std::array<double, 2> franka::CartesianPose::elbow {}
+
+ +

Elbow configuration.

+

The values of the array are:

    +
  • elbow[0]: Position of the 3rd joint in \([rad]\).
  • +
  • elbow[1]: Flip direction of the elbow (4th joint):
      +
    • +1 if \(q_4 > q_{elbow-flip}\)
    • +
    • 0 if \(q_4 == q_{elbow-flip} \)
    • +
    • -1 if \(q_4 < q_{elbow-flip} \)
    • +
    +
  • +
+

with \(q_{elbow-flip}\) as specified in the robot interface specification page in the FCI Documentation.

+ +
+
+ +

◆ O_T_EE

+ +
+
+ + + + +
std::array<double, 16> franka::CartesianPose::O_T_EE {}
+
+ +

Homogeneous transformation \(^O{\mathbf{T}_{EE}}_{d}\), column major, that transforms from the end effector frame \(EE\) to base frame \(O\).

+

Equivalently, it is the desired end effector pose in base frame.

+
Examples
joint_impedance_control.cpp.
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classfranka_1_1CartesianPose__coll__graph.map b/classfranka_1_1CartesianPose__coll__graph.map new file mode 100644 index 00000000..d0e17a63 --- /dev/null +++ b/classfranka_1_1CartesianPose__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classfranka_1_1CartesianPose__coll__graph.md5 b/classfranka_1_1CartesianPose__coll__graph.md5 new file mode 100644 index 00000000..befdc6df --- /dev/null +++ b/classfranka_1_1CartesianPose__coll__graph.md5 @@ -0,0 +1 @@ +81c49068e9ce62a88cba1af25c92fd08 \ No newline at end of file diff --git a/classfranka_1_1CartesianPose__coll__graph.png b/classfranka_1_1CartesianPose__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..486464cd573a4ae5e47c58d412fb4930e2977643 GIT binary patch literal 3873 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

Tue}P#hmEtuDj*uh4C>$gY2n4A1 z?)HY+hmH=%`JQb2QfbYlrF8X&hu7BDz&@USavH91WLHvBy0j+VZk2>x~I*|TSpQ&W%MzE#==IZo*#N6fFX-k@($hb%^~oYwcF&Q2_;=jfb6yXNkJm?`Zu+mfjB@ zwD#p))3m*vnc}4tz$mo+k}+loUt-g7c9sa8)v3nr?FO@0tTU35hyVPd!M(iX3`xS# zpkEw+d`z%i{nVpnYGwux2+#n*mpxiPEIj;>nxgpN0yJpun9S**m9P8jZi|4etn$aSn-`%#eCXRoTA@%7$elZPG?oXR`}kSM zH@4-QOEn7+8XK>al$7kJ-;Yjj5knwx>iGIz0vWHhtPnj^1J{ym)9x)O`#DObh^P zYHC{h;3p@br@4j2fjlHf^{qHS^TGj-#1+fnh@*mGLw13%dK`@kNM~{51`+dqhtD$q zdP~+-0$6m9+HddT*MxI0Xd-_od^( z10~A6k+8PNV~!iM-5}&e=!>`XLHl*}$EISQ^N>Zh*+ggdlFh^naY0oF>6 z6>NQ=QqdDl!8Y}Na%!YDAxy*L$w_;N!muZN<_BAcfMY35?a{WHRoR{B@89p(spuHt ze*F9?s-<<>3(W~ps#A!B@)61Zwo=Ab&reTJ2b9BfeFIta>~a5<);~a}ml~dj9e?QU v + + + diff --git a/classfranka_1_1CartesianPose__inherit__graph.md5 b/classfranka_1_1CartesianPose__inherit__graph.md5 new file mode 100644 index 00000000..befdc6df --- /dev/null +++ b/classfranka_1_1CartesianPose__inherit__graph.md5 @@ -0,0 +1 @@ +81c49068e9ce62a88cba1af25c92fd08 \ No newline at end of file diff --git a/classfranka_1_1CartesianPose__inherit__graph.png b/classfranka_1_1CartesianPose__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..486464cd573a4ae5e47c58d412fb4930e2977643 GIT binary patch literal 3873 zcmc&%c{G&o-=5MpLyZ>uml7gbvXs4$ZBPbdLJKi=(on{XEi%RuMzTyowrp7<4B4_| z)E9-U$zFD5Fs4bC_x8T$_n!Bh_xJzrJm>S=e>~5*&wXF_^|`L=jy6ZYVVr++LLd;B zv5`I!jBh}BLl1+u+t!(QFdRl-gX=@~_MfcAf}YtUH#Dhi*zG8SmgJ@@xvx@()M zj!u<6PfQ#?Pw{|K{}B@T+bxWZf!C?m7ps#wc@Jc}!NU(e(Yv>lRf?3qK8K1aJ#3C( zH*o)}Kq;pX9?&e#Wl%bmg+EXg`uOa`Z-Qu~j_$#G&=?vi4!Lp`lsa@+}+)uYha}#U_w-D z)JD|a2niIV@@K>VCsL$nL<}lR-S4*rX5Zouuu_@0DY7gOlaR>k+zfm&(wdf<8r|Be`|;-k9)A9`Vp!tB zJxKV;=i}i+)>8I92{=JymPON6OVIq6VxBhHuv_PaHPhz zj8wW}@7FXnoxYYL+md4tV{UEjT24Vpw-;LEG7z{|EAFA$TB8^Cx>YB1#1fjv$4_5$ z>1wX_9I9F*r=%>FI=kJ0c+XH_UC$NSNF)+{eO>p_qo(nS?VVo}&?86M=u>Tq_RSF1 z*4FguSiRv2dm{Ssfo9SvO&7*`OG}Haf`a){Q#AKEC2MQzl+4U8NhW!Nm-CRH%53YY zhH-zlBP}hf2YqljSMmj0G!~1M6%~CP-Hy(;DpuZz7gleTmXS%VsZl+`$*EN5henGD zsXur%zTm$xTTx!FkTH`6pw{%Af7%;Nv1_WTO1gRTX2lWy3*`|JhyB*34fq5F-F@X8 znW>eP7dyMVovW*>uS+K@!QpVL8#nSQaoXD26#JHgR(5uuJv==}Tr-2Ib|E|1d}NU? z$u^T$#;P2YuSW)#Fbz9pYGgF;-FPLCS)MFo?NM6kIdq|$k$BEb03u25RNkn$H`03c zBuAo2UdC&$j}87C0+7;CuyX;&y0%e^%u=$vyu2%u$y|=t-tBp3t5Gz*Qz3 zrWDEAH3*E1jMN7GR+{ZfC8S<-&1q^HpA4XqiY1cd{^{(*+M$$#Sl&_kVwVFLMoZ)* z#fbJ8ejMiMSpQP%=q)`xwtf#~&`9=PUU6Yz2hU1KVCzVEc@ls#ijTJO4Zmm83SYlg zdhLgMS&oGx5L`JqIp$VY5&8L&g(zv$_Yng1UzoIs_>H+QGoTMxTT5?5$(>Vkb3^yl zaX4JVpVfMsN*CDuu{z?`RsatlU+b4I$2f^$kivT}0%#oaYGD_tC#Ll4-L+aE~J$Vf;^3ZLnS&kfnzJv^lB zmsxtdhHJlZd$RQsUc7ixQX*ShTRUIk&!RiTp3>wy!Y3PQBWq}61RX57>BuB&s8dyNLp8}hsU&DJM{m{Q}=Qsr!ix46U~U>mtVh$=n-(N z^`1K5(&ep;lWB~&b7AgR;1yQg2X?QrvVdO9;GkZrjc_yM^Kv62UntW$dCl*KGvj!X zgtRnlj|JCS-@vqVbTEeW8lvXYhYlr~C?nF{c7Nz~z7G%KvEx4Yz)1(?MTS_IV1#eB5OQ*$C`1r(L72H*R zXdTQ=B)htP=F!V`>$@(K?BV3PCxpe$HhR~~=g`+>#b>1T#SlwP`I5Y!U&<+3!h`vV zWVl(T%H;QVdpbq^yR{^vLtrLFOY8ssa`UEvhPG=yQZZfo?vuqujf=hmI19XgQi>n1 za6!l;t3i<~LtRHgTRRh9zjm$lT`(&|)lImgiUs@nI0I{oo8rKit}f4&mxa|-0X>JQ zQz)xJhP`#L5RrUtVZk~JiQR7Gj6IN=Iuux#+w|q$#FtU>WjvinSsCVy-Pyyzicua? zJSM{cu_s3;rg>BwH%IzM9-+i~>eTO#jDk?5+KsDy+X-gzBtg7l##s(t-$6OxCUyOW; z=;gQjzt-7)4WDcxagv+6!h1?Lh|voVO6os<<_tt#U0t%+ESyMwADWt(8Q<53{OF`K zJUY5z@oc{0(N2Kuttw~?pPUj-#--yLzVn}dCKndYvnGKGf&SABdGc{u+9Iz(rV zVjM@_I+s^eEFim^n{`;fe>?1M|88JB2kv?;gD*`LW9Zr9c8l9GZzw%0r5Z5jiV2g__@LPH_fGcL6(gb7dB|8>IPjhGxaXIRri+Kuld-5C(%885_3{kMIMBkK7mH8ETxsWxN99jJP

Tue}P#hmEtuDj*uh4C>$gY2n4A1 z?)HY+hmH=%`JQb2QfbYlrF8X&hu7BDz&@USavH91WLHvBy0j+VZk2>x~I*|TSpQ&W%MzE#==IZo*#N6fFX-k@($hb%^~oYwcF&Q2_;=jfb6yXNkJm?`Zu+mfjB@ zwD#p))3m*vnc}4tz$mo+k}+loUt-g7c9sa8)v3nr?FO@0tTU35hyVPd!M(iX3`xS# zpkEw+d`z%i{nVpnYGwux2+#n*mpxiPEIj;>nxgpN0yJpun9S**m9P8jZi|4etn$aSn-`%#eCXRoTA@%7$elZPG?oXR`}kSM zH@4-QOEn7+8XK>al$7kJ-;Yjj5knwx>iGIz0vWHhtPnj^1J{ym)9x)O`#DObh^P zYHC{h;3p@br@4j2fjlHf^{qHS^TGj-#1+fnh@*mGLw13%dK`@kNM~{51`+dqhtD$q zdP~+-0$6m9+HddT*MxI0Xd-_od^( z10~A6k+8PNV~!iM-5}&e=!>`XLHl*}$EISQ^N>Zh*+ggdlFh^naY0oF>6 z6>NQ=QqdDl!8Y}Na%!YDAxy*L$w_;N!muZN<_BAcfMY35?a{WHRoR{B@89p(spuHt ze*F9?s-<<>3(W~ps#A!B@)61Zwo=Ab&reTJ2b9BfeFIta>~a5<);~a}ml~dj9e?QU v + + + + + + +Project: Member List + + + + + + + + + + + +

+
+
+
franka::CartesianVelocities Member List
+
+
+ +

This is the complete list of members for franka::CartesianVelocities, including all inherited members.

+ + + + + + + + + +
CartesianVelocities(const std::array< double, 6 > &cartesian_velocities) noexceptfranka::CartesianVelocities
CartesianVelocities(const std::array< double, 6 > &cartesian_velocities, const std::array< double, 2 > &elbow) noexceptfranka::CartesianVelocities
CartesianVelocities(std::initializer_list< double > cartesian_velocities)franka::CartesianVelocities
CartesianVelocities(std::initializer_list< double > cartesian_velocities, std::initializer_list< double > elbow)franka::CartesianVelocities
elbowfranka::CartesianVelocities
hasElbow() const noexceptfranka::CartesianVelocities
motion_finishedfranka::Finishable
O_dP_EEfranka::CartesianVelocities
+ + + + diff --git a/classfranka_1_1CartesianVelocities.html b/classfranka_1_1CartesianVelocities.html new file mode 100644 index 00000000..90054c92 --- /dev/null +++ b/classfranka_1_1CartesianVelocities.html @@ -0,0 +1,367 @@ + + + + + + + +Project: franka::CartesianVelocities Class Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
franka::CartesianVelocities Class Reference
+
+
+ +

Stores values for Cartesian velocity motion generation. + More...

+ +

#include <control_types.h>

+
+Inheritance diagram for franka::CartesianVelocities:
+
+
Inheritance graph
+ + + + +
[legend]
+
+Collaboration diagram for franka::CartesianVelocities:
+
+
Collaboration graph
+ + + + +
[legend]
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 CartesianVelocities (const std::array< double, 6 > &cartesian_velocities) noexcept
 Creates a new CartesianVelocities instance. More...
 
 CartesianVelocities (const std::array< double, 6 > &cartesian_velocities, const std::array< double, 2 > &elbow) noexcept
 Creates a new CartesianVelocities instance. More...
 
 CartesianVelocities (std::initializer_list< double > cartesian_velocities)
 Creates a new CartesianVelocities instance. More...
 
 CartesianVelocities (std::initializer_list< double > cartesian_velocities, std::initializer_list< double > elbow)
 Creates a new CartesianVelocities instance. More...
 
bool hasElbow () const noexcept
 Determines whether there is a stored elbow configuration. More...
 
+ + + + + + + + + + + +

+Public Attributes

+std::array< double, 6 > O_dP_EE {}
 Cartesian velocity with respect to the base frame O with \((\dot x, \dot y, \dot z)\) in \([m/s]\) and \((\omega_x, \omega_y, \omega_z)\) in \([rad/s]\).
 
std::array< double, 2 > elbow {}
 Elbow configuration. More...
 
- Public Attributes inherited from franka::Finishable
+bool motion_finished = false
 Determines whether to finish a currently running motion.
 
+

Detailed Description

+

Stores values for Cartesian velocity motion generation.

+

The Cartesian velocity of the end-effector is expressed in a frame parallel to the fixed/base frame, whose origin is the same as the end-effector frame. Rotations are thus expressed around the end-effector and parallel to the base frame.

+
Examples
generate_cartesian_velocity_motion.cpp, and generate_cartesian_velocity_motion_external_control_loop.cpp.
+
+

Constructor & Destructor Documentation

+ +

◆ CartesianVelocities() [1/4]

+ +
+
+ + + + + +
+ + + + + + + + +
franka::CartesianVelocities::CartesianVelocities (const std::array< double, 6 > & cartesian_velocities)
+
+noexcept
+
+ +

Creates a new CartesianVelocities instance.

+
Parameters
+ + +
[in]cartesian_velocitiesDesired Cartesian velocity with respect to the base frame O with \((\dot x, \dot y, \dot z)\) in \([m/s]\) and \((\omega_x, \omega_y, \omega_z)\) in \([rad/s]\).
+
+
+ +
+
+ +

◆ CartesianVelocities() [2/4]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
franka::CartesianVelocities::CartesianVelocities (const std::array< double, 6 > & cartesian_velocities,
const std::array< double, 2 > & elbow 
)
+
+noexcept
+
+ +

Creates a new CartesianVelocities instance.

+
Parameters
+ + + +
[in]cartesian_velocitiesDesired Cartesian velocity with respect to the base frame O with \((\dot x, \dot y, \dot z)\) in \([m/s]\) and \((\omega_x, \omega_y, \omega_z)\) in \([rad/s]\).
[in]elbowElbow configuration (see elbow member for more details).
+
+
+ +
+
+ +

◆ CartesianVelocities() [3/4]

+ +
+
+ + + + + + + + +
franka::CartesianVelocities::CartesianVelocities (std::initializer_list< double > cartesian_velocities)
+
+ +

Creates a new CartesianVelocities instance.

+
Parameters
+ + +
[in]cartesian_velocitiesDesired Cartesian velocity with respect to the base frame O with \((\dot x, \dot y, \dot z)\) in \([m/s]\) and \((\omega_x, \omega_y, \omega_z)\) in \([rad/s]\).
+
+
+
Exceptions
+ + +
std::invalid_argumentif the given initializer list has an invalid number of arguments.
+
+
+ +
+
+ +

◆ CartesianVelocities() [4/4]

+ +
+
+ + + + + + + + + + + + + + + + + + +
franka::CartesianVelocities::CartesianVelocities (std::initializer_list< double > cartesian_velocities,
std::initializer_list< double > elbow 
)
+
+ +

Creates a new CartesianVelocities instance.

+
Parameters
+ + + +
[in]cartesian_velocitiesDesired Cartesian velocity with respect to the base frame O with \((\dot x, \dot y, \dot z)\) in \([m/s]\) and \((\omega_x, \omega_y, \omega_z)\) in \([rad/s]\).
[in]elbowElbow configuration (see elbow member for more details).
+
+
+
Exceptions
+ + +
std::invalid_argumentif a given initializer list has an invalid number of arguments.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ hasElbow()

+ +
+
+ + + + + +
+ + + + + + + +
bool franka::CartesianVelocities::hasElbow () const
+
+noexcept
+
+ +

Determines whether there is a stored elbow configuration.

+
Returns
True if there is a stored elbow configuration, false otherwise.
+ +
+
+

Member Data Documentation

+ +

◆ elbow

+ +
+
+ + + + +
std::array<double, 2> franka::CartesianVelocities::elbow {}
+
+ +

Elbow configuration.

+

The values of the array are:

    +
  • elbow[0]: Position of the 3rd joint in \([rad]\).
  • +
  • elbow[1]: Flip direction of the elbow (4th joint):
      +
    • +1 if \(q_4 > \alpha\)
    • +
    • 0 if \(q_4 == \alpha \)
    • +
    • -1 if \(q_4 < \alpha \)
    • +
    +
  • +
+

with \(\alpha = -0.467002423653011\) \(rad\)

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classfranka_1_1CartesianVelocities__coll__graph.map b/classfranka_1_1CartesianVelocities__coll__graph.map new file mode 100644 index 00000000..2a929887 --- /dev/null +++ b/classfranka_1_1CartesianVelocities__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classfranka_1_1CartesianVelocities__coll__graph.md5 b/classfranka_1_1CartesianVelocities__coll__graph.md5 new file mode 100644 index 00000000..5ce9c197 --- /dev/null +++ b/classfranka_1_1CartesianVelocities__coll__graph.md5 @@ -0,0 +1 @@ +32bed61017a88b35679a2bc229a0ebf7 \ No newline at end of file diff --git a/classfranka_1_1CartesianVelocities__coll__graph.png b/classfranka_1_1CartesianVelocities__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2c627a598f68b41bbe84419cbb8c922a41d7d884 GIT binary patch literal 4207 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 WjvC$3Hv~@*AO + + + diff --git a/classfranka_1_1CartesianVelocities__inherit__graph.md5 b/classfranka_1_1CartesianVelocities__inherit__graph.md5 new file mode 100644 index 00000000..5ce9c197 --- /dev/null +++ b/classfranka_1_1CartesianVelocities__inherit__graph.md5 @@ -0,0 +1 @@ +32bed61017a88b35679a2bc229a0ebf7 \ No newline at end of file diff --git a/classfranka_1_1CartesianVelocities__inherit__graph.png b/classfranka_1_1CartesianVelocities__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2c627a598f68b41bbe84419cbb8c922a41d7d884 GIT binary patch literal 4207 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 WjvC$3Hv~@*AO + + + + + + +Project: Member List + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
franka::Duration Member List
+
+
+ +

This is the complete list of members for franka::Duration, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Duration() noexceptfranka::Duration
Duration(uint64_t milliseconds) noexceptfranka::Durationexplicit
Duration(std::chrono::duration< uint64_t, std::milli > duration) noexceptfranka::Duration
Duration(const Duration &)=defaultfranka::Duration
operator std::chrono::duration< uint64_t, std::milli >() const noexceptfranka::Duration
operator!=(const Duration &rhs) const noexceptfranka::Duration
operator%(const Duration &rhs) const noexceptfranka::Duration
operator%(uint64_t rhs) const noexceptfranka::Duration
operator%=(const Duration &rhs) noexceptfranka::Duration
operator%=(uint64_t rhs) noexceptfranka::Duration
operator*(uint64_t rhs) const noexceptfranka::Duration
operator*=(uint64_t rhs) noexceptfranka::Duration
operator+(const Duration &rhs) const noexceptfranka::Duration
operator+=(const Duration &rhs) noexceptfranka::Duration
operator-(const Duration &rhs) const noexceptfranka::Duration
operator-=(const Duration &rhs) noexceptfranka::Duration
operator/(const Duration &rhs) const noexceptfranka::Duration
operator/(uint64_t rhs) const noexceptfranka::Duration
operator/=(uint64_t rhs) noexceptfranka::Duration
operator<(const Duration &rhs) const noexceptfranka::Duration
operator<=(const Duration &rhs) const noexceptfranka::Duration
operator=(const Duration &)=defaultfranka::Duration
operator==(const Duration &rhs) const noexceptfranka::Duration
operator>(const Duration &rhs) const noexceptfranka::Duration
operator>=(const Duration &rhs) const noexceptfranka::Duration
toMSec() const noexceptfranka::Duration
toSec() const noexceptfranka::Duration
+ + + + diff --git a/classfranka_1_1Duration.html b/classfranka_1_1Duration.html new file mode 100644 index 00000000..92992cc5 --- /dev/null +++ b/classfranka_1_1Duration.html @@ -0,0 +1,1043 @@ + + + + + + + +Project: franka::Duration Class Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
franka::Duration Class Reference
+
+
+ +

Represents a duration with millisecond resolution. + More...

+ +

#include <duration.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Duration () noexcept
 Creates a new Duration instance with zero milliseconds.
 
 Duration (uint64_t milliseconds) noexcept
 Creates a new Duration instance from the given number of milliseconds. More...
 
 Duration (std::chrono::duration< uint64_t, std::milli > duration) noexcept
 Creates a new Duration instance from an std::chrono::duration. More...
 
Duration (const Duration &)=default
 Creates a copy of a Duration instance.
 
Durationoperator= (const Duration &)=default
 Assigns the contents of one Duration to another. More...
 
 operator std::chrono::duration< uint64_t, std::milli > () const noexcept
 Returns the stored duration as an std::chrono::duration. More...
 
double toSec () const noexcept
 Returns the stored duration in \([s]\). More...
 
uint64_t toMSec () const noexcept
 Returns the stored duration in \([ms]\). More...
 
Arithmetic operators
Duration operator+ (const Duration &rhs) const noexcept
 Performs addition. More...
 
Durationoperator+= (const Duration &rhs) noexcept
 Performs addition. More...
 
Duration operator- (const Duration &rhs) const noexcept
 Performs subtraction. More...
 
Durationoperator-= (const Duration &rhs) noexcept
 Performs subtraction. More...
 
Duration operator* (uint64_t rhs) const noexcept
 Performs multiplication. More...
 
Durationoperator*= (uint64_t rhs) noexcept
 Performs multiplication. More...
 
uint64_t operator/ (const Duration &rhs) const noexcept
 Performs division. More...
 
Duration operator/ (uint64_t rhs) const noexcept
 Performs division. More...
 
Durationoperator/= (uint64_t rhs) noexcept
 Performs division. More...
 
Duration operator% (const Duration &rhs) const noexcept
 Performs the modulo operation. More...
 
Duration operator% (uint64_t rhs) const noexcept
 Performs the modulo operation. More...
 
Durationoperator%= (const Duration &rhs) noexcept
 Performs the modulo operation. More...
 
Durationoperator%= (uint64_t rhs) noexcept
 Performs the modulo operation. More...
 
Comparison operators
bool operator== (const Duration &rhs) const noexcept
 Compares two durations for equality. More...
 
bool operator!= (const Duration &rhs) const noexcept
 Compares two durations for inequality. More...
 
bool operator< (const Duration &rhs) const noexcept
 Compares two durations. More...
 
bool operator<= (const Duration &rhs) const noexcept
 Compares two durations. More...
 
bool operator> (const Duration &rhs) const noexcept
 Compares two durations. More...
 
bool operator>= (const Duration &rhs) const noexcept
 Compares two durations. More...
 
+

Detailed Description

+

Constructor & Destructor Documentation

+ +

◆ Duration() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
franka::Duration::Duration (uint64_t milliseconds)
+
+explicitnoexcept
+
+ +

Creates a new Duration instance from the given number of milliseconds.

+
Parameters
+ + +
[in]millisecondsNumber of milliseconds.
+
+
+ +
+
+ +

◆ Duration() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
franka::Duration::Duration (std::chrono::duration< uint64_t, std::milli > duration)
+
+noexcept
+
+ +

Creates a new Duration instance from an std::chrono::duration.

+
Parameters
+ + +
[in]durationDuration.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ operator std::chrono::duration< uint64_t, std::milli >()

+ +
+
+ + + + + +
+ + + + + + + +
franka::Duration::operator std::chrono::duration< uint64_t, std::milli > () const
+
+noexcept
+
+ +

Returns the stored duration as an std::chrono::duration.

+
Returns
Duration as std::chrono::duration.
+ +
+
+ +

◆ operator!=()

+ +
+
+ + + + + +
+ + + + + + + + +
bool franka::Duration::operator!= (const Durationrhs) const
+
+noexcept
+
+ +

Compares two durations for inequality.

+
Parameters
+ + +
[in]rhsRight-hand side of the comparison.
+
+
+
Returns
True if the duration are not equal, false otherwise.
+ +
+
+ +

◆ operator%() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
Duration franka::Duration::operator% (const Durationrhs) const
+
+noexcept
+
+ +

Performs the modulo operation.

+
Parameters
+ + +
[in]rhsRight-hand side of the operation.
+
+
+
Returns
Result of the operation.
+ +
+
+ +

◆ operator%() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
Duration franka::Duration::operator% (uint64_t rhs) const
+
+noexcept
+
+ +

Performs the modulo operation.

+
Parameters
+ + +
[in]rhsRight-hand side of the operation.
+
+
+
Returns
Result of the operation.
+ +
+
+ +

◆ operator%=() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
Duration& franka::Duration::operator%= (const Durationrhs)
+
+noexcept
+
+ +

Performs the modulo operation.

+
Parameters
+ + +
[in]rhsRight-hand side of the operation.
+
+
+
Returns
This duration.
+ +
+
+ +

◆ operator%=() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
Duration& franka::Duration::operator%= (uint64_t rhs)
+
+noexcept
+
+ +

Performs the modulo operation.

+
Parameters
+ + +
[in]rhsRight-hand side of the operation.
+
+
+
Returns
This duration.
+ +
+
+ +

◆ operator*()

+ +
+
+ + + + + +
+ + + + + + + + +
Duration franka::Duration::operator* (uint64_t rhs) const
+
+noexcept
+
+ +

Performs multiplication.

+
Parameters
+ + +
[in]rhsRight-hand side of the operation.
+
+
+
Returns
Result of the operation.
+ +
+
+ +

◆ operator*=()

+ +
+
+ + + + + +
+ + + + + + + + +
Duration& franka::Duration::operator*= (uint64_t rhs)
+
+noexcept
+
+ +

Performs multiplication.

+
Parameters
+ + +
[in]rhsRight-hand side of the operation.
+
+
+
Returns
This duration.
+ +
+
+ +

◆ operator+()

+ +
+
+ + + + + +
+ + + + + + + + +
Duration franka::Duration::operator+ (const Durationrhs) const
+
+noexcept
+
+ +

Performs addition.

+
Parameters
+ + +
[in]rhsRight-hand side of the operation.
+
+
+
Returns
Result of the operation.
+ +
+
+ +

◆ operator+=()

+ +
+
+ + + + + +
+ + + + + + + + +
Duration& franka::Duration::operator+= (const Durationrhs)
+
+noexcept
+
+ +

Performs addition.

+
Parameters
+ + +
[in]rhsRight-hand side of the operation.
+
+
+
Returns
This duration.
+ +
+
+ +

◆ operator-()

+ +
+
+ + + + + +
+ + + + + + + + +
Duration franka::Duration::operator- (const Durationrhs) const
+
+noexcept
+
+ +

Performs subtraction.

+
Parameters
+ + +
[in]rhsRight-hand side of the operation.
+
+
+
Returns
Result of the operation.
+ +
+
+ +

◆ operator-=()

+ +
+
+ + + + + +
+ + + + + + + + +
Duration& franka::Duration::operator-= (const Durationrhs)
+
+noexcept
+
+ +

Performs subtraction.

+
Parameters
+ + +
[in]rhsRight-hand side of the operation.
+
+
+
Returns
This duration.
+ +
+
+ +

◆ operator/() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
uint64_t franka::Duration::operator/ (const Durationrhs) const
+
+noexcept
+
+ +

Performs division.

+
Parameters
+ + +
[in]rhsRight-hand side of the operation.
+
+
+
Returns
Result of the operation.
+ +
+
+ +

◆ operator/() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
Duration franka::Duration::operator/ (uint64_t rhs) const
+
+noexcept
+
+ +

Performs division.

+
Parameters
+ + +
[in]rhsRight-hand side of the operation.
+
+
+
Returns
Result of the operation.
+ +
+
+ +

◆ operator/=()

+ +
+
+ + + + + +
+ + + + + + + + +
Duration& franka::Duration::operator/= (uint64_t rhs)
+
+noexcept
+
+ +

Performs division.

+
Parameters
+ + +
[in]rhsRight-hand side of the operation.
+
+
+
Returns
This duration.
+ +
+
+ +

◆ operator<()

+ +
+
+ + + + + +
+ + + + + + + + +
bool franka::Duration::operator< (const Durationrhs) const
+
+noexcept
+
+ +

Compares two durations.

+
Parameters
+ + +
[in]rhsRight-hand side of the comparison.
+
+
+
Returns
True if this duration is shorter than rhs, false otherwise.
+ +
+
+ +

◆ operator<=()

+ +
+
+ + + + + +
+ + + + + + + + +
bool franka::Duration::operator<= (const Durationrhs) const
+
+noexcept
+
+ +

Compares two durations.

+
Parameters
+ + +
[in]rhsRight-hand side of the comparison.
+
+
+
Returns
True if this duration is shorter than or equal to rhs, false otherwise.
+ +
+
+ +

◆ operator=()

+ +
+
+ + + + + +
+ + + + + + + + +
Duration& franka::Duration::operator= (const Duration)
+
+default
+
+ +

Assigns the contents of one Duration to another.

+
Returns
Result of the operation.
+ +
+
+ +

◆ operator==()

+ +
+
+ + + + + +
+ + + + + + + + +
bool franka::Duration::operator== (const Durationrhs) const
+
+noexcept
+
+ +

Compares two durations for equality.

+
Parameters
+ + +
[in]rhsRight-hand side of the comparison.
+
+
+
Returns
True if the duration are equal, false otherwise.
+ +
+
+ +

◆ operator>()

+ +
+
+ + + + + +
+ + + + + + + + +
bool franka::Duration::operator> (const Durationrhs) const
+
+noexcept
+
+ +

Compares two durations.

+
Parameters
+ + +
[in]rhsRight-hand side of the comparison.
+
+
+
Returns
True if this duration is longer than rhs, false otherwise.
+ +
+
+ +

◆ operator>=()

+ +
+
+ + + + + +
+ + + + + + + + +
bool franka::Duration::operator>= (const Durationrhs) const
+
+noexcept
+
+ +

Compares two durations.

+
Parameters
+ + +
[in]rhsRight-hand side of the comparison.
+
+
+
Returns
True if this duration is longer than or equal to rhs, false otherwise.
+ +
+
+ +

◆ toMSec()

+ +
+
+ + + + + +
+ + + + + + + +
uint64_t franka::Duration::toMSec () const
+
+noexcept
+
+ +

Returns the stored duration in \([ms]\).

+
Returns
Duration in \([ms]\).
+
Examples
communication_test.cpp.
+
+ +
+
+ +

◆ toSec()

+ +
+
+ + + + + +
+ + + + + + + +
double franka::Duration::toSec () const
+
+noexcept
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classfranka_1_1Gripper-members.html b/classfranka_1_1Gripper-members.html new file mode 100644 index 00000000..2ddb7c82 --- /dev/null +++ b/classfranka_1_1Gripper-members.html @@ -0,0 +1,101 @@ + + + + + + + +Project: Member List + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
franka::Gripper Member List
+
+
+ +

This is the complete list of members for franka::Gripper, including all inherited members.

+ + + + + + + + + + + + +
grasp(double width, double speed, double force, double epsilon_inner=0.005, double epsilon_outer=0.005) constfranka::Gripper
Gripper(const std::string &franka_address)franka::Gripperexplicit
Gripper(Gripper &&gripper) noexceptfranka::Gripper
homing() constfranka::Gripper
move(double width, double speed) constfranka::Gripper
operator=(Gripper &&gripper) noexceptfranka::Gripper
readOnce() constfranka::Gripper
ServerVersion typedeffranka::Gripper
serverVersion() const noexceptfranka::Gripper
stop() constfranka::Gripper
~Gripper() noexceptfranka::Gripper
+ + + + diff --git a/classfranka_1_1Gripper.html b/classfranka_1_1Gripper.html new file mode 100644 index 00000000..8d3ff14c --- /dev/null +++ b/classfranka_1_1Gripper.html @@ -0,0 +1,489 @@ + + + + + + + +Project: franka::Gripper Class Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
franka::Gripper Class Reference
+
+
+ +

Maintains a network connection to the gripper, provides the current gripper state, and allows the execution of commands. + More...

+ +

#include <gripper.h>

+ + + + + +

+Public Types

+using ServerVersion = uint16_t
 Version of the gripper server.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Gripper (const std::string &franka_address)
 Establishes a connection with a gripper connected to a robot. More...
 
 Gripper (Gripper &&gripper) noexcept
 Move-constructs a new Gripper instance. More...
 
Gripperoperator= (Gripper &&gripper) noexcept
 Move-assigns this Gripper from another Gripper instance. More...
 
~Gripper () noexcept
 Closes the connection.
 
bool homing () const
 Performs homing of the gripper. More...
 
bool grasp (double width, double speed, double force, double epsilon_inner=0.005, double epsilon_outer=0.005) const
 Grasps an object. More...
 
bool move (double width, double speed) const
 Moves the gripper fingers to a specified width. More...
 
bool stop () const
 Stops a currently running gripper move or grasp. More...
 
GripperState readOnce () const
 Waits for a gripper state update and returns it. More...
 
ServerVersion serverVersion () const noexcept
 Returns the software version reported by the connected server. More...
 
+

Detailed Description

+

Maintains a network connection to the gripper, provides the current gripper state, and allows the execution of commands.

+
Note
The members of this class are threadsafe.
+
Examples
grasp_object.cpp.
+
+

Constructor & Destructor Documentation

+ +

◆ Gripper() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
franka::Gripper::Gripper (const std::string & franka_address)
+
+explicit
+
+ +

Establishes a connection with a gripper connected to a robot.

+
Parameters
+ + +
[in]franka_addressIP/hostname of the robot the gripper is connected to.
+
+
+
Exceptions
+ + + +
NetworkExceptionif the connection is unsuccessful.
IncompatibleVersionExceptionif this version of libfranka is not supported.
+
+
+ +
+
+ +

◆ Gripper() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
franka::Gripper::Gripper (Gripper && gripper)
+
+noexcept
+
+ +

Move-constructs a new Gripper instance.

+
Parameters
+ + +
[in]gripperOther Gripper instance.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ grasp()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool franka::Gripper::grasp (double width,
double speed,
double force,
double epsilon_inner = 0.005,
double epsilon_outer = 0.005 
) const
+
+ +

Grasps an object.

+

An object is considered grasped if the distance \(d\) between the gripper fingers satisfies \((\text{width} - \text{epsilon_inner}) < d < (\text{width} + \text{epsilon_outer})\).

+
Parameters
+ + + + + + +
[in]widthSize of the object to grasp in \([m]\).
[in]speedClosing speed in \([\frac{m}{s}]\).
[in]forceGrasping force in \([N]\).
[in]epsilon_innerMaximum tolerated deviation when the actual grasped width is smaller than the commanded grasp width.
[in]epsilon_outerMaximum tolerated deviation when the actual grasped width is larger than the commanded grasp width.
+
+
+
Returns
True if an object has been grasped, false otherwise.
+
Exceptions
+ + + +
CommandExceptionif an error occurred.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+
Examples
grasp_object.cpp.
+
+ +
+
+ +

◆ homing()

+ +
+
+ + + + + + + +
bool franka::Gripper::homing () const
+
+ +

Performs homing of the gripper.

+

After changing the gripper fingers, a homing needs to be done. This is needed to estimate the maximum grasping width.

+
Returns
True if command was successful, false otherwise.
+
Exceptions
+ + + +
CommandExceptionif an error occurred.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+
See also
GripperState for the maximum grasping width.
+
Examples
grasp_object.cpp.
+
+ +
+
+ +

◆ move()

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool franka::Gripper::move (double width,
double speed 
) const
+
+ +

Moves the gripper fingers to a specified width.

+
Parameters
+ + + +
[in]widthIntended opening width in \([m]\).
[in]speedClosing speed in \([\frac{m}{s}]\).
+
+
+
Returns
True if command was successful, false otherwise.
+
Exceptions
+ + + +
CommandExceptionif an error occurred.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+ +
+
+ +

◆ operator=()

+ +
+
+ + + + + +
+ + + + + + + + +
Gripper& franka::Gripper::operator= (Gripper && gripper)
+
+noexcept
+
+ +

Move-assigns this Gripper from another Gripper instance.

+
Parameters
+ + +
[in]gripperOther Gripper instance.
+
+
+
Returns
Model instance.
+ +
+
+ +

◆ readOnce()

+ +
+
+ + + + + + + +
GripperState franka::Gripper::readOnce () const
+
+ +

Waits for a gripper state update and returns it.

+
Returns
Current gripper state.
+
Exceptions
+ + + +
NetworkExceptionif the connection is lost, e.g. after a timeout.
InvalidOperationExceptionif another readOnce is already running.
+
+
+
Examples
grasp_object.cpp.
+
+ +
+
+ +

◆ serverVersion()

+ +
+
+ + + + + +
+ + + + + + + +
ServerVersion franka::Gripper::serverVersion () const
+
+noexcept
+
+ +

Returns the software version reported by the connected server.

+
Returns
Software version of the connected server.
+ +
+
+ +

◆ stop()

+ +
+
+ + + + + + + +
bool franka::Gripper::stop () const
+
+ +

Stops a currently running gripper move or grasp.

+
Returns
True if command was successful, false otherwise.
+
Exceptions
+ + + +
CommandExceptionif an error occurred.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+
Examples
grasp_object.cpp.
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classfranka_1_1JointPositions-members.html b/classfranka_1_1JointPositions-members.html new file mode 100644 index 00000000..33b4362e --- /dev/null +++ b/classfranka_1_1JointPositions-members.html @@ -0,0 +1,94 @@ + + + + + + + +Project: Member List + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
franka::JointPositions Member List
+
+
+ +

This is the complete list of members for franka::JointPositions, including all inherited members.

+ + + + + +
JointPositions(const std::array< double, 7 > &joint_positions) noexceptfranka::JointPositions
JointPositions(std::initializer_list< double > joint_positions)franka::JointPositions
motion_finishedfranka::Finishable
qfranka::JointPositions
+ + + + diff --git a/classfranka_1_1JointPositions.html b/classfranka_1_1JointPositions.html new file mode 100644 index 00000000..26f686bc --- /dev/null +++ b/classfranka_1_1JointPositions.html @@ -0,0 +1,210 @@ + + + + + + + +Project: franka::JointPositions Class Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
franka::JointPositions Class Reference
+
+
+ +

Stores values for joint position motion generation. + More...

+ +

#include <control_types.h>

+
+Inheritance diagram for franka::JointPositions:
+
+
Inheritance graph
+ + + + +
[legend]
+
+Collaboration diagram for franka::JointPositions:
+
+
Collaboration graph
+ + + + +
[legend]
+ + + + + + + + +

+Public Member Functions

 JointPositions (const std::array< double, 7 > &joint_positions) noexcept
 Creates a new JointPositions instance. More...
 
 JointPositions (std::initializer_list< double > joint_positions)
 Creates a new JointPositions instance. More...
 
+ + + + + + + + +

+Public Attributes

+std::array< double, 7 > q {}
 Desired joint angles in [rad].
 
- Public Attributes inherited from franka::Finishable
+bool motion_finished = false
 Determines whether to finish a currently running motion.
 
+

Detailed Description

+

Stores values for joint position motion generation.

+
Examples
generate_joint_position_motion.cpp, and generate_joint_position_motion_external_control_loop.cpp.
+
+

Constructor & Destructor Documentation

+ +

◆ JointPositions() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
franka::JointPositions::JointPositions (const std::array< double, 7 > & joint_positions)
+
+noexcept
+
+ +

Creates a new JointPositions instance.

+
Parameters
+ + +
[in]joint_positionsDesired joint angles in \([rad]\).
+
+
+ +
+
+ +

◆ JointPositions() [2/2]

+ +
+
+ + + + + + + + +
franka::JointPositions::JointPositions (std::initializer_list< double > joint_positions)
+
+ +

Creates a new JointPositions instance.

+
Parameters
+ + +
[in]joint_positionsDesired joint angles in \([rad]\).
+
+
+
Exceptions
+ + +
std::invalid_argumentif the given initializer list has an invalid number of arguments.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classfranka_1_1JointPositions__coll__graph.map b/classfranka_1_1JointPositions__coll__graph.map new file mode 100644 index 00000000..262848ce --- /dev/null +++ b/classfranka_1_1JointPositions__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classfranka_1_1JointPositions__coll__graph.md5 b/classfranka_1_1JointPositions__coll__graph.md5 new file mode 100644 index 00000000..9cca88b9 --- /dev/null +++ b/classfranka_1_1JointPositions__coll__graph.md5 @@ -0,0 +1 @@ +c5f3272f047935d0f40484fdb8d71742 \ No newline at end of file diff --git a/classfranka_1_1JointPositions__coll__graph.png b/classfranka_1_1JointPositions__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..081de5b8d4789cf8f7b22d3dfca85d39076ec2ae GIT binary patch literal 3250 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 literal 0 HcmV?d00001 diff --git a/classfranka_1_1JointPositions__inherit__graph.map b/classfranka_1_1JointPositions__inherit__graph.map new file mode 100644 index 00000000..262848ce --- /dev/null +++ b/classfranka_1_1JointPositions__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classfranka_1_1JointPositions__inherit__graph.md5 b/classfranka_1_1JointPositions__inherit__graph.md5 new file mode 100644 index 00000000..9cca88b9 --- /dev/null +++ b/classfranka_1_1JointPositions__inherit__graph.md5 @@ -0,0 +1 @@ +c5f3272f047935d0f40484fdb8d71742 \ No newline at end of file diff --git a/classfranka_1_1JointPositions__inherit__graph.png b/classfranka_1_1JointPositions__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..081de5b8d4789cf8f7b22d3dfca85d39076ec2ae GIT binary patch literal 3250 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 literal 0 HcmV?d00001 diff --git a/classfranka_1_1JointVelocities-members.html b/classfranka_1_1JointVelocities-members.html new file mode 100644 index 00000000..d6dd2e44 --- /dev/null +++ b/classfranka_1_1JointVelocities-members.html @@ -0,0 +1,94 @@ + + + + + + + +Project: Member List + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
franka::JointVelocities Member List
+
+
+ +

This is the complete list of members for franka::JointVelocities, including all inherited members.

+ + + + + +
dqfranka::JointVelocities
JointVelocities(const std::array< double, 7 > &joint_velocities) noexceptfranka::JointVelocities
JointVelocities(std::initializer_list< double > joint_velocities)franka::JointVelocities
motion_finishedfranka::Finishable
+ + + + diff --git a/classfranka_1_1JointVelocities.html b/classfranka_1_1JointVelocities.html new file mode 100644 index 00000000..16ea4b8d --- /dev/null +++ b/classfranka_1_1JointVelocities.html @@ -0,0 +1,210 @@ + + + + + + + +Project: franka::JointVelocities Class Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
franka::JointVelocities Class Reference
+
+
+ +

Stores values for joint velocity motion generation. + More...

+ +

#include <control_types.h>

+
+Inheritance diagram for franka::JointVelocities:
+
+
Inheritance graph
+ + + + +
[legend]
+
+Collaboration diagram for franka::JointVelocities:
+
+
Collaboration graph
+ + + + +
[legend]
+ + + + + + + + +

+Public Member Functions

 JointVelocities (const std::array< double, 7 > &joint_velocities) noexcept
 Creates a new JointVelocities instance. More...
 
 JointVelocities (std::initializer_list< double > joint_velocities)
 Creates a new JointVelocities instance. More...
 
+ + + + + + + + +

+Public Attributes

+std::array< double, 7 > dq {}
 Desired joint velocities in \([\frac{rad}{s}]\).
 
- Public Attributes inherited from franka::Finishable
+bool motion_finished = false
 Determines whether to finish a currently running motion.
 
+

Detailed Description

+

Constructor & Destructor Documentation

+ +

◆ JointVelocities() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
franka::JointVelocities::JointVelocities (const std::array< double, 7 > & joint_velocities)
+
+noexcept
+
+ +

Creates a new JointVelocities instance.

+
Parameters
+ + +
[in]joint_velocitiesDesired joint velocities in \([\frac{rad}{s}]\).
+
+
+ +
+
+ +

◆ JointVelocities() [2/2]

+ +
+
+ + + + + + + + +
franka::JointVelocities::JointVelocities (std::initializer_list< double > joint_velocities)
+
+ +

Creates a new JointVelocities instance.

+
Parameters
+ + +
[in]joint_velocitiesDesired joint velocities in \([\frac{rad}{s}]\).
+
+
+
Exceptions
+ + +
std::invalid_argumentif the given initializer list has an invalid number of arguments.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classfranka_1_1JointVelocities__coll__graph.map b/classfranka_1_1JointVelocities__coll__graph.map new file mode 100644 index 00000000..a8a2195a --- /dev/null +++ b/classfranka_1_1JointVelocities__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classfranka_1_1JointVelocities__coll__graph.md5 b/classfranka_1_1JointVelocities__coll__graph.md5 new file mode 100644 index 00000000..dad6b14e --- /dev/null +++ b/classfranka_1_1JointVelocities__coll__graph.md5 @@ -0,0 +1 @@ +94bb303f7a32ad60e8c00cad1f7d60a0 \ No newline at end of file diff --git a/classfranka_1_1JointVelocities__coll__graph.png b/classfranka_1_1JointVelocities__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b3bab0183f61b013cd73016c218cbcee2b5ef371 GIT binary patch literal 3608 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 E0b}~~9{>OV literal 0 HcmV?d00001 diff --git a/classfranka_1_1JointVelocities__inherit__graph.map b/classfranka_1_1JointVelocities__inherit__graph.map new file mode 100644 index 00000000..a8a2195a --- /dev/null +++ b/classfranka_1_1JointVelocities__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classfranka_1_1JointVelocities__inherit__graph.md5 b/classfranka_1_1JointVelocities__inherit__graph.md5 new file mode 100644 index 00000000..dad6b14e --- /dev/null +++ b/classfranka_1_1JointVelocities__inherit__graph.md5 @@ -0,0 +1 @@ +94bb303f7a32ad60e8c00cad1f7d60a0 \ No newline at end of file diff --git a/classfranka_1_1JointVelocities__inherit__graph.png b/classfranka_1_1JointVelocities__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b3bab0183f61b013cd73016c218cbcee2b5ef371 GIT binary patch literal 3608 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 E0b}~~9{>OV literal 0 HcmV?d00001 diff --git a/classfranka_1_1Model-members.html b/classfranka_1_1Model-members.html new file mode 100644 index 00000000..7f535049 --- /dev/null +++ b/classfranka_1_1Model-members.html @@ -0,0 +1,108 @@ + + + + + + + +Project: Member List + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
franka::Model Member List
+
+
+ +

This is the complete list of members for franka::Model, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
bodyJacobian(Frame frame, const franka::RobotState &robot_state) constfranka::Model
bodyJacobian(Frame frame, const std::array< double, 7 > &q, const std::array< double, 16 > &F_T_EE, const std::array< double, 16 > &EE_T_K) constfranka::Model
coriolis(const franka::RobotState &robot_state) const noexceptfranka::Model
coriolis(const std::array< double, 7 > &q, const std::array< double, 7 > &dq, const std::array< double, 9 > &I_total, double m_total, const std::array< double, 3 > &F_x_Ctotal) const noexceptfranka::Model
gravity(const std::array< double, 7 > &q, double m_total, const std::array< double, 3 > &F_x_Ctotal, const std::array< double, 3 > &gravity_earth={{0., 0., -9.81}}) const noexceptfranka::Model
gravity(const franka::RobotState &robot_state, const std::array< double, 3 > &gravity_earth) const noexceptfranka::Model
gravity(const franka::RobotState &robot_state) const noexceptfranka::Model
mass(const franka::RobotState &robot_state) const noexceptfranka::Model
mass(const std::array< double, 7 > &q, const std::array< double, 9 > &I_total, double m_total, const std::array< double, 3 > &F_x_Ctotal) const noexceptfranka::Model
Model(franka::Network &network, const std::string &urdf_model)franka::Modelexplicit
Model(franka::Network &network, std::unique_ptr< RobotModelBase > robot_model)franka::Modelexplicit
Model(Model &&model) noexceptfranka::Model
operator=(Model &&model) noexceptfranka::Model
pose(Frame frame, const franka::RobotState &robot_state) constfranka::Model
pose(Frame frame, const std::array< double, 7 > &q, const std::array< double, 16 > &F_T_EE, const std::array< double, 16 > &EE_T_K) constfranka::Model
zeroJacobian(Frame frame, const franka::RobotState &robot_state) constfranka::Model
zeroJacobian(Frame frame, const std::array< double, 7 > &q, const std::array< double, 16 > &F_T_EE, const std::array< double, 16 > &EE_T_K) constfranka::Model
~Model() noexceptfranka::Model
+ + + + diff --git a/classfranka_1_1Model.html b/classfranka_1_1Model.html new file mode 100644 index 00000000..02f4efc2 --- /dev/null +++ b/classfranka_1_1Model.html @@ -0,0 +1,955 @@ + + + + + + + +Project: franka::Model Class Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
franka::Model Class Reference
+
+
+ +

Calculates poses of joints and dynamic properties of the robot. + More...

+ +

#include <model.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Model (franka::Network &network, const std::string &urdf_model)
 Creates a new Model instance. More...
 
 Model (franka::Network &network, std::unique_ptr< RobotModelBase > robot_model)
 Creates a new Model instance only for the tests. More...
 
 Model (Model &&model) noexcept
 Move-constructs a new Model instance. More...
 
Modeloperator= (Model &&model) noexcept
 Move-assigns this Model from another Model instance. More...
 
~Model () noexcept
 Unloads the model library.
 
std::array< double, 16 > pose (Frame frame, const franka::RobotState &robot_state) const
 Gets the 4x4 pose matrix for the given frame in base frame. More...
 
std::array< double, 16 > pose (Frame frame, const std::array< double, 7 > &q, const std::array< double, 16 > &F_T_EE, const std::array< double, 16 > &EE_T_K) const
 Gets the 4x4 pose matrix for the given frame in base frame. More...
 
std::array< double, 42 > bodyJacobian (Frame frame, const franka::RobotState &robot_state) const
 Gets the 6x7 Jacobian for the given frame, relative to that frame. More...
 
std::array< double, 42 > bodyJacobian (Frame frame, const std::array< double, 7 > &q, const std::array< double, 16 > &F_T_EE, const std::array< double, 16 > &EE_T_K) const
 Gets the 6x7 Jacobian for the given frame, relative to that frame. More...
 
std::array< double, 42 > zeroJacobian (Frame frame, const franka::RobotState &robot_state) const
 Gets the 6x7 Jacobian for the given joint relative to the base frame. More...
 
std::array< double, 42 > zeroJacobian (Frame frame, const std::array< double, 7 > &q, const std::array< double, 16 > &F_T_EE, const std::array< double, 16 > &EE_T_K) const
 Gets the 6x7 Jacobian for the given joint relative to the base frame. More...
 
std::array< double, 49 > mass (const franka::RobotState &robot_state) const noexcept
 Calculates the 7x7 mass matrix. More...
 
std::array< double, 49 > mass (const std::array< double, 7 > &q, const std::array< double, 9 > &I_total, double m_total, const std::array< double, 3 > &F_x_Ctotal) const noexcept
 Calculates the 7x7 mass matrix. More...
 
std::array< double, 7 > coriolis (const franka::RobotState &robot_state) const noexcept
 Calculates the Coriolis force vector (state-space equation): \( c= C \times dq\), in \([Nm]\). More...
 
std::array< double, 7 > coriolis (const std::array< double, 7 > &q, const std::array< double, 7 > &dq, const std::array< double, 9 > &I_total, double m_total, const std::array< double, 3 > &F_x_Ctotal) const noexcept
 Calculates the Coriolis force vector (state-space equation): \( c= C \times dq\), in \([Nm]\). More...
 
std::array< double, 7 > gravity (const std::array< double, 7 > &q, double m_total, const std::array< double, 3 > &F_x_Ctotal, const std::array< double, 3 > &gravity_earth={{0., 0., -9.81}}) const noexcept
 Calculates the gravity vector. More...
 
std::array< double, 7 > gravity (const franka::RobotState &robot_state, const std::array< double, 3 > &gravity_earth) const noexcept
 Calculates the gravity vector. More...
 
std::array< double, 7 > gravity (const franka::RobotState &robot_state) const noexcept
 Calculates the gravity vector using the robot state. More...
 
+

Detailed Description

+

Calculates poses of joints and dynamic properties of the robot.

+
Examples
cartesian_impedance_control.cpp, force_control.cpp, joint_impedance_control.cpp, and print_joint_poses.cpp.
+
+

Constructor & Destructor Documentation

+ +

◆ Model() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
franka::Model::Model (franka::Network & network,
const std::string & urdf_model 
)
+
+explicit
+
+ +

Creates a new Model instance.

+

This constructor is for internal use only.

+
See also
Robot::loadModel
+
Parameters
+ + +
[in]networkFor internal use.
+
+
+
Exceptions
+ + +
ModelExceptionif the model library cannot be loaded.
+
+
+ +
+
+ +

◆ Model() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
franka::Model::Model (franka::Network & network,
std::unique_ptr< RobotModelBaserobot_model 
)
+
+explicit
+
+ +

Creates a new Model instance only for the tests.

+

This constructor is for the unittests for enabling mocks.

+
Parameters
+ + + +
[in]networkFor internal use.
[in]robot_modelunique pointer to the mocked robot_model
+
+
+ +
+
+ +

◆ Model() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + +
franka::Model::Model (Model && model)
+
+noexcept
+
+ +

Move-constructs a new Model instance.

+
Parameters
+ + +
[in]modelOther Model instance.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ bodyJacobian() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
std::array<double, 42> franka::Model::bodyJacobian (Frame frame,
const franka::RobotStaterobot_state 
) const
+
+ +

Gets the 6x7 Jacobian for the given frame, relative to that frame.

+

The Jacobian is represented as a 6x7 matrix in column-major format.

+
Parameters
+ + + +
[in]frameThe desired frame.
[in]robot_stateState from which the pose should be calculated.
+
+
+
Returns
Vectorized 6x7 Jacobian, column-major.
+ +
+
+ +

◆ bodyJacobian() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::array<double, 42> franka::Model::bodyJacobian (Frame frame,
const std::array< double, 7 > & q,
const std::array< double, 16 > & F_T_EE,
const std::array< double, 16 > & EE_T_K 
) const
+
+ +

Gets the 6x7 Jacobian for the given frame, relative to that frame.

+

The Jacobian is represented as a 6x7 matrix in column-major format.

+
Parameters
+ + + + + +
[in]frameThe desired frame.
[in]qJoint position.
[in]F_T_EEEnd effector in flange frame.
[in]EE_T_KStiffness frame K in the end effector frame.
+
+
+
Returns
Vectorized 6x7 Jacobian, column-major.
+ +
+
+ +

◆ coriolis() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
std::array<double, 7> franka::Model::coriolis (const franka::RobotStaterobot_state) const
+
+noexcept
+
+ +

Calculates the Coriolis force vector (state-space equation): \( c= C \times dq\), in \([Nm]\).

+
Parameters
+ + +
[in]robot_stateState from which the Coriolis force vector should be calculated.
+
+
+
Returns
Coriolis force vector.
+
Examples
cartesian_impedance_control.cpp.
+
+ +
+
+ +

◆ coriolis() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::array<double, 7> franka::Model::coriolis (const std::array< double, 7 > & q,
const std::array< double, 7 > & dq,
const std::array< double, 9 > & I_total,
double m_total,
const std::array< double, 3 > & F_x_Ctotal 
) const
+
+noexcept
+
+ +

Calculates the Coriolis force vector (state-space equation): \( c= C \times dq\), in \([Nm]\).

+
Parameters
+ + + + + + +
[in]qJoint position.
[in]dqJoint velocity.
[in]I_totalInertia of the attached total load including end effector, relative to center of mass, given as vectorized 3x3 column-major matrix. Unit: \([kg \times m^2]\).
[in]m_totalWeight of the attached total load including end effector. Unit: \([kg]\).
[in]F_x_CtotalTranslation from flange to center of mass of the attached total load. Unit: \([m]\).
+
+
+
Returns
Coriolis force vector.
+ +
+
+ +

◆ gravity() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + +
std::array<double, 7> franka::Model::gravity (const franka::RobotStaterobot_state) const
+
+noexcept
+
+ +

Calculates the gravity vector using the robot state.

+

Unit: \([Nm]\).

+
Parameters
+ + +
[in]robot_stateState from which the gravity vector should be calculated.
+
+
+
Returns
Gravity vector.
+ +
+
+ +

◆ gravity() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::array<double, 7> franka::Model::gravity (const franka::RobotStaterobot_state,
const std::array< double, 3 > & gravity_earth 
) const
+
+noexcept
+
+ +

Calculates the gravity vector.

+

Unit: \([Nm]\).

+
Parameters
+ + + +
[in]robot_stateState from which the gravity vector should be calculated.
[in]gravity_earthEarth's gravity vector. Unit: \(\frac{m}{s^2}\).
+
+
+
Returns
Gravity vector.
+ +
+
+ +

◆ gravity() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::array<double, 7> franka::Model::gravity (const std::array< double, 7 > & q,
double m_total,
const std::array< double, 3 > & F_x_Ctotal,
const std::array< double, 3 > & gravity_earth = {{0., 0., -9.81}} 
) const
+
+noexcept
+
+ +

Calculates the gravity vector.

+

Unit: \([Nm]\).

+
Parameters
+ + + + + +
[in]qJoint position.
[in]m_totalWeight of the attached total load including end effector. Unit: \([kg]\).
[in]F_x_CtotalTranslation from flange to center of mass of the attached total load. Unit: \([m]\).
[in]gravity_earthEarth's gravity vector. Unit: \(\frac{m}{s^2}\). Default to {0.0, 0.0, -9.81}.
+
+
+
Returns
Gravity vector.
+
Examples
force_control.cpp.
+
+ +
+
+ +

◆ mass() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
std::array<double, 49> franka::Model::mass (const franka::RobotStaterobot_state) const
+
+noexcept
+
+ +

Calculates the 7x7 mass matrix.

+

Unit: \([kg \times m^2]\).

+
Parameters
+ + +
[in]robot_stateState from which the mass matrix should be calculated.
+
+
+
Returns
Vectorized 7x7 mass matrix, column-major.
+ +
+
+ +

◆ mass() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::array<double, 49> franka::Model::mass (const std::array< double, 7 > & q,
const std::array< double, 9 > & I_total,
double m_total,
const std::array< double, 3 > & F_x_Ctotal 
) const
+
+noexcept
+
+ +

Calculates the 7x7 mass matrix.

+

Unit: \([kg \times m^2]\).

+
Parameters
+ + + + + +
[in]qJoint position.
[in]I_totalInertia of the attached total load including end effector, relative to center of mass, given as vectorized 3x3 column-major matrix. Unit: \([kg \times m^2]\).
[in]m_totalWeight of the attached total load including end effector. Unit: \([kg]\).
[in]F_x_CtotalTranslation from flange to center of mass of the attached total load. Unit: \([m]\).
+
+
+
Returns
Vectorized 7x7 mass matrix, column-major.
+ +
+
+ +

◆ operator=()

+ +
+
+ + + + + +
+ + + + + + + + +
Model& franka::Model::operator= (Model && model)
+
+noexcept
+
+ +

Move-assigns this Model from another Model instance.

+
Parameters
+ + +
[in]modelOther Model instance.
+
+
+
Returns
Model instance.
+ +
+
+ +

◆ pose() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
std::array<double, 16> franka::Model::pose (Frame frame,
const franka::RobotStaterobot_state 
) const
+
+ +

Gets the 4x4 pose matrix for the given frame in base frame.

+

The pose is represented as a 4x4 matrix in column-major format.

+
Parameters
+ + + +
[in]frameThe desired frame.
[in]robot_stateState from which the pose should be calculated.
+
+
+
Returns
Vectorized 4x4 pose matrix, column-major.
+ +
+
+ +

◆ pose() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::array<double, 16> franka::Model::pose (Frame frame,
const std::array< double, 7 > & q,
const std::array< double, 16 > & F_T_EE,
const std::array< double, 16 > & EE_T_K 
) const
+
+ +

Gets the 4x4 pose matrix for the given frame in base frame.

+

The pose is represented as a 4x4 matrix in column-major format.

+
Parameters
+ + + + + +
[in]frameThe desired frame.
[in]qJoint position.
[in]F_T_EEEnd effector in flange frame.
[in]EE_T_KStiffness frame K in the end effector frame.
+
+
+
Returns
Vectorized 4x4 pose matrix, column-major.
+ +
+
+ +

◆ zeroJacobian() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
std::array<double, 42> franka::Model::zeroJacobian (Frame frame,
const franka::RobotStaterobot_state 
) const
+
+ +

Gets the 6x7 Jacobian for the given joint relative to the base frame.

+

The Jacobian is represented as a 6x7 matrix in column-major format.

+
Parameters
+ + + +
[in]frameThe desired frame.
[in]robot_stateState from which the pose should be calculated.
+
+
+
Returns
Vectorized 6x7 Jacobian, column-major.
+
Examples
cartesian_impedance_control.cpp, and force_control.cpp.
+
+ +
+
+ +

◆ zeroJacobian() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::array<double, 42> franka::Model::zeroJacobian (Frame frame,
const std::array< double, 7 > & q,
const std::array< double, 16 > & F_T_EE,
const std::array< double, 16 > & EE_T_K 
) const
+
+ +

Gets the 6x7 Jacobian for the given joint relative to the base frame.

+

The Jacobian is represented as a 6x7 matrix in column-major format.

+
Parameters
+ + + + + +
[in]frameThe desired frame.
[in]qJoint position.
[in]F_T_EEEnd effector in flange frame.
[in]EE_T_KStiffness frame K in the end effector frame.
+
+
+
Returns
Vectorized 6x7 Jacobian, column-major.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classfranka_1_1Robot-members.html b/classfranka_1_1Robot-members.html new file mode 100644 index 00000000..0433a88b --- /dev/null +++ b/classfranka_1_1Robot-members.html @@ -0,0 +1,127 @@ + + + + + + + +Project: Member List + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
franka::Robot Member List
+
+
+ +

This is the complete list of members for franka::Robot, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
automaticErrorRecovery()franka::Robot
control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)franka::Robot
control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, std::function< JointPositions(const RobotState &, franka::Duration)> motion_generator_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)franka::Robot
control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, std::function< JointVelocities(const RobotState &, franka::Duration)> motion_generator_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)franka::Robot
control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, std::function< CartesianPose(const RobotState &, franka::Duration)> motion_generator_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)franka::Robot
control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, std::function< CartesianVelocities(const RobotState &, franka::Duration)> motion_generator_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)franka::Robot
control(std::function< JointPositions(const RobotState &, franka::Duration)> motion_generator_callback, ControllerMode controller_mode=ControllerMode::kJointImpedance, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)franka::Robot
control(std::function< JointVelocities(const RobotState &, franka::Duration)> motion_generator_callback, ControllerMode controller_mode=ControllerMode::kJointImpedance, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)franka::Robot
control(std::function< CartesianPose(const RobotState &, franka::Duration)> motion_generator_callback, ControllerMode controller_mode=ControllerMode::kJointImpedance, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)franka::Robot
control(std::function< CartesianVelocities(const RobotState &, franka::Duration)> motion_generator_callback, ControllerMode controller_mode=ControllerMode::kJointImpedance, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)franka::Robot
getRobotModel() -> std::stringfranka::Robot
loadModel()franka::Robot
loadModel(std::unique_ptr< RobotModelBase > robot_model) (defined in franka::Robot)franka::Robot
operator=(Robot &&other) noexceptfranka::Robot
read(std::function< bool(const RobotState &)> read_callback)franka::Robot
readOnce()franka::Robotvirtual
Robot(const std::string &franka_address, RealtimeConfig realtime_config=RealtimeConfig::kEnforce, size_t log_size=50)franka::Robotexplicit
Robot(Robot &&other) noexceptfranka::Robot
Robot(std::shared_ptr< Impl > robot_impl)franka::Robotprotected
Robot()=defaultfranka::Robotprotected
serverVersion() const noexceptfranka::Robot
ServerVersion typedeffranka::Robot
setCartesianImpedance(const std::array< double, 6 > &K_x)franka::Robot
setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds_acceleration, const std::array< double, 7 > &upper_torque_thresholds_acceleration, const std::array< double, 7 > &lower_torque_thresholds_nominal, const std::array< double, 7 > &upper_torque_thresholds_nominal, const std::array< double, 6 > &lower_force_thresholds_acceleration, const std::array< double, 6 > &upper_force_thresholds_acceleration, const std::array< double, 6 > &lower_force_thresholds_nominal, const std::array< double, 6 > &upper_force_thresholds_nominal)franka::Robot
setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds, const std::array< double, 7 > &upper_torque_thresholds, const std::array< double, 6 > &lower_force_thresholds, const std::array< double, 6 > &upper_force_thresholds)franka::Robot
setEE(const std::array< double, 16 > &NE_T_EE)franka::Robot
setGuidingMode(const std::array< bool, 6 > &guiding_mode, bool elbow)franka::Robot
setJointImpedance(const std::array< double, 7 > &K_theta)franka::Robot
setK(const std::array< double, 16 > &EE_T_K)franka::Robot
setLoad(double load_mass, const std::array< double, 3 > &F_x_Cload, const std::array< double, 9 > &load_inertia)franka::Robot
startCartesianPoseControl(const research_interface::robot::Move::ControllerMode &control_type)franka::Robotvirtual
startCartesianVelocityControl(const research_interface::robot::Move::ControllerMode &control_type)franka::Robotvirtual
startJointPositionControl(const research_interface::robot::Move::ControllerMode &control_type)franka::Robotvirtual
startJointVelocityControl(const research_interface::robot::Move::ControllerMode &control_type)franka::Robotvirtual
startTorqueControl()franka::Robotvirtual
stop()franka::Robot
~Robot() noexceptfranka::Robotvirtual
+ + + + diff --git a/classfranka_1_1Robot.html b/classfranka_1_1Robot.html new file mode 100644 index 00000000..f6e1a836 --- /dev/null +++ b/classfranka_1_1Robot.html @@ -0,0 +1,1844 @@ + + + + + + + +Project: franka::Robot Class Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+ +

Maintains a network connection to the robot, provides the current robot state, gives access to the model library and allows to control the robot. + More...

+ +

#include <robot.h>

+ + + + + +

+Public Types

+using ServerVersion = uint16_t
 Version of the robot server.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Robot (const std::string &franka_address, RealtimeConfig realtime_config=RealtimeConfig::kEnforce, size_t log_size=50)
 Establishes a connection with the robot. More...
 
 Robot (Robot &&other) noexcept
 Move-constructs a new Robot instance. More...
 
Robotoperator= (Robot &&other) noexcept
 Move-assigns this Robot from another Robot instance. More...
 
+virtual ~Robot () noexcept
 Closes the connection.
 
void read (std::function< bool(const RobotState &)> read_callback)
 Starts a loop for reading the current robot state. More...
 
virtual RobotState readOnce ()
 Waits for a robot state update and returns it. More...
 
Model loadModel ()
 Loads the model library from the robot. More...
 
+Model loadModel (std::unique_ptr< RobotModelBase > robot_model)
 
ServerVersion serverVersion () const noexcept
 Returns the software version reported by the connected server. More...
 
Motion generation and joint-level torque commands

The following methods allow to perform motion generation and/or send joint-level torque commands without gravity and friction by providing callback functions.

+

Only one of these methods can be active at the same time; a franka::ControlException is thrown otherwise.

+

When a robot state is received, the callback function is used to calculate the response: the desired values for that time step. After sending back the response, the callback function will be called again with the most recently received robot state. Since the robot is controlled with a 1 kHz frequency, the callback functions have to compute their result in a short time frame in order to be accepted. Callback functions take two parameters:

+
    +
  • A franka::RobotState showing the current robot state.
  • +
  • A franka::Duration to indicate the time since the last callback invocation. Thus, the duration is zero on the first invocation of the callback function!
  • +
+

The following incomplete example shows the general structure of a callback function:

+
double time = 0.0;
+
auto control_callback = [&time](const franka::RobotState& robot_state,
+ +
time += time_step.toSec(); // Update time at the beginning of the callback.
+
+
franka::JointPositions output = getJointPositions(time);
+
+
if (time >= max_time) {
+
// Return MotionFinished at the end of the trajectory.
+
return franka::MotionFinished(output);
+
}
+
+
return output;
+
}
+
Represents a duration with millisecond resolution.
Definition: duration.h:19
+
Stores values for joint position motion generation.
Definition: control_types.h:72
+
Torques MotionFinished(Torques command) noexcept
Helper method to indicate that a motion should stop after processing the given command.
Definition: control_types.h:294
+
Describes the robot state.
Definition: robot_state.h:34
+
void control (std::function< Torques(const RobotState &, franka::Duration)> control_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
 Starts a control loop for sending joint-level torque commands. More...
 
void control (std::function< Torques(const RobotState &, franka::Duration)> control_callback, std::function< JointPositions(const RobotState &, franka::Duration)> motion_generator_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
 Starts a control loop for sending joint-level torque commands and joint positions. More...
 
void control (std::function< Torques(const RobotState &, franka::Duration)> control_callback, std::function< JointVelocities(const RobotState &, franka::Duration)> motion_generator_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
 Starts a control loop for sending joint-level torque commands and joint velocities. More...
 
void control (std::function< Torques(const RobotState &, franka::Duration)> control_callback, std::function< CartesianPose(const RobotState &, franka::Duration)> motion_generator_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
 Starts a control loop for sending joint-level torque commands and Cartesian poses. More...
 
void control (std::function< Torques(const RobotState &, franka::Duration)> control_callback, std::function< CartesianVelocities(const RobotState &, franka::Duration)> motion_generator_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
 Starts a control loop for sending joint-level torque commands and Cartesian velocities. More...
 
void control (std::function< JointPositions(const RobotState &, franka::Duration)> motion_generator_callback, ControllerMode controller_mode=ControllerMode::kJointImpedance, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
 Starts a control loop for a joint position motion generator with a given controller mode. More...
 
void control (std::function< JointVelocities(const RobotState &, franka::Duration)> motion_generator_callback, ControllerMode controller_mode=ControllerMode::kJointImpedance, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
 Starts a control loop for a joint velocity motion generator with a given controller mode. More...
 
void control (std::function< CartesianPose(const RobotState &, franka::Duration)> motion_generator_callback, ControllerMode controller_mode=ControllerMode::kJointImpedance, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
 Starts a control loop for a Cartesian pose motion generator with a given controller mode. More...
 
void control (std::function< CartesianVelocities(const RobotState &, franka::Duration)> motion_generator_callback, ControllerMode controller_mode=ControllerMode::kJointImpedance, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
 Starts a control loop for a Cartesian velocity motion generator with a given controller mode. More...
 
Commands

Commands are executed by communicating with the robot over the network.

+

These functions should therefore not be called from within control or motion generator loops.

+
auto getRobotModel () -> std::string
 
void setCollisionBehavior (const std::array< double, 7 > &lower_torque_thresholds_acceleration, const std::array< double, 7 > &upper_torque_thresholds_acceleration, const std::array< double, 7 > &lower_torque_thresholds_nominal, const std::array< double, 7 > &upper_torque_thresholds_nominal, const std::array< double, 6 > &lower_force_thresholds_acceleration, const std::array< double, 6 > &upper_force_thresholds_acceleration, const std::array< double, 6 > &lower_force_thresholds_nominal, const std::array< double, 6 > &upper_force_thresholds_nominal)
 Changes the collision behavior. More...
 
void setCollisionBehavior (const std::array< double, 7 > &lower_torque_thresholds, const std::array< double, 7 > &upper_torque_thresholds, const std::array< double, 6 > &lower_force_thresholds, const std::array< double, 6 > &upper_force_thresholds)
 Changes the collision behavior. More...
 
void setJointImpedance (const std::array< double, 7 > &K_theta)
 Sets the impedance for each joint in the internal controller. More...
 
void setCartesianImpedance (const std::array< double, 6 > &K_x)
 Sets the Cartesian stiffness/compliance (for x, y, z, roll, pitch, yaw) in the internal controller. More...
 
void setGuidingMode (const std::array< bool, 6 > &guiding_mode, bool elbow)
 Locks or unlocks guiding mode movement in (x, y, z, roll, pitch, yaw). More...
 
void setK (const std::array< double, 16 > &EE_T_K)
 Sets the transformation \(^{EE}T_K\) from end effector frame to stiffness frame. More...
 
void setEE (const std::array< double, 16 > &NE_T_EE)
 Sets the transformation \(^{NE}T_{EE}\) from nominal end effector to end effector frame. More...
 
void setLoad (double load_mass, const std::array< double, 3 > &F_x_Cload, const std::array< double, 9 > &load_inertia)
 Sets dynamic parameters of a payload. More...
 
void automaticErrorRecovery ()
 Runs automatic error recovery on the robot. More...
 
virtual std::unique_ptr< ActiveControlBasestartTorqueControl ()
 Starts a new torque controller. More...
 
virtual std::unique_ptr< ActiveControlBasestartJointPositionControl (const research_interface::robot::Move::ControllerMode &control_type)
 Starts a new joint position motion generator. More...
 
virtual std::unique_ptr< ActiveControlBasestartJointVelocityControl (const research_interface::robot::Move::ControllerMode &control_type)
 Starts a new joint velocity motion generator. More...
 
virtual std::unique_ptr< ActiveControlBasestartCartesianPoseControl (const research_interface::robot::Move::ControllerMode &control_type)
 Starts a new cartesian position motion generator. More...
 
virtual std::unique_ptr< ActiveControlBasestartCartesianVelocityControl (const research_interface::robot::Move::ControllerMode &control_type)
 Starts a new cartesian velocity motion generator. More...
 
void stop ()
 Stops all currently running motions. More...
 
+ + + + + + + +

+Protected Member Functions

 Robot (std::shared_ptr< Impl > robot_impl)
 Constructs a new Robot given a Robot::Impl. More...
 
Robot ()=default
 Default constructor to enable mocking and testing.
 
+

Detailed Description

+

Maintains a network connection to the robot, provides the current robot state, gives access to the model library and allows to control the robot.

+
Note
The members of this class are threadsafe.
+

Base frame O
The base frame is located at the center of the robot's base. Its z-axis is identical with the axis of rotation of the first joint.
+

Flange frame F
The flange frame is located at the center of the flange surface. Its z-axis is identical with the axis of rotation of the last joint. This frame is fixed and cannot be changed.
+

Nominal end effector frame NE
The nominal end effector frame is configured outside of libfranka (in DESK) and cannot be changed here. It may be used to set end effector frames which are rarely changed.
+

end effector frame EE
By default, the end effector frame EE is the same as the nominal end effector frame NE (i.e. the transformation between NE and EE is the identity transformation). It may be used to set end effector frames which are changed more frequently (such as a tool that is grasped with the end effector). With Robot::setEE, a custom transformation matrix can be set.
+

Stiffness frame K
This frame describes the transformation from the end effector frame EE to the stiffness frame K. The stiffness frame is used for Cartesian impedance control, and for measuring and applying forces. The values set using Robot::setCartesianImpedance are used in the direction of the stiffness frame. It can be set with Robot::setK. This frame allows to modify the compliance behavior of the robot (e.g. to have a low stiffness around a specific point which is not the end effector). The stiffness frame does not affect where the robot will move to. The user should always command the desired end effector frame (and not the desired stiffness frame).
+
Examples
cartesian_impedance_control.cpp, communication_test.cpp, echo_robot_state.cpp, force_control.cpp, generate_cartesian_pose_motion.cpp, generate_cartesian_pose_motion_external_control_loop.cpp, generate_cartesian_velocity_motion.cpp, generate_cartesian_velocity_motion_external_control_loop.cpp, generate_consecutive_motions.cpp, generate_elbow_motion.cpp, generate_joint_position_motion.cpp, generate_joint_position_motion_external_control_loop.cpp, generate_joint_velocity_motion.cpp, generate_joint_velocity_motion_external_control_loop.cpp, joint_impedance_control.cpp, joint_point_to_point_motion.cpp, motion_with_control.cpp, motion_with_control_external_control_loop.cpp, and print_joint_poses.cpp.
+
+

Constructor & Destructor Documentation

+ +

◆ Robot() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
franka::Robot::Robot (const std::string & franka_address,
RealtimeConfig realtime_config = RealtimeConfig::kEnforce,
size_t log_size = 50 
)
+
+explicit
+
+ +

Establishes a connection with the robot.

+
Parameters
+ + + + +
[in]franka_addressIP/hostname of the robot.
[in]realtime_configif set to Enforce, an exception will be thrown if realtime priority cannot be set when required. Setting realtime_config to Ignore disables this behavior.
[in]log_sizesets how many last states should be kept for logging purposes. The log is provided when a ControlException is thrown.
+
+
+
Exceptions
+ + + +
NetworkExceptionif the connection is unsuccessful.
IncompatibleVersionExceptionif this version of libfranka is not supported.
+
+
+ +
+
+ +

◆ Robot() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + +
franka::Robot::Robot (Robot && other)
+
+noexcept
+
+ +

Move-constructs a new Robot instance.

+
Parameters
+ + +
[in]otherOther Robot instance.
+
+
+ +
+
+ +

◆ Robot() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + +
franka::Robot::Robot (std::shared_ptr< Impl > robot_impl)
+
+protected
+
+ +

Constructs a new Robot given a Robot::Impl.

+

This enables unittests with Robot::Impl-Mocks.

+
Parameters
+ + +
robot_implRobot::Impl to use
+
+
+ +
+
+

Member Function Documentation

+ +

◆ automaticErrorRecovery()

+ +
+
+ + + + + + + +
void franka::Robot::automaticErrorRecovery ()
+
+ +

Runs automatic error recovery on the robot.

+

Automatic error recovery e.g. resets the robot after a collision occurred.

+
Exceptions
+ + + +
CommandExceptionif the Control reports an error.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+
Examples
generate_consecutive_motions.cpp.
+
+ +
+
+ +

◆ control() [1/9]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void franka::Robot::control (std::function< CartesianPose(const RobotState &, franka::Duration)> motion_generator_callback,
ControllerMode controller_mode = ControllerMode::kJointImpedance,
bool limit_rate = false,
double cutoff_frequency = kDefaultCutoffFrequency 
)
+
+ +

Starts a control loop for a Cartesian pose motion generator with a given controller mode.

+

Sets realtime priority for the current thread. Cannot be executed while another control or motion generator loop is active.

+
Parameters
+ + + + + +
[in]motion_generator_callbackCallback function for motion generation. See here for more details.
[in]controller_modeController to use to execute the motion.
[in]limit_rateTrue if rate limiting should be activated. False by default. This could distort your motion!
[in]cutoff_frequencyCutoff frequency for a first order low-pass filter applied on the user commanded signal. Set to franka::kMaxCutoffFrequency to disable.
+
+
+
Exceptions
+ + + + + + +
ControlExceptionif an error related to motion generation occurred.
InvalidOperationExceptionif a conflicting operation is already running.
NetworkExceptionif the connection is lost, e.g. after a timeout.
RealtimeExceptionif realtime priority cannot be set for the current thread.
std::invalid_argumentif Cartesian pose command elements are NaN or infinity.
+
+
+
See also
Robot::Robot to change behavior if realtime priority cannot be set.
+ +
+
+ +

◆ control() [2/9]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void franka::Robot::control (std::function< CartesianVelocities(const RobotState &, franka::Duration)> motion_generator_callback,
ControllerMode controller_mode = ControllerMode::kJointImpedance,
bool limit_rate = false,
double cutoff_frequency = kDefaultCutoffFrequency 
)
+
+ +

Starts a control loop for a Cartesian velocity motion generator with a given controller mode.

+

Sets realtime priority for the current thread. Cannot be executed while another control or motion generator loop is active.

+
Parameters
+ + + + + +
[in]motion_generator_callbackCallback function for motion generation. See here for more details.
[in]controller_modeController to use to execute the motion.
[in]limit_rateTrue if rate limiting should be activated. False by default. This could distort your motion!
[in]cutoff_frequencyCutoff frequency for a first order low-pass filter applied on the user commanded signal. Set to franka::kMaxCutoffFrequency to disable.
+
+
+
Exceptions
+ + + + + + +
ControlExceptionif an error related to motion generation occurred.
InvalidOperationExceptionif a conflicting operation is already running.
NetworkExceptionif the connection is lost, e.g. after a timeout.
RealtimeExceptionif realtime priority cannot be set for the current thread.
std::invalid_argumentif Cartesian velocity command elements are NaN or infinity.
+
+
+
See also
Robot::Robot to change behavior if realtime priority cannot be set.
+ +
+
+ +

◆ control() [3/9]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void franka::Robot::control (std::function< JointPositions(const RobotState &, franka::Duration)> motion_generator_callback,
ControllerMode controller_mode = ControllerMode::kJointImpedance,
bool limit_rate = false,
double cutoff_frequency = kDefaultCutoffFrequency 
)
+
+ +

Starts a control loop for a joint position motion generator with a given controller mode.

+

Sets realtime priority for the current thread. Cannot be executed while another control or motion generator loop is active.

+
Parameters
+ + + + + +
[in]motion_generator_callbackCallback function for motion generation. See here for more details.
[in]controller_modeController to use to execute the motion.
[in]limit_rateTrue if rate limiting should be activated. False by default. This could distort your motion!
[in]cutoff_frequencyCutoff frequency for a first order low-pass filter applied on the user commanded signal. Set to franka::kMaxCutoffFrequency to disable.
+
+
+
Exceptions
+ + + + + + +
ControlExceptionif an error related to motion generation occurred.
InvalidOperationExceptionif a conflicting operation is already running.
NetworkExceptionif the connection is lost, e.g. after a timeout.
RealtimeExceptionif realtime priority cannot be set for the current thread.
std::invalid_argumentif joint position commands are NaN or infinity.
+
+
+
See also
Robot::Robot to change behavior if realtime priority cannot be set.
+ +
+
+ +

◆ control() [4/9]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void franka::Robot::control (std::function< JointVelocities(const RobotState &, franka::Duration)> motion_generator_callback,
ControllerMode controller_mode = ControllerMode::kJointImpedance,
bool limit_rate = false,
double cutoff_frequency = kDefaultCutoffFrequency 
)
+
+ +

Starts a control loop for a joint velocity motion generator with a given controller mode.

+

Sets realtime priority for the current thread. Cannot be executed while another control or motion generator loop is active.

+
Parameters
+ + + + + +
[in]motion_generator_callbackCallback function for motion generation. See here for more details.
[in]controller_modeController to use to execute the motion.
[in]limit_rateTrue if rate limiting should be activated. False by default. This could distort your motion!
[in]cutoff_frequencyCutoff frequency for a first order low-pass filter applied on the user commanded signal. Set to franka::kMaxCutoffFrequency to disable.
+
+
+
Exceptions
+ + + + + + +
ControlExceptionif an error related to motion generation occurred.
InvalidOperationExceptionif a conflicting operation is already running.
NetworkExceptionif the connection is lost, e.g. after a timeout.
RealtimeExceptionif realtime priority cannot be set for the current thread.
std::invalid_argumentif joint velocity commands are NaN or infinity.
+
+
+
See also
Robot::Robot to change behavior if realtime priority cannot be set.
+ +
+
+ +

◆ control() [5/9]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void franka::Robot::control (std::function< Torques(const RobotState &, franka::Duration)> control_callback,
bool limit_rate = false,
double cutoff_frequency = kDefaultCutoffFrequency 
)
+
+ +

Starts a control loop for sending joint-level torque commands.

+

Sets realtime priority for the current thread. Cannot be executed while another control or motion generator loop is active.

+
Parameters
+ + + + +
[in]control_callbackCallback function providing joint-level torque commands. See here for more details.
[in]limit_rateTrue if rate limiting should be activated. False by default. This could distort your motion!
[in]cutoff_frequencyCutoff frequency for a first order low-pass filter applied on the user commanded signal. Set to franka::kMaxCutoffFrequency to disable.
+
+
+
Exceptions
+ + + + + + +
ControlExceptionif an error related to torque control or motion generation occurred.
InvalidOperationExceptionif a conflicting operation is already running.
NetworkExceptionif the connection is lost, e.g. after a timeout.
RealtimeExceptionif realtime priority cannot be set for the current thread.
std::invalid_argumentif joint-level torque commands are NaN or infinity.
+
+
+
See also
Robot::Robot to change behavior if realtime priority cannot be set.
+
Examples
cartesian_impedance_control.cpp, communication_test.cpp, force_control.cpp, generate_cartesian_pose_motion.cpp, generate_cartesian_pose_motion_external_control_loop.cpp, generate_cartesian_velocity_motion.cpp, generate_cartesian_velocity_motion_external_control_loop.cpp, generate_consecutive_motions.cpp, generate_elbow_motion.cpp, generate_joint_position_motion.cpp, generate_joint_position_motion_external_control_loop.cpp, generate_joint_velocity_motion.cpp, generate_joint_velocity_motion_external_control_loop.cpp, and joint_point_to_point_motion.cpp.
+
+ +
+
+ +

◆ control() [6/9]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void franka::Robot::control (std::function< Torques(const RobotState &, franka::Duration)> control_callback,
std::function< CartesianPose(const RobotState &, franka::Duration)> motion_generator_callback,
bool limit_rate = false,
double cutoff_frequency = kDefaultCutoffFrequency 
)
+
+ +

Starts a control loop for sending joint-level torque commands and Cartesian poses.

+

Sets realtime priority for the current thread. Cannot be executed while another control or motion generator loop is active.

+
Parameters
+ + + + + +
[in]control_callbackCallback function providing joint-level torque commands. See here for more details.
[in]motion_generator_callbackCallback function for motion generation. See here for more details.
[in]limit_rateTrue if rate limiting should be activated. False by default. This could distort your motion!
[in]cutoff_frequencyCutoff frequency for a first order low-pass filter applied on the user commanded signal. Set to franka::kMaxCutoffFrequency to disable.
+
+
+
Exceptions
+ + + + + + +
ControlExceptionif an error related to torque control or motion generation occurred.
InvalidOperationExceptionif a conflicting operation is already running.
NetworkExceptionif the connection is lost, e.g. after a timeout.
RealtimeExceptionif realtime priority cannot be set for the current thread.
std::invalid_argumentif joint-level torque or Cartesian pose command elements are NaN or infinity.
+
+
+
See also
Robot::Robot to change behavior if realtime priority cannot be set.
+ +
+
+ +

◆ control() [7/9]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void franka::Robot::control (std::function< Torques(const RobotState &, franka::Duration)> control_callback,
std::function< CartesianVelocities(const RobotState &, franka::Duration)> motion_generator_callback,
bool limit_rate = false,
double cutoff_frequency = kDefaultCutoffFrequency 
)
+
+ +

Starts a control loop for sending joint-level torque commands and Cartesian velocities.

+

Sets realtime priority for the current thread. Cannot be executed while another control or motion generator loop is active.

+
Parameters
+ + + + + +
[in]control_callbackCallback function providing joint-level torque commands. See here for more details.
[in]motion_generator_callbackCallback function for motion generation. See here for more details.
[in]limit_rateTrue if rate limiting should be activated. False by default. This could distort your motion!
[in]cutoff_frequencyCutoff frequency for a first order low-pass filter applied on the user commanded signal. Set to franka::kMaxCutoffFrequency to disable.
+
+
+
Exceptions
+ + + + + + +
ControlExceptionif an error related to torque control or motion generation occurred.
InvalidOperationExceptionif a conflicting operation is already running.
NetworkExceptionif the connection is lost, e.g. after a timeout.
RealtimeExceptionif realtime priority cannot be set for the current thread.
std::invalid_argumentif joint-level torque or Cartesian velocity command elements are NaN or infinity.
+
+
+
See also
Robot::Robot to change behavior if realtime priority cannot be set.
+ +
+
+ +

◆ control() [8/9]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void franka::Robot::control (std::function< Torques(const RobotState &, franka::Duration)> control_callback,
std::function< JointPositions(const RobotState &, franka::Duration)> motion_generator_callback,
bool limit_rate = false,
double cutoff_frequency = kDefaultCutoffFrequency 
)
+
+ +

Starts a control loop for sending joint-level torque commands and joint positions.

+

Sets realtime priority for the current thread. Cannot be executed while another control or motion generator loop is active.

+
Parameters
+ + + + + +
[in]control_callbackCallback function providing joint-level torque commands. See here for more details.
[in]motion_generator_callbackCallback function for motion generation. See here for more details.
[in]limit_rateTrue if rate limiting should be activated. False by default. This could distort your motion!
[in]cutoff_frequencyCutoff frequency for a first order low-pass filter applied on the user commanded signal. Set to franka::kMaxCutoffFrequency to disable.
+
+
+
Exceptions
+ + + + + + +
ControlExceptionif an error related to torque control or motion generation occurred.
InvalidOperationExceptionif a conflicting operation is already running.
NetworkExceptionif the connection is lost, e.g. after a timeout.
RealtimeExceptionif realtime priority cannot be set for the current thread.
std::invalid_argumentif joint-level torque or joint position commands are NaN or infinity.
+
+
+
See also
Robot::Robot to change behavior if realtime priority cannot be set.
+ +
+
+ +

◆ control() [9/9]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void franka::Robot::control (std::function< Torques(const RobotState &, franka::Duration)> control_callback,
std::function< JointVelocities(const RobotState &, franka::Duration)> motion_generator_callback,
bool limit_rate = false,
double cutoff_frequency = kDefaultCutoffFrequency 
)
+
+ +

Starts a control loop for sending joint-level torque commands and joint velocities.

+

Sets realtime priority for the current thread. Cannot be executed while another control or motion generator loop is active.

+
Parameters
+ + + + + +
[in]control_callbackCallback function providing joint-level torque commands. See here for more details.
[in]motion_generator_callbackCallback function for motion generation. See here for more details.
[in]limit_rateTrue if rate limiting should be activated. False by default. This could distort your motion!
[in]cutoff_frequencyCutoff frequency for a first order low-pass filter applied on the user commanded signal. Set to franka::kMaxCutoffFrequency to disable.
+
+
+
Exceptions
+ + + + + + +
ControlExceptionif an error related to torque control or motion generation occurred.
InvalidOperationExceptionif a conflicting operation is already running.
NetworkExceptionif the connection is lost, e.g. after a timeout.
RealtimeExceptionif realtime priority cannot be set for the current thread.
std::invalid_argumentif joint-level torque or joint velocity commands are NaN or infinity.
+
+
+
See also
Robot::Robot to change behavior if realtime priority cannot be set.
+ +
+
+ +

◆ getRobotModel()

+ +
+
+ + + + + + + +
auto franka::Robot::getRobotModel () -> std::string
+
+
Exceptions
+ + + +
CommandExceptionif the Control reports an error.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+
Returns
std::string Provides the URDF model of the attached robot arm as json string
+ +
+
+ +

◆ loadModel()

+ +
+
+ + + + + + + +
Model franka::Robot::loadModel ()
+
+ +

Loads the model library from the robot.

+
Returns
Model instance.
+
Exceptions
+ + + +
ModelExceptionif the model library cannot be loaded.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+
Examples
cartesian_impedance_control.cpp, and force_control.cpp.
+
+ +
+
+ +

◆ operator=()

+ +
+
+ + + + + +
+ + + + + + + + +
Robot& franka::Robot::operator= (Robot && other)
+
+noexcept
+
+ +

Move-assigns this Robot from another Robot instance.

+
Parameters
+ + +
[in]otherOther Robot instance.
+
+
+
Returns
Robot instance.
+ +
+
+ +

◆ read()

+ +
+
+ + + + + + + + +
void franka::Robot::read (std::function< bool(const RobotState &)> read_callback)
+
+ +

Starts a loop for reading the current robot state.

+

Cannot be executed while a control or motion generator loop is running.

+

This minimal example will print the robot state 100 times:

franka::Robot robot("robot.franka.de");
+
size_t count = 0;
+
robot.read([&count](const franka::RobotState& robot_state) {
+
std::cout << robot_state << std::endl;
+
return count++ < 100;
+
});
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
Parameters
+ + +
[in]read_callbackCallback function for robot state reading.
+
+
+
Exceptions
+ + + +
InvalidOperationExceptionif a conflicting operation is already running.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+
Examples
echo_robot_state.cpp.
+
+ +
+
+ +

◆ readOnce()

+ +
+
+ + + + + +
+ + + + + + + +
virtual RobotState franka::Robot::readOnce ()
+
+virtual
+
+ +

Waits for a robot state update and returns it.

+

Cannot be executed while a control or motion generator loop is running.

+
Returns
Current robot state.
+
Exceptions
+ + + +
InvalidOperationExceptionif a conflicting operation is already running.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+
See also
Robot::read for a way to repeatedly receive the robot state.
+
Examples
cartesian_impedance_control.cpp, and force_control.cpp.
+
+ +
+
+ +

◆ serverVersion()

+ +
+
+ + + + + +
+ + + + + + + +
ServerVersion franka::Robot::serverVersion () const
+
+noexcept
+
+ +

Returns the software version reported by the connected server.

+
Returns
Software version of the connected server.
+ +
+
+ +

◆ setCartesianImpedance()

+ +
+
+ + + + + + + + +
void franka::Robot::setCartesianImpedance (const std::array< double, 6 > & K_x)
+
+ +

Sets the Cartesian stiffness/compliance (for x, y, z, roll, pitch, yaw) in the internal controller.

+

The values set using Robot::setCartesianImpedance are used in the direction of the stiffness frame, which can be set with Robot::setK.

+

Inputs received by the torque controller are not affected by this setting.

+
Parameters
+ + +
[in]K_xCartesian impedance values \(K_x=(K_{x_{x,y,z}} \in [10,3000] \frac{N}{m}, K_{x_{R,P,Y}} \in [1,300] \frac{Nm}{rad})\)
+
+
+
Exceptions
+ + + +
CommandExceptionif the Control reports an error.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+ +
+
+ +

◆ setCollisionBehavior() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void franka::Robot::setCollisionBehavior (const std::array< double, 7 > & lower_torque_thresholds,
const std::array< double, 7 > & upper_torque_thresholds,
const std::array< double, 6 > & lower_force_thresholds,
const std::array< double, 6 > & upper_force_thresholds 
)
+
+ +

Changes the collision behavior.

+

Set common torque and force boundaries for acceleration/deceleration and constant velocity movement phases.

+

Forces or torques between lower and upper threshold are shown as contacts in the RobotState. Forces or torques above the upper threshold are registered as collision and cause the robot to stop moving.

+
Parameters
+ + + + + +
[in]lower_torque_thresholdsContact torque thresholds for each joint in \([Nm]\).
[in]upper_torque_thresholdsCollision torque thresholds for each joint in \([Nm]\).
[in]lower_force_thresholdsContact force thresholds for \((x,y,z,R,P,Y)\) in \([N]\).
[in]upper_force_thresholdsCollision force thresholds for \((x,y,z,R,P,Y)\) in \([N]\).
+
+
+
Exceptions
+ + + +
CommandExceptionif the Control reports an error.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+
See also
RobotState::cartesian_contact
+
+RobotState::cartesian_collision
+
+RobotState::joint_contact
+
+RobotState::joint_collision
+
+Robot::automaticErrorRecovery for performing a reset after a collision.
+ +
+
+ +

◆ setCollisionBehavior() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void franka::Robot::setCollisionBehavior (const std::array< double, 7 > & lower_torque_thresholds_acceleration,
const std::array< double, 7 > & upper_torque_thresholds_acceleration,
const std::array< double, 7 > & lower_torque_thresholds_nominal,
const std::array< double, 7 > & upper_torque_thresholds_nominal,
const std::array< double, 6 > & lower_force_thresholds_acceleration,
const std::array< double, 6 > & upper_force_thresholds_acceleration,
const std::array< double, 6 > & lower_force_thresholds_nominal,
const std::array< double, 6 > & upper_force_thresholds_nominal 
)
+
+ +

Changes the collision behavior.

+

Set separate torque and force boundaries for acceleration/deceleration and constant velocity movement phases.

+

Forces or torques between lower and upper threshold are shown as contacts in the RobotState. Forces or torques above the upper threshold are registered as collision and cause the robot to stop moving.

+
Parameters
+ + + + + + + + + +
[in]lower_torque_thresholds_accelerationContact torque thresholds during acceleration/deceleration for each joint in \([Nm]\).
[in]upper_torque_thresholds_accelerationCollision torque thresholds during acceleration/deceleration for each joint in \([Nm]\).
[in]lower_torque_thresholds_nominalContact torque thresholds for each joint in \([Nm]\).
[in]upper_torque_thresholds_nominalCollision torque thresholds for each joint in \([Nm]\).
[in]lower_force_thresholds_accelerationContact force thresholds during acceleration/deceleration for \((x,y,z,R,P,Y)\) in \([N]\).
[in]upper_force_thresholds_accelerationCollision force thresholds during acceleration/deceleration for \((x,y,z,R,P,Y)\) in \([N]\).
[in]lower_force_thresholds_nominalContact force thresholds for \((x,y,z,R,P,Y)\) in \([N]\).
[in]upper_force_thresholds_nominalCollision force thresholds for \((x,y,z,R,P,Y)\) in \([N]\).
+
+
+
Exceptions
+ + + +
CommandExceptionif the Control reports an error.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+
See also
RobotState::cartesian_contact
+
+RobotState::cartesian_collision
+
+RobotState::joint_contact
+
+RobotState::joint_collision
+
+Robot::automaticErrorRecovery for performing a reset after a collision.
+
Examples
cartesian_impedance_control.cpp, communication_test.cpp, force_control.cpp, generate_cartesian_pose_motion.cpp, generate_cartesian_pose_motion_external_control_loop.cpp, generate_cartesian_velocity_motion.cpp, generate_cartesian_velocity_motion_external_control_loop.cpp, generate_consecutive_motions.cpp, generate_elbow_motion.cpp, generate_joint_position_motion.cpp, generate_joint_position_motion_external_control_loop.cpp, generate_joint_velocity_motion.cpp, generate_joint_velocity_motion_external_control_loop.cpp, and joint_point_to_point_motion.cpp.
+
+ +
+
+ +

◆ setEE()

+ +
+
+ + + + + + + + +
void franka::Robot::setEE (const std::array< double, 16 > & NE_T_EE)
+
+ +

Sets the transformation \(^{NE}T_{EE}\) from nominal end effector to end effector frame.

+

The transformation matrix is represented as a vectorized 4x4 matrix in column-major format.

+
Parameters
+ + +
[in]NE_T_EEVectorized NE-to-EE transformation matrix \(^{NE}T_{EE}\), column-major.
+
+
+
Exceptions
+ + + +
CommandExceptionif the Control reports an error.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+
See also
RobotState::NE_T_EE for end effector pose in nominal end effector frameNE". +@see RobotState::O_T_EE for end effector pose in @ref o-frame "world base frame O". +@see RobotState::F_T_EE for end effector pose in @ref f-frame "flange frame F".
+ +
+
+ +

◆ setGuidingMode()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void franka::Robot::setGuidingMode (const std::array< bool, 6 > & guiding_mode,
bool elbow 
)
+
+ +

Locks or unlocks guiding mode movement in (x, y, z, roll, pitch, yaw).

+

If a flag is set to true, movement is unlocked.

+
Note
Guiding mode can be enabled by pressing the two opposing buttons near the robot's flange.
+
Parameters
+ + + +
[in]guiding_modeUnlocked movement in (x, y, z, R, P, Y) in guiding mode.
[in]elbowTrue if the elbow is free in guiding mode, false otherwise.
+
+
+
Exceptions
+ + + +
CommandExceptionif the Control reports an error.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+ +
+
+ +

◆ setJointImpedance()

+ +
+
+ + + + + + + + +
void franka::Robot::setJointImpedance (const std::array< double, 7 > & K_theta)
+
+ +

Sets the impedance for each joint in the internal controller.

+

User-provided torques are not affected by this setting.

+
Parameters
+ + +
[in]K_thetaJoint impedance values \(K_{\theta_{1-7}} = \in [0,14250] \frac{Nm}{rad}\)
+
+
+
Exceptions
+ + + +
CommandExceptionif the Control reports an error.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+
Examples
generate_cartesian_velocity_motion.cpp, and generate_cartesian_velocity_motion_external_control_loop.cpp.
+
+ +
+
+ +

◆ setK()

+ +
+
+ + + + + + + + +
void franka::Robot::setK (const std::array< double, 16 > & EE_T_K)
+
+ +

Sets the transformation \(^{EE}T_K\) from end effector frame to stiffness frame.

+

The transformation matrix is represented as a vectorized 4x4 matrix in column-major format.

+
Parameters
+ + +
[in]EE_T_KVectorized EE-to-K transformation matrix \(^{EE}T_K\), column-major.
+
+
+
Exceptions
+ + + +
CommandExceptionif the Control reports an error.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+
See also
Robot for an explanation of the stiffness frame.
+ +
+
+ +

◆ setLoad()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void franka::Robot::setLoad (double load_mass,
const std::array< double, 3 > & F_x_Cload,
const std::array< double, 9 > & load_inertia 
)
+
+ +

Sets dynamic parameters of a payload.

+
Note
This is not for setting end effector parameters, which have to be set in the administrator's interface.
+
Parameters
+ + + + +
[in]load_massMass of the load in \([kg]\).
[in]F_x_CloadTranslation from flange to center of mass of load \(^Fx_{C_\text{load}}\) in \([m]\).
[in]load_inertiaInertia matrix \(I_\text{load}\) in \([kg \times m^2]\), column-major.
+
+
+
Exceptions
+ + + +
CommandExceptionif the Control reports an error.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+ +
+
+ +

◆ startCartesianPoseControl()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::unique_ptr<ActiveControlBase> franka::Robot::startCartesianPoseControl (const research_interface::robot::Move::ControllerMode & control_type)
+
+virtual
+
+ +

Starts a new cartesian position motion generator.

+
Parameters
+ + +
control_typeresearch_interface::robot::Move::ControllerMode control type for the operation
+
+
+
Returns
unique_ptr of ActiveMotionGenerator for the started motion
+
Exceptions
+ + + + + +
ControlExceptionif an error related to torque control or motion generation occurred.
InvalidOperationExceptionif a conflicting operation is already running.
NetworkExceptionif the connection is lost, e.g. after a timeout.
std::invalid_argumentif joint-level torque commands are NaN or infinity.
+
+
+
Examples
generate_cartesian_pose_motion_external_control_loop.cpp.
+
+ +
+
+ +

◆ startCartesianVelocityControl()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::unique_ptr<ActiveControlBase> franka::Robot::startCartesianVelocityControl (const research_interface::robot::Move::ControllerMode & control_type)
+
+virtual
+
+ +

Starts a new cartesian velocity motion generator.

+
Parameters
+ + +
control_typeresearch_interface::robot::Move::ControllerMode control type for the operation
+
+
+
Returns
unique_ptr of ActiveMotionGenerator for the started motion
+
Exceptions
+ + + + + +
ControlExceptionif an error related to torque control or motion generation occurred.
InvalidOperationExceptionif a conflicting operation is already running.
NetworkExceptionif the connection is lost, e.g. after a timeout.
std::invalid_argumentif joint-level torque commands are NaN or infinity.
+
+
+
Examples
generate_cartesian_velocity_motion_external_control_loop.cpp.
+
+ +
+
+ +

◆ startJointPositionControl()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::unique_ptr<ActiveControlBase> franka::Robot::startJointPositionControl (const research_interface::robot::Move::ControllerMode & control_type)
+
+virtual
+
+ +

Starts a new joint position motion generator.

+
Parameters
+ + +
control_typeresearch_interface::robot::Move::ControllerMode control type for the operation
+
+
+
Returns
unique_ptr of ActiveMotionGenerator for the started motion
+
Exceptions
+ + + + + +
ControlExceptionif an error related to torque control or motion generation occurred.
InvalidOperationExceptionif a conflicting operation is already running.
NetworkExceptionif the connection is lost, e.g. after a timeout.
std::invalid_argumentif joint-level torque commands are NaN or infinity.
+
+
+
Examples
generate_joint_position_motion_external_control_loop.cpp.
+
+ +
+
+ +

◆ startJointVelocityControl()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::unique_ptr<ActiveControlBase> franka::Robot::startJointVelocityControl (const research_interface::robot::Move::ControllerMode & control_type)
+
+virtual
+
+ +

Starts a new joint velocity motion generator.

+
Parameters
+ + +
control_typeresearch_interface::robot::Move::ControllerMode control type for the operation
+
+
+
Returns
unique_ptr of ActiveMotionGenerator for the started motion
+
Exceptions
+ + + + + +
ControlExceptionif an error related to torque control or motion generation occurred.
InvalidOperationExceptionif a conflicting operation is already running.
NetworkExceptionif the connection is lost, e.g. after a timeout.
std::invalid_argumentif joint-level torque commands are NaN or infinity.
+
+
+
Examples
generate_joint_velocity_motion_external_control_loop.cpp.
+
+ +
+
+ +

◆ startTorqueControl()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::unique_ptr<ActiveControlBase> franka::Robot::startTorqueControl ()
+
+virtual
+
+ +

Starts a new torque controller.

+
Returns
unique_ptr of ActiveTorqueControl for the started motion
+
Exceptions
+ + + + + +
ControlExceptionif an error related to torque control or motion generation occurred.
InvalidOperationExceptionif a conflicting operation is already running.
NetworkExceptionif the connection is lost, e.g. after a timeout.
std::invalid_argumentif joint-level torque commands are NaN or infinity.
+
+
+
Examples
communication_test.cpp.
+
+ +
+
+ +

◆ stop()

+ +
+
+ + + + + + + +
void franka::Robot::stop ()
+
+ +

Stops all currently running motions.

+

If a control or motion generator loop is running in another thread, it will be preempted with a franka::ControlException.

+
Exceptions
+ + + +
CommandExceptionif the Control reports an error.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classfranka_1_1RobotModel-members.html b/classfranka_1_1RobotModel-members.html new file mode 100644 index 00000000..c2c0e955 --- /dev/null +++ b/classfranka_1_1RobotModel-members.html @@ -0,0 +1,95 @@ + + + + + + + +Project: Member List + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
franka::RobotModel Member List
+
+
+ +

This is the complete list of members for franka::RobotModel, including all inherited members.

+ + + + + + +
coriolis(const std::array< double, 7 > &q, const std::array< double, 7 > &dq, const std::array< double, 9 > &i_total, double m_total, const std::array< double, 3 > &f_x_ctotal, std::array< double, 7 > &c_ne) overridefranka::RobotModelvirtual
gravity(const std::array< double, 7 > &q, const std::array< double, 3 > &g_earth, double m_total, const std::array< double, 3 > &f_x_ctotal, std::array< double, 7 > &g_ne) overridefranka::RobotModelvirtual
mass(const std::array< double, 7 > &q, const std::array< double, 9 > &i_total, double m_total, const std::array< double, 3 > &f_x_ctotal, std::array< double, 49 > &m_ne) overridefranka::RobotModelvirtual
RobotModel(const std::string &urdf) (defined in franka::RobotModel)franka::RobotModel
~RobotModelBase()=default (defined in RobotModelBase)RobotModelBasevirtual
+ + + + diff --git a/classfranka_1_1RobotModel.html b/classfranka_1_1RobotModel.html new file mode 100644 index 00000000..cbf60327 --- /dev/null +++ b/classfranka_1_1RobotModel.html @@ -0,0 +1,348 @@ + + + + + + + +Project: franka::RobotModel Class Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
franka::RobotModel Class Reference
+
+
+ +

Implements RobotModelBase using Pinocchio. + More...

+ +

#include <robot_model.h>

+
+Inheritance diagram for franka::RobotModel:
+
+
Inheritance graph
+ + + + +
[legend]
+
+Collaboration diagram for franka::RobotModel:
+
+
Collaboration graph
+ + + + +
[legend]
+ + + + + + + + + + + + + +

+Public Member Functions

RobotModel (const std::string &urdf)
 
void coriolis (const std::array< double, 7 > &q, const std::array< double, 7 > &dq, const std::array< double, 9 > &i_total, double m_total, const std::array< double, 3 > &f_x_ctotal, std::array< double, 7 > &c_ne) override
 Calculates the Coriolis force vector (state-space equation): \( c= C \times dq\), in \([Nm]\). More...
 
void gravity (const std::array< double, 7 > &q, const std::array< double, 3 > &g_earth, double m_total, const std::array< double, 3 > &f_x_ctotal, std::array< double, 7 > &g_ne) override
 Calculates the gravity vector. More...
 
void mass (const std::array< double, 7 > &q, const std::array< double, 9 > &i_total, double m_total, const std::array< double, 3 > &f_x_ctotal, std::array< double, 49 > &m_ne) override
 Calculates the 7x7 mass matrix. More...
 
+

Detailed Description

+

Implements RobotModelBase using Pinocchio.

+

Member Function Documentation

+ +

◆ coriolis()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void franka::RobotModel::coriolis (const std::array< double, 7 > & q,
const std::array< double, 7 > & dq,
const std::array< double, 9 > & i_total,
double m_total,
const std::array< double, 3 > & f_x_ctotal,
std::array< double, 7 > & c_ne 
)
+
+overridevirtual
+
+ +

Calculates the Coriolis force vector (state-space equation): \( c= C \times dq\), in \([Nm]\).

+
Parameters
+ + + + + + + +
[in]qJoint position.
[in]dqJoint velocity.
[in]i_totalInertia of the attached total load including end effector, relative to center of mass, given as vectorized 3x3 column-major matrix. Unit: \([kg \times m^2]\).
[in]m_totalWeight of the attached total load including end effector. Unit: \([kg]\).
[in]f_x_ctotalTranslation from flange to center of mass of the attached total load. Unit: \([m]\).
[out]c_neCoriolis force vector. Unit: \([Nm]\).
+
+
+ +

Implements RobotModelBase.

+ +
+
+ +

◆ gravity()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void franka::RobotModel::gravity (const std::array< double, 7 > & q,
const std::array< double, 3 > & g_earth,
double m_total,
const std::array< double, 3 > & f_x_ctotal,
std::array< double, 7 > & g_ne 
)
+
+overridevirtual
+
+ +

Calculates the gravity vector.

+

Unit: \([Nm]\).

+
Parameters
+ + + + + + +
[in]qJoint position.
[in]gravity_earthEarth's gravity vector. Unit: \(\frac{m}{s^2}\).
[in]m_totalWeight of the attached total load including end effector. Unit: \([kg]\).
[in]f_x_CtotalTranslation from flange to center of mass of the attached total load.
[out]g_neGravity vector. Unit: \([Nm]\).
+
+
+ +

Implements RobotModelBase.

+ +
+
+ +

◆ mass()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void franka::RobotModel::mass (const std::array< double, 7 > & q,
const std::array< double, 9 > & i_total,
double m_total,
const std::array< double, 3 > & f_x_ctotal,
std::array< double, 49 > & m_ne 
)
+
+overridevirtual
+
+ +

Calculates the 7x7 mass matrix.

+

Unit: \([kg \times m^2]\).

+
Parameters
+ + + + + + +
[in]qJoint position.
[in]i_totalInertia of the attached total load including end effector, relative to center of mass, given as vectorized 3x3 column-major matrix. Unit: \([kg \times m^2]\).
[in]m_totalWeight of the attached total load including end effector. Unit: \([kg]\).
[in]f_x_ctotalTranslation from flange to center of mass of the attached total load. Unit: \([m]\).
[out]m_neVectorized 7x7 mass matrix, column-major.
+
+
+ +

Implements RobotModelBase.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classfranka_1_1RobotModel__coll__graph.map b/classfranka_1_1RobotModel__coll__graph.map new file mode 100644 index 00000000..57698f31 --- /dev/null +++ b/classfranka_1_1RobotModel__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classfranka_1_1RobotModel__coll__graph.md5 b/classfranka_1_1RobotModel__coll__graph.md5 new file mode 100644 index 00000000..912da929 --- /dev/null +++ b/classfranka_1_1RobotModel__coll__graph.md5 @@ -0,0 +1 @@ +9c27c3a04c18c899b61a6f3538c8e3ed \ No newline at end of file diff --git a/classfranka_1_1RobotModel__coll__graph.png b/classfranka_1_1RobotModel__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..e276343f0bb54d997018d107d5796e622ef2964a GIT binary patch literal 3869 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 + + + diff --git a/classfranka_1_1RobotModel__inherit__graph.md5 b/classfranka_1_1RobotModel__inherit__graph.md5 new file mode 100644 index 00000000..912da929 --- /dev/null +++ b/classfranka_1_1RobotModel__inherit__graph.md5 @@ -0,0 +1 @@ +9c27c3a04c18c899b61a6f3538c8e3ed \ No newline at end of file diff --git a/classfranka_1_1RobotModel__inherit__graph.png b/classfranka_1_1RobotModel__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..e276343f0bb54d997018d107d5796e622ef2964a GIT binary patch literal 3869 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 + + + + + + +Project: Member List + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
franka::Torques Member List
+
+
+ +

This is the complete list of members for franka::Torques, including all inherited members.

+ + + + + +
motion_finishedfranka::Finishable
tau_Jfranka::Torques
Torques(const std::array< double, 7 > &torques) noexceptfranka::Torques
Torques(std::initializer_list< double > torques)franka::Torques
+ + + + diff --git a/classfranka_1_1Torques.html b/classfranka_1_1Torques.html new file mode 100644 index 00000000..5878c9f2 --- /dev/null +++ b/classfranka_1_1Torques.html @@ -0,0 +1,210 @@ + + + + + + + +Project: franka::Torques Class Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
franka::Torques Class Reference
+
+
+ +

Stores joint-level torque commands without gravity and friction. + More...

+ +

#include <control_types.h>

+
+Inheritance diagram for franka::Torques:
+
+
Inheritance graph
+ + + + +
[legend]
+
+Collaboration diagram for franka::Torques:
+
+
Collaboration graph
+ + + + +
[legend]
+ + + + + + + + +

+Public Member Functions

 Torques (const std::array< double, 7 > &torques) noexcept
 Creates a new Torques instance. More...
 
 Torques (std::initializer_list< double > torques)
 Creates a new Torques instance. More...
 
+ + + + + + + + +

+Public Attributes

+std::array< double, 7 > tau_J {}
 Desired torques in [Nm].
 
- Public Attributes inherited from franka::Finishable
+bool motion_finished = false
 Determines whether to finish a currently running motion.
 
+

Detailed Description

+

Constructor & Destructor Documentation

+ +

◆ Torques() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
franka::Torques::Torques (const std::array< double, 7 > & torques)
+
+noexcept
+
+ +

Creates a new Torques instance.

+
Parameters
+ + +
[in]torquesDesired joint-level torques without gravity and friction in \([Nm]\).
+
+
+ +
+
+ +

◆ Torques() [2/2]

+ +
+
+ + + + + + + + +
franka::Torques::Torques (std::initializer_list< double > torques)
+
+ +

Creates a new Torques instance.

+
Parameters
+ + +
[in]torquesDesired joint-level torques without gravity and friction in \([Nm]\).
+
+
+
Exceptions
+ + +
std::invalid_argumentif the given initializer list has an invalid number of arguments.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classfranka_1_1Torques__coll__graph.map b/classfranka_1_1Torques__coll__graph.map new file mode 100644 index 00000000..de27f9cb --- /dev/null +++ b/classfranka_1_1Torques__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classfranka_1_1Torques__coll__graph.md5 b/classfranka_1_1Torques__coll__graph.md5 new file mode 100644 index 00000000..bb5e5fcd --- /dev/null +++ b/classfranka_1_1Torques__coll__graph.md5 @@ -0,0 +1 @@ +a943715320da47aa78a814b0a876491e \ No newline at end of file diff --git a/classfranka_1_1Torques__coll__graph.png b/classfranka_1_1Torques__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..9dcd64dd30afb31ece18427ee625ea319cdf4c71 GIT binary patch literal 3264 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 literal 0 HcmV?d00001 diff --git a/classfranka_1_1Torques__inherit__graph.map b/classfranka_1_1Torques__inherit__graph.map new file mode 100644 index 00000000..de27f9cb --- /dev/null +++ b/classfranka_1_1Torques__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classfranka_1_1Torques__inherit__graph.md5 b/classfranka_1_1Torques__inherit__graph.md5 new file mode 100644 index 00000000..bb5e5fcd --- /dev/null +++ b/classfranka_1_1Torques__inherit__graph.md5 @@ -0,0 +1 @@ +a943715320da47aa78a814b0a876491e \ No newline at end of file diff --git a/classfranka_1_1Torques__inherit__graph.png b/classfranka_1_1Torques__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..9dcd64dd30afb31ece18427ee625ea319cdf4c71 GIT binary patch literal 3264 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 literal 0 HcmV?d00001 diff --git a/classfranka_1_1VacuumGripper-members.html b/classfranka_1_1VacuumGripper-members.html new file mode 100644 index 00000000..0e22d4c8 --- /dev/null +++ b/classfranka_1_1VacuumGripper-members.html @@ -0,0 +1,101 @@ + + + + + + + +Project: Member List + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
franka::VacuumGripper Member List
+
+
+ +

This is the complete list of members for franka::VacuumGripper, including all inherited members.

+ + + + + + + + + + + + +
dropOff(std::chrono::milliseconds timeout) constfranka::VacuumGripper
operator=(VacuumGripper &&vacuum_gripper) noexceptfranka::VacuumGripper
ProductionSetupProfile enum namefranka::VacuumGripper
readOnce() constfranka::VacuumGripper
ServerVersion typedeffranka::VacuumGripper
serverVersion() const noexceptfranka::VacuumGripper
stop() constfranka::VacuumGripper
vacuum(uint8_t vacuum, std::chrono::milliseconds timeout, ProductionSetupProfile profile=ProductionSetupProfile::kP0) constfranka::VacuumGripper
VacuumGripper(const std::string &franka_address)franka::VacuumGripperexplicit
VacuumGripper(VacuumGripper &&vacuum_gripper) noexceptfranka::VacuumGripper
~VacuumGripper() noexceptfranka::VacuumGripper
+ + + + diff --git a/classfranka_1_1VacuumGripper.html b/classfranka_1_1VacuumGripper.html new file mode 100644 index 00000000..04ae0803 --- /dev/null +++ b/classfranka_1_1VacuumGripper.html @@ -0,0 +1,438 @@ + + + + + + + +Project: franka::VacuumGripper Class Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
franka::VacuumGripper Class Reference
+
+
+ +

Maintains a network connection to the vacuum gripper, provides the current vacuum gripper state, and allows the execution of commands. + More...

+ +

#include <vacuum_gripper.h>

+ + + + + + + + +

+Public Types

enum class  ProductionSetupProfile { kP0 +, kP1 +, kP2 +, kP3 + }
 Vacuum production setup profile.
 
+using ServerVersion = uint16_t
 Version of the vacuum gripper server.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 VacuumGripper (const std::string &franka_address)
 Establishes a connection with a vacuum gripper connected to a robot. More...
 
 VacuumGripper (VacuumGripper &&vacuum_gripper) noexcept
 Move-constructs a new VacuumGripper instance. More...
 
VacuumGripperoperator= (VacuumGripper &&vacuum_gripper) noexcept
 Move-assigns this VacuumGripper from another VacuumGripper instance. More...
 
~VacuumGripper () noexcept
 Closes the connection.
 
bool vacuum (uint8_t vacuum, std::chrono::milliseconds timeout, ProductionSetupProfile profile=ProductionSetupProfile::kP0) const
 Vacuums an object. More...
 
bool dropOff (std::chrono::milliseconds timeout) const
 Drops the grasped object off. More...
 
bool stop () const
 Stops a currently running vacuum gripper vacuum or drop off operation. More...
 
VacuumGripperState readOnce () const
 Waits for a vacuum gripper state update and returns it. More...
 
ServerVersion serverVersion () const noexcept
 Returns the software version reported by the connected server. More...
 
+

Detailed Description

+

Maintains a network connection to the vacuum gripper, provides the current vacuum gripper state, and allows the execution of commands.

+
Note
The members of this class are threadsafe.
+
Examples
vacuum_object.cpp.
+
+

Constructor & Destructor Documentation

+ +

◆ VacuumGripper() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
franka::VacuumGripper::VacuumGripper (const std::string & franka_address)
+
+explicit
+
+ +

Establishes a connection with a vacuum gripper connected to a robot.

+
Parameters
+ + +
[in]franka_addressIP/hostname of the robot the vacuum gripper is connected to.
+
+
+
Exceptions
+ + + +
NetworkExceptionif the connection is unsuccessful.
IncompatibleVersionExceptionif this version of libfranka is not supported.
+
+
+ +
+
+ +

◆ VacuumGripper() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
franka::VacuumGripper::VacuumGripper (VacuumGripper && vacuum_gripper)
+
+noexcept
+
+ +

Move-constructs a new VacuumGripper instance.

+
Parameters
+ + +
[in]vacuum_gripperOther VacuumGripper instance.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ dropOff()

+ +
+
+ + + + + + + + +
bool franka::VacuumGripper::dropOff (std::chrono::milliseconds timeout) const
+
+ +

Drops the grasped object off.

+
Parameters
+ + +
[in]timeoutDropoff timeout. Unit: \([ms]\).
+
+
+
Returns
True if command was successful, false otherwise.
+
Exceptions
+ + + +
CommandExceptionif an error occurred.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+
Examples
vacuum_object.cpp.
+
+ +
+
+ +

◆ operator=()

+ +
+
+ + + + + +
+ + + + + + + + +
VacuumGripper& franka::VacuumGripper::operator= (VacuumGripper && vacuum_gripper)
+
+noexcept
+
+ +

Move-assigns this VacuumGripper from another VacuumGripper instance.

+
Parameters
+ + +
[in]vacuum_gripperOther VacuumGripper instance.
+
+
+
Returns
Model instance.
+ +
+
+ +

◆ readOnce()

+ +
+
+ + + + + + + +
VacuumGripperState franka::VacuumGripper::readOnce () const
+
+ +

Waits for a vacuum gripper state update and returns it.

+
Returns
Current vacuum gripper state.
+
Exceptions
+ + + +
NetworkExceptionif the connection is lost, e.g. after a timeout.
InvalidOperationExceptionif another readOnce is already running.
+
+
+
Examples
vacuum_object.cpp.
+
+ +
+
+ +

◆ serverVersion()

+ +
+
+ + + + + +
+ + + + + + + +
ServerVersion franka::VacuumGripper::serverVersion () const
+
+noexcept
+
+ +

Returns the software version reported by the connected server.

+
Returns
Software version of the connected server.
+ +
+
+ +

◆ stop()

+ +
+
+ + + + + + + +
bool franka::VacuumGripper::stop () const
+
+ +

Stops a currently running vacuum gripper vacuum or drop off operation.

+
Returns
True if command was successful, false otherwise.
+
Exceptions
+ + + +
CommandExceptionif an error occurred.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+
Examples
vacuum_object.cpp.
+
+ +
+
+ +

◆ vacuum()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool franka::VacuumGripper::vacuum (uint8_t vacuum,
std::chrono::milliseconds timeout,
ProductionSetupProfile profile = ProductionSetupProfile::kP0 
) const
+
+ +

Vacuums an object.

+
Parameters
+ + + + +
[in]vacuumSetpoint for control mode. Unit: \([10*mbar]\).
[in]timeoutVacuum timeout. Unit: \([ms]\).
[in]profileProduction setup profile P0 to P3. Default: P0.
+
+
+
Returns
True if the vacuum has been established, false otherwise.
+
Exceptions
+ + + +
CommandExceptionif an error occurred.
NetworkExceptionif the connection is lost, e.g. after a timeout.
+
+
+
Examples
vacuum_object.cpp.
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/closed.png b/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/communication_test_8cpp-example.html b/communication_test_8cpp-example.html new file mode 100644 index 00000000..358cec13 --- /dev/null +++ b/communication_test_8cpp-example.html @@ -0,0 +1,226 @@ + + + + + + + +Project: communication_test.cpp + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
communication_test.cpp
+
+
+

An example indicating the network performance.

Warning
Before executing this example, make sure there is enough space in front of the robot.
+
// Copyright (c) 2023 Franka Robotics GmbH
+
// Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
#include <chrono>
+
#include <iostream>
+
#include <thread>
+
+ + + + +
#include <franka/robot.h>
+
+ +
+
int main(int argc, char** argv) {
+
if (argc != 2) {
+
std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
+
return -1;
+
}
+
+
uint64_t counter = 0;
+
double avg_success_rate = 0.0;
+
double min_success_rate = 1.0;
+
double max_success_rate = 0.0;
+
uint64_t time = 0;
+
std::cout.precision(2);
+
std::cout << std::fixed;
+
+
try {
+
franka::Robot robot(argv[1]);
+ +
+
// First move the robot to a suitable joint configuration
+
std::array<double, 7> q_goal = {{0, -M_PI_4, 0, -3 * M_PI_4, 0, M_PI_2, M_PI_4}};
+
MotionGenerator motion_generator(0.5, q_goal);
+
std::cout << "WARNING: This example will move the robot! "
+
<< "Please make sure to have the user stop button at hand!" << std::endl
+
<< "Press Enter to continue..." << std::endl;
+
std::cin.ignore();
+
robot.control(motion_generator);
+
std::cout << "Finished moving to initial joint configuration." << std::endl << std::endl;
+
std::cout << "Starting communication test." << std::endl;
+
+ +
{{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
+
{{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
+
{{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}},
+
{{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}});
+
+
franka::Torques zero_torques{{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}};
+
auto rw_interface = robot.startTorqueControl();
+
+
franka::RobotState robot_state;
+ +
+
while (!zero_torques.motion_finished) {
+
std::tie(robot_state, period) = rw_interface->readOnce();
+
+
time += period.toMSec();
+
if (time == 0.0) {
+
rw_interface->writeOnce(zero_torques);
+
continue;
+
}
+
counter++;
+
+
if (counter % 100 == 0) {
+
std::cout << "#" << counter
+
<< " Current success rate: " << robot_state.control_command_success_rate
+
<< std::endl;
+
}
+
std::this_thread::sleep_for(std::chrono::microseconds(100));
+
+
avg_success_rate += robot_state.control_command_success_rate;
+
if (robot_state.control_command_success_rate > max_success_rate) {
+
max_success_rate = robot_state.control_command_success_rate;
+
}
+
if (robot_state.control_command_success_rate < min_success_rate) {
+
min_success_rate = robot_state.control_command_success_rate;
+
}
+
+
if (time >= 10000) {
+
std::cout << std::endl << "Finished test, shutting down example" << std::endl;
+
zero_torques.motion_finished = true;
+
}
+
// Sending zero torques - if EE is configured correctly, robot should not move
+
rw_interface->writeOnce(zero_torques);
+
}
+
} catch (const franka::Exception& e) {
+
std::cout << e.what() << std::endl;
+
return -1;
+
}
+
+
avg_success_rate = avg_success_rate / counter;
+
+
std::cout << std::endl
+
<< std::endl
+
<< "#######################################################" << std::endl;
+
uint64_t lost_robot_states = time - counter;
+
if (lost_robot_states > 0) {
+
std::cout << "The control loop did not get executed " << lost_robot_states << " times in the"
+
<< std::endl
+
<< "last " << time << " milliseconds! (lost " << lost_robot_states << " robot states)"
+
<< std::endl
+
<< std::endl;
+
}
+
+
std::cout << "Control command success rate of " << counter << " samples: " << std::endl;
+
std::cout << "Max: " << max_success_rate << std::endl;
+
std::cout << "Avg: " << avg_success_rate << std::endl;
+
std::cout << "Min: " << min_success_rate << std::endl;
+
+
if (avg_success_rate < 0.90) {
+
std::cout << std::endl
+
<< "WARNING: THIS SETUP IS PROBABLY NOT SUFFICIENT FOR FCI!" << std::endl;
+
std::cout << "PLEASE TRY OUT A DIFFERENT PC / NIC" << std::endl;
+
} else if (avg_success_rate < 0.95) {
+
std::cout << std::endl << "WARNING: MANY PACKETS GOT LOST!" << std::endl;
+
std::cout << "PLEASE INSPECT YOUR SETUP AND FOLLOW ADVICE ON" << std::endl
+
<< "https://frankaemika.github.io/docs/troubleshooting.html" << std::endl;
+
}
+
std::cout << "#######################################################" << std::endl << std::endl;
+
+
return 0;
+
}
+
Implements the ActiveControlBase abstract class.
+
Contains the franka::ActiveTorqueControl type.
+
An example showing how to generate a joint pose motion to a goal position.
Definition: examples_common.h:31
+
Represents a duration with millisecond resolution.
Definition: duration.h:19
+
uint64_t toMSec() const noexcept
Returns the stored duration in .
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
void control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
Starts a control loop for sending joint-level torque commands.
+
void setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds_acceleration, const std::array< double, 7 > &upper_torque_thresholds_acceleration, const std::array< double, 7 > &lower_torque_thresholds_nominal, const std::array< double, 7 > &upper_torque_thresholds_nominal, const std::array< double, 6 > &lower_force_thresholds_acceleration, const std::array< double, 6 > &upper_force_thresholds_acceleration, const std::array< double, 6 > &lower_force_thresholds_nominal, const std::array< double, 6 > &upper_force_thresholds_nominal)
Changes the collision behavior.
+
virtual std::unique_ptr< ActiveControlBase > startTorqueControl()
Starts a new torque controller.
+
Stores joint-level torque commands without gravity and friction.
Definition: control_types.h:45
+
Contains the franka::Duration type.
+
Contains common types and functions for the examples.
+
void setDefaultBehavior(franka::Robot &robot)
Sets a default collision behavior, joint impedance and Cartesian impedance.
Definition: examples_common.cpp:12
+
Contains exception definitions.
+
Contains the franka::Robot type.
+
Base class for all exceptions used by libfranka.
Definition: exception.h:20
+
Describes the robot state.
Definition: robot_state.h:34
+
double control_command_success_rate
Percentage of the last 100 control commands that were successfully received by the robot.
Definition: robot_state.h:388
+
+ + + + diff --git a/control__tools_8h.html b/control__tools_8h.html new file mode 100644 index 00000000..7394e245 --- /dev/null +++ b/control__tools_8h.html @@ -0,0 +1,369 @@ + + + + + + + +Project: include/franka/control_tools.h File Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
control_tools.h File Reference
+
+
+ +

Contains helper functions for writing control loops. +More...

+
#include <algorithm>
+#include <array>
+#include <cmath>
+#include <stdexcept>
+#include <string>
+
+Include dependency graph for control_tools.h:
+
+
+ + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

bool franka::isValidElbow (const std::array< double, 2 > &elbow) noexcept
 Determines whether the given elbow configuration is valid or not. More...
 
bool franka::isHomogeneousTransformation (const std::array< double, 16 > &transform) noexcept
 Determines whether the given array represents a valid homogeneous transformation matrix. More...
 
bool franka::hasRealtimeKernel ()
 Determines whether the current OS kernel is a realtime kernel. More...
 
bool franka::setCurrentThreadToHighestSchedulerPriority (std::string *error_message)
 Sets the current thread to the highest possible scheduler priority. More...
 
template<size_t N>
void franka::checkFinite (const std::array< double, N > &array)
 Checks if all elements of an array of the size N have a finite value. More...
 
void franka::checkMatrix (const std::array< double, 16 > &transform)
 Checks if all elements of the transformation matrix are finite and if it is a homogeneous transformation. More...
 
void franka::checkElbow (const std::array< double, 2 > &elbow)
 Checks if all elements of the elbow vector are finite and if the elbow configuration is valid. More...
 
+

Detailed Description

+

Contains helper functions for writing control loops.

+

Function Documentation

+ +

◆ checkElbow()

+ +
+
+ + + + + +
+ + + + + + + + +
void franka::checkElbow (const std::array< double, 2 > & elbow)
+
+inline
+
+ +

Checks if all elements of the elbow vector are finite and if the elbow configuration is valid.

+
Parameters
+ + +
elbowthe elbow vector to check
+
+
+ +
+
+ +

◆ checkFinite()

+ +
+
+
+template<size_t N>
+ + + + + +
+ + + + + + + + +
void franka::checkFinite (const std::array< double, N > & array)
+
+inline
+
+ +

Checks if all elements of an array of the size N have a finite value.

+
Template Parameters
+ + +
Nthe size of the array
+
+
+
Parameters
+ + +
arraythe array to be checked
+
+
+ +
+
+ +

◆ checkMatrix()

+ +
+
+ + + + + +
+ + + + + + + + +
void franka::checkMatrix (const std::array< double, 16 > & transform)
+
+inline
+
+ +

Checks if all elements of the transformation matrix are finite and if it is a homogeneous transformation.

+
Parameters
+ + +
transformthe transformation matrix to check
+
+
+ +
+
+ +

◆ hasRealtimeKernel()

+ +
+
+ + + + + + + +
bool franka::hasRealtimeKernel ()
+
+ +

Determines whether the current OS kernel is a realtime kernel.

+

On Linux, this checks for the existence of /sys/kernel/realtime. On Windows, this always returns true.

+
Returns
True if running a realtime kernel, false otherwise.
+ +
+
+ +

◆ isHomogeneousTransformation()

+ +
+
+ + + + + +
+ + + + + + + + +
bool franka::isHomogeneousTransformation (const std::array< double, 16 > & transform)
+
+inlinenoexcept
+
+ +

Determines whether the given array represents a valid homogeneous transformation matrix.

+
Parameters
+ + +
[in]transform4x4 matrix in column-major format.
+
+
+
Returns
True if the array represents a homogeneous transformation matrix, otherwise false.
+ +
+
+ +

◆ isValidElbow()

+ +
+
+ + + + + +
+ + + + + + + + +
bool franka::isValidElbow (const std::array< double, 2 > & elbow)
+
+inlinenoexcept
+
+ +

Determines whether the given elbow configuration is valid or not.

+
Parameters
+ + +
[in]elbowElbow configuration.
+
+
+
Returns
True if valid, otherwise false.
+ +
+
+ +

◆ setCurrentThreadToHighestSchedulerPriority()

+ +
+
+ + + + + + + + +
bool franka::setCurrentThreadToHighestSchedulerPriority (std::string * error_message)
+
+ +

Sets the current thread to the highest possible scheduler priority.

+
Parameters
+ + +
[out]error_messageContains an error message if the scheduler priority cannot be set successfully.
+
+
+
Returns
True if successful, false otherwise.
+ +
+
+
+ + + + diff --git a/control__tools_8h__incl.map b/control__tools_8h__incl.map new file mode 100644 index 00000000..6d2c9291 --- /dev/null +++ b/control__tools_8h__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/control__tools_8h__incl.md5 b/control__tools_8h__incl.md5 new file mode 100644 index 00000000..c874c351 --- /dev/null +++ b/control__tools_8h__incl.md5 @@ -0,0 +1 @@ +5141d7f3d139d959e1417dbec33a0159 \ No newline at end of file diff --git a/control__tools_8h__incl.png b/control__tools_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..817cdd5639f02f2daa7245d1000a371ae821966b GIT binary patch literal 10328 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 literal 0 HcmV?d00001 diff --git a/control__tools_8h_source.html b/control__tools_8h_source.html new file mode 100644 index 00000000..7ea63d9a --- /dev/null +++ b/control__tools_8h_source.html @@ -0,0 +1,164 @@ + + + + + + + +Project: include/franka/control_tools.h Source File + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
control_tools.h
+
+
+Go to the documentation of this file.
1 // Copyright (c) 2023 Franka Robotics GmbH
+
2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
3 #pragma once
+
4 
+
5 #include <algorithm>
+
6 #include <array>
+
7 #include <cmath>
+
8 #include <stdexcept>
+
9 #include <string>
+
10 
+
16 namespace franka {
+
17 
+
25 inline bool isValidElbow(const std::array<double, 2>& elbow) noexcept {
+
26  return elbow[1] == -1.0 || elbow[1] == 1.0;
+
27 }
+
28 
+
36 inline bool isHomogeneousTransformation(const std::array<double, 16>& transform) noexcept {
+
37  constexpr double kOrthonormalThreshold = 1e-5;
+
38 
+
39  if (transform[3] != 0.0 || transform[7] != 0.0 || transform[11] != 0.0 || transform[15] != 1.0) {
+
40  return false;
+
41  }
+
42  for (size_t j = 0; j < 3; ++j) { // i..column
+
43  if (std::abs(std::sqrt(std::pow(transform[j * 4 + 0], 2) + std::pow(transform[j * 4 + 1], 2) +
+
44  std::pow(transform[j * 4 + 2], 2)) -
+
45  1.0) > kOrthonormalThreshold) {
+
46  return false;
+
47  }
+
48  }
+
49  for (size_t i = 0; i < 3; ++i) { // j..row
+
50  if (std::abs(std::sqrt(std::pow(transform[0 * 4 + i], 2) + std::pow(transform[1 * 4 + i], 2) +
+
51  std::pow(transform[2 * 4 + i], 2)) -
+
52  1.0) > kOrthonormalThreshold) {
+
53  return false;
+
54  }
+
55  }
+
56  return true;
+
57 }
+
58 
+ +
68 
+
77 bool setCurrentThreadToHighestSchedulerPriority(std::string* error_message);
+
78 
+
85 template <size_t N>
+
86 inline void checkFinite(const std::array<double, N>& array) {
+
87  if (!std::all_of(array.begin(), array.end(),
+
88  [](double array_element) { return std::isfinite(array_element); })) {
+
89  throw std::invalid_argument("Commanding value is infinite or NaN.");
+
90  }
+
91 }
+
92 
+
99 inline void checkMatrix(const std::array<double, 16>& transform) {
+
100  checkFinite(transform);
+
101  if (!isHomogeneousTransformation(transform)) {
+
102  throw std::invalid_argument(
+
103  "libfranka: Attempt to set invalid transformation in motion generator. Has to be column "
+
104  "major!");
+
105  }
+
106 }
+
107 
+
113 inline void checkElbow(const std::array<double, 2>& elbow) {
+
114  checkFinite(elbow);
+
115  if (!isValidElbow(elbow)) {
+
116  throw std::invalid_argument(
+
117  "Invalid elbow configuration given! Only +1 or -1 are allowed for the sign of the 4th "
+
118  "joint.");
+
119  }
+
120 }
+
121 
+
122 } // namespace franka
+
bool isValidElbow(const std::array< double, 2 > &elbow) noexcept
Determines whether the given elbow configuration is valid or not.
Definition: control_tools.h:25
+
bool setCurrentThreadToHighestSchedulerPriority(std::string *error_message)
Sets the current thread to the highest possible scheduler priority.
+
void checkFinite(const std::array< double, N > &array)
Checks if all elements of an array of the size N have a finite value.
Definition: control_tools.h:86
+
void checkMatrix(const std::array< double, 16 > &transform)
Checks if all elements of the transformation matrix are finite and if it is a homogeneous transformat...
Definition: control_tools.h:99
+
bool hasRealtimeKernel()
Determines whether the current OS kernel is a realtime kernel.
+
bool isHomogeneousTransformation(const std::array< double, 16 > &transform) noexcept
Determines whether the given array represents a valid homogeneous transformation matrix.
Definition: control_tools.h:36
+
void checkElbow(const std::array< double, 2 > &elbow)
Checks if all elements of the elbow vector are finite and if the elbow configuration is valid.
Definition: control_tools.h:113
+
+ + + + diff --git a/control__types_8h.html b/control__types_8h.html new file mode 100644 index 00000000..e9e453ed --- /dev/null +++ b/control__types_8h.html @@ -0,0 +1,391 @@ + + + + + + + +Project: include/franka/control_types.h File Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
control_types.h File Reference
+
+
+ +

Contains helper types for returning motion generation and joint-level torque commands. +More...

+
#include <array>
+#include <cmath>
+#include <initializer_list>
+
+Include dependency graph for control_types.h:
+
+
+ + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + +

+Classes

struct  franka::Finishable
 Helper type for control and motion generation loops. More...
 
class  franka::Torques
 Stores joint-level torque commands without gravity and friction. More...
 
class  franka::JointPositions
 Stores values for joint position motion generation. More...
 
class  franka::JointVelocities
 Stores values for joint velocity motion generation. More...
 
class  franka::CartesianPose
 Stores values for Cartesian pose motion generation. More...
 
class  franka::CartesianVelocities
 Stores values for Cartesian velocity motion generation. More...
 
+ + + + + + + +

+Enumerations

enum class  franka::ControllerMode { kJointImpedance +, kCartesianImpedance + }
 Available controller modes for a franka::Robot.
 
enum class  franka::RealtimeConfig { kEnforce +, kIgnore + }
 Used to decide whether to enforce realtime mode for a control loop thread. More...
 
+ + + + + + + + + + + + + + + + +

+Functions

Torques franka::MotionFinished (Torques command) noexcept
 Helper method to indicate that a motion should stop after processing the given command. More...
 
JointPositions franka::MotionFinished (JointPositions command) noexcept
 Helper method to indicate that a motion should stop after processing the given command. More...
 
JointVelocities franka::MotionFinished (JointVelocities command) noexcept
 Helper method to indicate that a motion should stop after processing the given command. More...
 
CartesianPose franka::MotionFinished (CartesianPose command) noexcept
 Helper method to indicate that a motion should stop after processing the given command. More...
 
CartesianVelocities franka::MotionFinished (CartesianVelocities command) noexcept
 Helper method to indicate that a motion should stop after processing the given command. More...
 
+

Detailed Description

+

Contains helper types for returning motion generation and joint-level torque commands.

+

Enumeration Type Documentation

+ +

◆ RealtimeConfig

+ +
+
+ + + + + +
+ + + + +
enum franka::RealtimeConfig
+
+strong
+
+ +

Used to decide whether to enforce realtime mode for a control loop thread.

+
See also
Robot::Robot
+ +
+
+

Function Documentation

+ +

◆ MotionFinished() [1/5]

+ +
+
+ + + + + +
+ + + + + + + + +
CartesianPose franka::MotionFinished (CartesianPose command)
+
+inlinenoexcept
+
+ +

Helper method to indicate that a motion should stop after processing the given command.

+
Parameters
+ + +
[in]commandLast command to be executed before the motion terminates.
+
+
+
Returns
Command with motion_finished set to true.
+
See also
Documentation on callbacks
+ +
+
+ +

◆ MotionFinished() [2/5]

+ +
+
+ + + + + +
+ + + + + + + + +
CartesianVelocities franka::MotionFinished (CartesianVelocities command)
+
+inlinenoexcept
+
+ +

Helper method to indicate that a motion should stop after processing the given command.

+
Parameters
+ + +
[in]commandLast command to be executed before the motion terminates.
+
+
+
Returns
Command with motion_finished set to true.
+
See also
Documentation on callbacks
+ +
+
+ +

◆ MotionFinished() [3/5]

+ +
+
+ + + + + +
+ + + + + + + + +
JointPositions franka::MotionFinished (JointPositions command)
+
+inlinenoexcept
+
+ +

Helper method to indicate that a motion should stop after processing the given command.

+
Parameters
+ + +
[in]commandLast command to be executed before the motion terminates.
+
+
+
Returns
Command with motion_finished set to true.
+
See also
Documentation on callbacks
+ +
+
+ +

◆ MotionFinished() [4/5]

+ +
+
+ + + + + +
+ + + + + + + + +
JointVelocities franka::MotionFinished (JointVelocities command)
+
+inlinenoexcept
+
+ +

Helper method to indicate that a motion should stop after processing the given command.

+
Parameters
+ + +
[in]commandLast command to be executed before the motion terminates.
+
+
+
Returns
Command with motion_finished set to true.
+
See also
Documentation on callbacks
+ +
+
+ +

◆ MotionFinished() [5/5]

+ +
+
+ + + + + +
+ + + + + + + + +
Torques franka::MotionFinished (Torques command)
+
+inlinenoexcept
+
+
+
+ + + + diff --git a/control__types_8h__dep__incl.map b/control__types_8h__dep__incl.map new file mode 100644 index 00000000..5a40acb1 --- /dev/null +++ b/control__types_8h__dep__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/control__types_8h__dep__incl.md5 b/control__types_8h__dep__incl.md5 new file mode 100644 index 00000000..29a46de0 --- /dev/null +++ b/control__types_8h__dep__incl.md5 @@ -0,0 +1 @@ +c0026db29db1d1ba723208a8d80a703d \ No newline at end of file diff --git a/control__types_8h__dep__incl.png b/control__types_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..5a5f50923f6b023337bcf9d073af68e4ffa3fd5c GIT binary patch literal 39196 zcmagG1ys~;_&qo(B_SXwEh61WC?!a@(w)*N-57|pfYKq|-HjsMAYCFzhjha}eE<8~ z-Lr9ax)E&!VJb3T+$CvW*@(K#~$S4trM5O)$zwag0)x11B z68y--64KJrO-)Va*$9MRDw6mA$Ej`wQM73B*v(z64yC_k)7RIxGcp>UnBZ&q+hwws z`XYdtg=M@*mp{kvx^-wM;yKlYJAdy%eK9)%VUM}miTSZ@xi6ux;N~%SZ&=yV($dz} zRz>AYNeTOuCfpJ`LE_r2R%$-J*ipvh=Ibkde*XGz-=1q~K4=RHpfHw-fAi)|P;fA5 zWENZ{>GPpGHKG<47P7LzK|$z&Vt@Yr6&FO&g2nMm`2LrLow-hb?v0bvuaS|S?(Xis zK5}l$Uq@Thm6esaNES9Wjb5jF`Rc`5T3R8Yp-D+e$VfV1eV(aVcVHAS#adA&gdt=3e2|1$etgJAwu;itsA4W)xWXVsL8V7v&f`6%A ztk*a^G&EW7YUknc>>X8UX=%P%p;og`V|sdeSeSyEnwp;8-1cn!T_jO>1Iqh|$jGva z3Y|(z0+jb_W_ZNUo;|y`xS+@HzPdd3_V)I)`G9-p{r7{qEivld&B^kexyBbbCSwJf z+Ev!L1O!`FTRuKM?(Xg)|2^P7zkmNOSS7BkTs}Sq3t=TPbSHLUZ6q6Pi;j-|^5x50 zw{E%a%(WS?!;`+gzPE4R-oJkzj87@#H8?s-E@cJBdn6I^>C-238=J%ZePaRN)xp&M z{{ARBMOb_NW}n&VX?_}-4|?_u9*5myV`H72tG{xU@zGy{=|ip$m%8wTg@s?ge$7m1 zWoa2ih4xkE@@OlexOk_=VR5-XX?lQm&{tJozZotgS2^2uzKJ}zjpCV8PO-!)2M*Gj z^Yrn~JR21i4he}&s?zN{ckbN24ga5Ooi}-(clY!VvFTYG8V+q#ZBCS?7vJ0@KUlj3 z)5XO_Mn(qK4ugo5=6;~Fv-9ZaC|Ki-qhnN56do>aX;l@4LEHXfM|f{lhDSzbQk<83W*+ci>E zRb@VEPC;fSq$?^N{pivA(&(nKx$&xlc@hW=I=+!Rv4%fC;U1vE#iPA*0+$^fH7uQQSZu$v zRp#dAhWigedBCEgqC$mcWM($*y#RI&#G`BSx%8N-un-j$ZRDY6VCZs7{PM+Vf4OgX zc=+hZ1xe)BuU}`ANN3^Ul){8WL_0oT3yUR)Ilv8k=8o3aEy?cDv9QQrzm$;p*i;Hm za9Pk;Y_rzPjX?ZXP&z<3Ny*A8=l-G;_8Dvr_iP&&7&vjEyB~OfYTO=TVP|*q^qHUD z#vtiW1NP(XSv)+vjiG)BsDp!pGcAloM%5QDTHoG5_44+HTR=ueHa0R!7WTdB!I~^F zY)#;`bJ>|ACnlz6WSmlb6hho+Tc43Z<1d<9RFp-;`uFeOgU~Ir(OE_2!-;5-3KRr_ z44c*NmJ_TYgd&BIS4~Y#tQfVR*9kidOJN5mIA>UJu$6^HZeAXkFID)d?F=6`ccpT+ z0&d{XprD{&A~sHvU*qH0n3&8=OdG4KCufKG)zz-*>O}sc?w4nW&x?|roty^EpBNe% zLWCwJCg$YiytPKV7qGv#_ex1=qSlcvLTWQVVw=Nb_6WR0Aw}qNsVnNh$`?!?C+O*N zO=l_*N}{TvA(g7+b2Un(bq9e6Llwt<9-5t<{qEhn{QQj|0;avaJxC!##<%F`vfJAw zAjM&0W50OuqJ3XTNXW*f?}cl7zgce*AbB6LY-3 zG5{tp)LC5%sHmujiW-4chQ#~+{rk|65R{sS#F!s_s()44OxyG66o(#sf>1d>IYC25 zFVb(G>*}&NSRJCEptvk{Z3`lJ@ZiDn@-kTC>a@Cf`o?71M#^XX`45KrOa ze0XgHNuBpSm*7pk`i%}w#lA^KPJS2Z_7nre?KC8(n^%eu;@H2b6%-U492{;65W?@? z|I|9DVJ$2W7O-ltg7EnA^(zZAGvrU#zug39c97Z0$jEHx8WP1t>J2{Hq%Tt}f4`%?JE01)o0;wuh4T^z=0QUWc_VxVgD~ z`0(N6<(-eM`# ztBQ&zDDP`scamdcHNs5~A+H=9m_N}H75xFey*<|`TWk#%S%P2FfLzm=^D-SB1A_q{ zeK8J#Wwy?liJyPEyF2eZ64vYFU`^S|%F4vVL|#4=DqcoLMpKiIfq?-SPg1gDyjZ`n zv9Z3cZm!9jl!Qb}Pfvk1Dp$qQ%#7}c_$ydR zRYe6{K?3JzOUv)xI4%+r5>8Ie*_evb(z{q#ne&a#tAh{E+8D60!%2BFX3(C{HO^`G_isYVPgxIYEt4v!X#jLb~% zUevOsk!(dzZ=okooTTueuQIr6?+(X8AatM+y!ma942zG0B+}%aPaE+J2MHGs52^v$ zJ2dpY-Tg%zr0)y%)YR<1Zr)pUlL>K)@aqP1^P`iqj%m$yZ5q`NpP$}h0dk=1ntlf#RnQkun; zK7VL^>2vA(QC>3Ox$z<~I*YTC{r%(KULJE5#;hu} zoHWszOn>a)ObZLuz1>osR9YIb{_e=Mp$r_Pg%!HsVAr4^m!LprbaWS^SRV>`4dSR2 z;k5h>VQ0*vY>$sJ;yEhl@2L35+6R?z8DR}Q-=^K1+n_YoAHz&ctN{Y|(&P?dFbC%= z0ax3vH8qgR@S_$li)LoJ|NX0&uI8GWdWMT6f-@CHPFU}%{f#Uid%P%fdzLhmN=gz{ z(OXbompoK7^)A}Ky!@W^Rk^WWUq*%_DY<20pBk>OYaMOY?jKkXzB}+GBsMlm`k0C)vIH%*U>~f3&2f zUpkE(Wx~3wzFe-fVz8U@T3K9N+oULiAMYUiMEueM>b=g@ym#i#V`E*##Vdn?pedYkapB6$__^9Fuh6euwF!CoAk|~6 zkn3Pqv$M6eE=kqcXwG()vGVB9UblY3i3BD z3bp%UQy7JtE%%p8*z|qa6;2JQijOZyO-+l4 zNDJ$y(bFTQ0vl?5TU|hBVIjZ1I^RCp3c;q7X%8bWbt}zEN~($+o}dVh=u+Y49#~#> z!NvXl`?sp&O5V4~qiQmti=_h#(c%~bH+KiO221l*t>tWziq+NX>FW8--Q1rGCBwsi za&tXTPX=rEzvTzNIeW6O)a8bWB1@}m&u6Wm;Fpv0{P;D*#e5S>Q22n)*@2^`W@~4} z4-^z-Oe})FUX_f@wwHle2!!DCq1FWU_mh)di}e*x=Q;0z*&ur- zmzOhWIb*-0q7;s{p7To2$x%>N-d<=WzhsV!Q9r#n9sl{0?ZE?o2pewh2g=H?xwu9j zaM6}rIZGfAsNi>8L!R^j0ojk~R^$`;OxuDcnbcM>Gn&OMEE+2+_&jxESJ%@fCXszl zlx7-<*s-x~TR%S4)8nB>AtmFCt8-d|k{Yx&YwqS|A53JWkU;Bs@^5h{UHs0St&otc zw6BGYjZ9R(Q$Kw87e>C1Qs!l4WoBvVWArCxWuQ6w%P(oEPqFcg14;Qt)&(@QwEs4) zq3FCo528>|R#GB=aQcjzy0EfxWJbqklu`H2dj{g=aK{cY28Pp(aeYEu+=48;Kizhew)U=01^^uXW#7!NMZQR-_ardw2`++f3=e{?pM>5h}LONB>5T<0A7v zKRNQ%)>w3(MUmQO1_pVQd%9-S*2c%ggogIzenhz+C)Z}gfr>p5o3Xk| zXmV0o$ib+s>~%Tu03O<;=W+WJ-s+t>n^N1Phx~dh)Dh408X2i@${_vZa~mr8h3V2u@ur}Ni8(W>0cKhDFGx#xX zFIn|__99F))x)D*Oe}+vuf(K}#JhbzFi@YIjCHnVH@uXCPA+nAW@c`Ymf>S!BBiaZ ztB^ONvpu`LYc)RMve}!eR8_UH&!0a>eg1s8t}0?ir>X0G(co^myllCtJ$wtHfrBq- zy>__q!*L~;84bDxlKWVuf{fm`<0 zGA}aX;vv1qgtR)*-?_$PnD>27UvW5Qy-QDz$o%VMdrq5^XQ|bA_DWTCF_iTBIi&`Y z2-xcKl2S~vxouGuo1)@tgkg9o3JNuE_1;2jIFhJ>sp;A$T+xGyUswN|YRY)k|d8dLbQ_Dh0xv4yOijDQJ%#3dv*ofb}kYd(JNTk$@ zX!Pq2pjGia*G%9|2qEXcy`{7&CEexf)R31$@4YqUVOzto~M}~I6Y(NMD%bS6*yV-qzrullz{|)L}?U4Wl z@VK+XU*EoUL`E8kh`6Aj1ewzrB@YjuWh<5&84EXgYtt|?vYYj*aB&eZF*!ecc=G91 zOX#;%5xh7#ENn%77iI`U+xak8`#~a{-{SoEvVL$_9ck&LY_s0|6@43ey185q~kHtkry|S_x$HvyPvbvQn5iP24P>74UtIK0_^t>3BgulzCT{iln zmp2E*e*1ZA0au>dxvnO*e9bGWB2U{kZdH6SH2vdO5F_)&T;9Ljzh6~TH-92*^S z$^L$QO1zd|NB-FvYh(;%s0%gW?dmM->anqYJi0$@I#R#JqOmb6Ql6=jY>BPr^p;S>*Uo0<=5Hb(4bH<}z`XGKAC>^k?zJ9&9yQpY4+a1dzKh|NkusNy2A^xl7 zd*PZ~RFdxYx(6LozSp6pH#Rnttes$S5J$rixTO#znklSGY&kuOZ znb&y2J~))Z{Tas|6da=F+d8j3&*RR{l)qh}_!&PR;@VtQHatJ?aB+F%ve{CsZHBfo z;0eq3QblzX9|uP^rT7W^V3-x%)3q?40d404G1!;%Kjql=OUP&S$yF8^horsi~!KjX8J@ zqiH= z4rN!DG!pV;E5#f(BuT~PDDnqQYF#j?@H$-Sami5gjDr)OvS?`J( zU{YV-oNxY=5Kwvf7(AemfM|ScmNeGfs)?X*weA1r!kQat95$DN{IJ<+T;9A zb(Ui!K-P~WlXdE&IUTb^l|ElWIe|2W9T%6muwZe#-MF)v5u1=dIcbp)&)7=!8NvPl zU$B`467EPA>EFLUjXR<>HFML+14bd3$=3E)IC-mcHaGXMNJCtAs{CAC{HCVs(LQX# z5c=hdmxaadW7!Ib3)de=cPkukwXl3!Jr#WU(oR4ijesC?AVr^r4mBW89|G?wahzPE z3(Mbs3mxf_!4v}KR@S{+`(Ll3?dJ3B=6%Q?#6g-E9#1hc%eFC2e@N95?81uRBf}TG zBTntSIqA6a{XKR9Ph4GHe}Jd!IV#+0U|wFkpI-nN^ZmQc%*?hSg`W!a`0M%V$Z)5M z$tD0AO-$qzYZ`w`4cI`XNpk_zDkC z)z+NNt^Kd}M8%PJkG94mB8s7=Ra7jg7msO|7@+7pK{DtR8QQl(5hL*7MGLxr^VJ?`FYe+=6l!JG8~NY!Dnp#$DIFXXWn|bM zt`D}iS6PjZwFaKO1sjUEa&z~g-V^u~=x%13bsxt7Bm45|C-fJ*cBasLR#v&hC*(hU zM$(sfH|i~dofr=DXSV*2^9E};1&hbx$Mg_PvI1W$sQ-;Jvgga&6wr8AURX+=O z_N)_|!VB%Lba&S&hxgfuYQ7T$p@AA3!UqFiP_V7tXQt^gt7tm|gNRH_+%V_wjZ=wS z*VWMzvC)zXlJGjDEiJSjX=&|&yL%pdPfAal`?tT(tiisR;=9~ZGl9T_KK6R?7sHQ* zRz)7`SZIa5rEn1f%b1y&*^Aj;W;@4xa**qDxXzH5x9KV)r>Ll?rbf7h-y9%++!!B! zl#}!0;-dYrEIuYy=1^EG4`im|{QT*SV(35Z=HxIiWb^YZpKvKVzu_DkP5QayhA5#V z`8EW6Z=BrjzfX~0XPvjSy4i@T%FADzdm9rpG#I%wZ=q=n81`xGLC;P)16DP!Y}vezq+af3rMHD&jX1v>jn#5-{z* z5G8}KK+uF+<(J@h$$|MlR|5FoSUCwpJN zekI1ts;YAF>v45**>y8m@IY5b~u{7mv=Jx z$i}*5E@4xTqi9d3+tI@~&_G&C=)ramsrcjE5o z$PXpnfU$_l1A02(!_=c$62My+ZAtNkd3m9G=}#7{FD;Eop{!ghe!ww^j)=uR5+r=c zCVbWzk!d%7R-l#XdFJ#kdh81FZD?rWjmf2J@>g#V-?7341qIr-Z;#|+sq@YsqhMiS zfdeWlD|2v^0tXC4(@2V)rR7wUcm2C}KLA-zN=%fZc@-{U^7=L2{rjuo!1J&ZV@61c z;bf$x{g|54l9Q7Y7k^Ak`?1tZR<;Ld{l7~~5+THfHa5CC7xSdNM#jb0IynTrd3asPg6Qs(i; zCS@hV2^}0tJ3IfqdBb@R!;{R1s2FS67jdkt&SvI*Ue0OG^tC=qOTCAJWj!K5_^C{+Rif~lz~;6OH;fkCaaTTXoH$jrh5tdy*b3>XuhuMKQ$Y_RD!HPqFeO;_8M zoAw!5o4R@ z8~mJ~8lC)h4k;}yESjCx+78y{qUh?~-DeB)EJ?PxZ~IZ(GI%H?x;?X<>3=K7!GZJs z{LfRDP2x+A%bg!(Wt?XzKTc0iFE2Xun%#gc2e3OYFHKnS+OZ)k>toY%clW24?&$v1 zw6xK2anky^pFb-pE8`Vbvr(K;{uJhSUjJ40y61*?-v^o%J`aRbvvr0iX1l4+`4N`L z=bicHkr=@FxZY6-`&@Jm4D9Ir6#(+DI4yhJ;Bql94fUvzf}^gux_CBxNGP2f2r>X( ze4=-nS5IdfzdRMkCT~1=seYXNq-(Ti!}j&#h^HIKeqA+x_SB%ScqIAf_HAo&vcW_Y zomYFpjw*N2(W%jf$HvrDR6evW(8`}}S=@$j`rz;X0E<)W-l;sibiBVgjLdye0KJ$_|q=p!kau3p@rqr(i;-M4JlLFi(gow*=C5gR4yA0!H= z5aawCocHaD=QdXpXapuLTZ#TanCzUIp1zZhPfcBYgtD`{J5q|KJ>1{l{{R(aLmJFg z@bEOWGB$osB?T$qQlywY_WHm+FE3B4)Tj-#C5()WIV$U*tLQY@W8@`_l^YHJt8BV8pO4G2I@{|=0Bfo3@^8(VQ@!HMJ_Y-9J9j z@KI}1Q`+=iqmf1xrO!Lib~X4k4vf3Lgr-Ha{NndLwiXV)+SR*vrJvdV{{Hq(@OTlo z7{6@FkJi>~`2S4XyxNg zK;h+aXxYBcYdfR#>Q%h3Z&OCb(paJPc!6f?zyQD?)J#l0d=KZb-Q7=H1F(xVN=4=5 ztU<#xJ3b-IOz62b{1^%p9FKw`S&wv$PQt__@j-@oLGtB`|Ru$&^=L8Q&R|fJOSm0Pc(EJ-g`@d-@X|X zyV{i!>FLensn+G@CU0-6xo$U%jU8d2xlR1~DH^kcAV$J0oW4vXe6e?y*3fLjy}G;P$!DSO7e9G*5Nbj_wMN7?YNh^Ud0D=8IvHk(Q>8 zF%BP$jfQcWR~^7V0l3v+@cD29i`SZ+kbu1C?dC0FwM6%<6`(J6=6wf7Mm+c!DO~VL zN%=o-U@#Lu0#An;R$F@td@xA%dScipv#bqbOLm%2i9h(CCMB(8WqUs3TMhU?v$lb% zQ+JS7zCSKlgfQT4<-2=F>(#40m+gkXzYU;|XPDB|5ZBYA0DXvw5(g-;5|fgyPgf`n z4HrO6g@l4~Pm-P8Yr=K@j^L+Y4Cn{1_6HJw|6Y0fHk?h@qttA`OIzE97V`kTMQNcT zZDp||veK$pLpvWpZQ?Cv12oWC%>a$Rg^%#NCgzrz=;>)68d^Qs&4z|*Ajxz4kCCl$ z`djD_Q9h)z+7S?p7U_9Q0|E0hklrFhNB6t3 zml_(GoBR9QUh}!%aeJumhY!D_O@T>|1k^@Ml3!B7Hm{g&VOO%sCKxblF@AhR>Llk77qI)<>=b%4mpAjUx6M#qhbhxhSh;~Zkx$lI- ze5--m>50kd>EDynzoi;Y@$qPk&g@*z?xM*puf*6{%MtH=5JbZmz`-4AH#p&l)x(Z_ zawbd?`jHCC)A;b-SgY}B$E~vRa?(AX08(%I72sQob!DGA2iYH5b^~7p5J+gN!w-Mt zmhA~ov1Nb_3JVls6BMB;vzZq0var}tMKP8Wk%YQz>nK<-FwmP5PHD!9{hw1@=#e1f zS2Zn}?!L#%OE|JJS~)66BId-Hf0i-|GM*UO+nAcD%-0?E4LRh+PvtzsnhxIF{P^k9 zyRorbSl_Fi^Vc(^jb0?*R0n8DUd%C%sHpK!2wxol$r*_Ec%k2=1%0As6=X&wC44+@ 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 + + + + + diff --git a/control__types_8h__incl.md5 b/control__types_8h__incl.md5 new file mode 100644 index 00000000..8917aa1e --- /dev/null +++ b/control__types_8h__incl.md5 @@ -0,0 +1 @@ +3a1c47faf01a25ffc032edd4841a146e \ No newline at end of file diff --git a/control__types_8h__incl.png b/control__types_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..850394c80b72dca48e1702d6c54d3f26f3efd403 GIT binary patch literal 7677 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 + + + + + + +Project: include/franka/control_types.h Source File + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
control_types.h
+
+
+Go to the documentation of this file.
1 // Copyright (c) 2023 Franka Robotics GmbH
+
2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
3 #pragma once
+
4 
+
5 #include <array>
+
6 #include <cmath>
+
7 #include <initializer_list>
+
8 
+
14 namespace franka {
+
15 
+
19 enum class ControllerMode { kJointImpedance, kCartesianImpedance };
+
20 
+
26 enum class RealtimeConfig { kEnforce, kIgnore };
+
27 
+
35 struct Finishable {
+
39  bool motion_finished = false;
+
40 };
+
41 
+
45 class Torques : public Finishable {
+
46  public:
+
52  Torques(const std::array<double, 7>& torques) noexcept;
+
53 
+
61  Torques(std::initializer_list<double> torques);
+
62 
+
66  std::array<double, 7> tau_J{}; // NOLINT(readability-identifier-naming)
+
67 };
+
68 
+
72 class JointPositions : public Finishable {
+
73  public:
+
79  JointPositions(const std::array<double, 7>& joint_positions) noexcept;
+
80 
+
88  JointPositions(std::initializer_list<double> joint_positions);
+
89 
+
93  std::array<double, 7> q{};
+
94 };
+
95 
+
99 class JointVelocities : public Finishable {
+
100  public:
+
107  JointVelocities(const std::array<double, 7>& joint_velocities) noexcept;
+
108 
+
116  JointVelocities(std::initializer_list<double> joint_velocities);
+
117 
+
121  std::array<double, 7> dq{};
+
122 };
+
123 
+
127 class CartesianPose : public Finishable {
+
128  public:
+
136  CartesianPose(const std::array<double, 16>& cartesian_pose) noexcept;
+
137 
+
146  CartesianPose(const std::array<double, 16>& cartesian_pose,
+
147  const std::array<double, 2>& elbow) noexcept;
+
148 
+
158  CartesianPose(std::initializer_list<double> cartesian_pose);
+
159 
+
171  CartesianPose(std::initializer_list<double> cartesian_pose, std::initializer_list<double> elbow);
+
172 
+
178  std::array<double, 16> O_T_EE{}; // NOLINT(readability-identifier-naming)
+
179 
+
193  std::array<double, 2> elbow{};
+
194 
+
201  bool hasElbow() const noexcept;
+
202 };
+
203 
+ +
212  public:
+
220  CartesianVelocities(const std::array<double, 6>& cartesian_velocities) noexcept;
+
221 
+
230  CartesianVelocities(const std::array<double, 6>& cartesian_velocities,
+
231  const std::array<double, 2>& elbow) noexcept;
+
232 
+
242  CartesianVelocities(std::initializer_list<double> cartesian_velocities);
+
243 
+
254  CartesianVelocities(std::initializer_list<double> cartesian_velocities,
+
255  std::initializer_list<double> elbow);
+
256 
+
261  std::array<double, 6> O_dP_EE{}; // NOLINT(readability-identifier-naming)
+
262 
+
275  std::array<double, 2> elbow{};
+
276 
+
282  bool hasElbow() const noexcept;
+
283 };
+
284 
+
294 inline Torques MotionFinished(Torques command) noexcept { // NOLINT(readability-identifier-naming)
+
295  command.motion_finished = true;
+
296  return command;
+
297 }
+
298 
+
308 inline JointPositions MotionFinished( // NOLINT(readability-identifier-naming)
+
309  JointPositions command) noexcept {
+
310  command.motion_finished = true;
+
311  return command;
+
312 }
+
313 
+
323 inline JointVelocities MotionFinished( // NOLINT(readability-identifier-naming)
+
324  JointVelocities command) noexcept {
+
325  command.motion_finished = true;
+
326  return command;
+
327 }
+
328 
+
338 inline CartesianPose MotionFinished( // NOLINT(readability-identifier-naming)
+
339  CartesianPose command) noexcept {
+
340  command.motion_finished = true;
+
341  return command;
+
342 }
+
343 
+
353 inline CartesianVelocities MotionFinished( // NOLINT(readability-identifier-naming)
+
354  CartesianVelocities command) noexcept {
+
355  command.motion_finished = true;
+
356  return command;
+
357 }
+
358 
+
359 } // namespace franka
+
Stores values for Cartesian pose motion generation.
Definition: control_types.h:127
+
CartesianPose(const std::array< double, 16 > &cartesian_pose, const std::array< double, 2 > &elbow) noexcept
Creates a new CartesianPose instance.
+
std::array< double, 16 > O_T_EE
Homogeneous transformation , column major, that transforms from the end effector frame to base frame...
Definition: control_types.h:178
+
CartesianPose(const std::array< double, 16 > &cartesian_pose) noexcept
Creates a new CartesianPose instance.
+
bool hasElbow() const noexcept
Determines whether there is a stored elbow configuration.
+
CartesianPose(std::initializer_list< double > cartesian_pose)
Creates a new CartesianPose instance.
+
CartesianPose(std::initializer_list< double > cartesian_pose, std::initializer_list< double > elbow)
Creates a new CartesianPose instance.
+
std::array< double, 2 > elbow
Elbow configuration.
Definition: control_types.h:193
+
Stores values for Cartesian velocity motion generation.
Definition: control_types.h:211
+
CartesianVelocities(std::initializer_list< double > cartesian_velocities)
Creates a new CartesianVelocities instance.
+
bool hasElbow() const noexcept
Determines whether there is a stored elbow configuration.
+
CartesianVelocities(const std::array< double, 6 > &cartesian_velocities) noexcept
Creates a new CartesianVelocities instance.
+
CartesianVelocities(const std::array< double, 6 > &cartesian_velocities, const std::array< double, 2 > &elbow) noexcept
Creates a new CartesianVelocities instance.
+
CartesianVelocities(std::initializer_list< double > cartesian_velocities, std::initializer_list< double > elbow)
Creates a new CartesianVelocities instance.
+
Stores values for joint position motion generation.
Definition: control_types.h:72
+
JointPositions(std::initializer_list< double > joint_positions)
Creates a new JointPositions instance.
+
std::array< double, 7 > q
Desired joint angles in [rad].
Definition: control_types.h:93
+
JointPositions(const std::array< double, 7 > &joint_positions) noexcept
Creates a new JointPositions instance.
+
Stores values for joint velocity motion generation.
Definition: control_types.h:99
+
JointVelocities(const std::array< double, 7 > &joint_velocities) noexcept
Creates a new JointVelocities instance.
+
std::array< double, 7 > dq
Desired joint velocities in .
Definition: control_types.h:121
+
JointVelocities(std::initializer_list< double > joint_velocities)
Creates a new JointVelocities instance.
+
Stores joint-level torque commands without gravity and friction.
Definition: control_types.h:45
+
Torques(const std::array< double, 7 > &torques) noexcept
Creates a new Torques instance.
+
Torques(std::initializer_list< double > torques)
Creates a new Torques instance.
+
std::array< double, 7 > tau_J
Desired torques in [Nm].
Definition: control_types.h:66
+
Torques MotionFinished(Torques command) noexcept
Helper method to indicate that a motion should stop after processing the given command.
Definition: control_types.h:294
+
ControllerMode
Available controller modes for a franka::Robot.
Definition: control_types.h:19
+
RealtimeConfig
Used to decide whether to enforce realtime mode for a control loop thread.
Definition: control_types.h:26
+
Helper type for control and motion generation loops.
Definition: control_types.h:35
+
bool motion_finished
Determines whether to finish a currently running motion.
Definition: control_types.h:39
+
+ + + + diff --git a/dir_000000_000001.html b/dir_000000_000001.html new file mode 100644 index 00000000..92c68046 --- /dev/null +++ b/dir_000000_000001.html @@ -0,0 +1,83 @@ + + + + + + + +Project: examples -> include Relation + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+

examples → include Relation

File in examplesIncludes file in include
cartesian_impedance_control.cppfranka / duration.h
cartesian_impedance_control.cppfranka / exception.h
cartesian_impedance_control.cppfranka / model.h
cartesian_impedance_control.cppfranka / robot.h
communication_test.cppfranka / active_control.h
communication_test.cppfranka / active_torque_control.h
communication_test.cppfranka / duration.h
communication_test.cppfranka / exception.h
communication_test.cppfranka / robot.h
echo_robot_state.cppfranka / exception.h
echo_robot_state.cppfranka / robot.h
examples_common.cppfranka / exception.h
examples_common.cppfranka / robot.h
examples_common.hfranka / control_types.h
examples_common.hfranka / duration.h
examples_common.hfranka / robot.h
examples_common.hfranka / robot_state.h
force_control.cppfranka / duration.h
force_control.cppfranka / exception.h
force_control.cppfranka / model.h
force_control.cppfranka / robot.h
generate_cartesian_pose_motion.cppfranka / exception.h
generate_cartesian_pose_motion.cppfranka / robot.h
generate_cartesian_pose_motion_external_control_loop.cppfranka / active_control.h
generate_cartesian_pose_motion_external_control_loop.cppfranka / active_motion_generator.h
generate_cartesian_pose_motion_external_control_loop.cppfranka / exception.h
generate_cartesian_pose_motion_external_control_loop.cppfranka / robot.h
generate_cartesian_velocity_motion.cppfranka / exception.h
generate_cartesian_velocity_motion.cppfranka / robot.h
generate_cartesian_velocity_motion_external_control_loop.cppfranka / active_control.h
generate_cartesian_velocity_motion_external_control_loop.cppfranka / active_motion_generator.h
generate_cartesian_velocity_motion_external_control_loop.cppfranka / exception.h
generate_cartesian_velocity_motion_external_control_loop.cppfranka / robot.h
generate_consecutive_motions.cppfranka / exception.h
generate_consecutive_motions.cppfranka / robot.h
generate_elbow_motion.cppfranka / exception.h
generate_elbow_motion.cppfranka / robot.h
generate_joint_position_motion.cppfranka / exception.h
generate_joint_position_motion.cppfranka / robot.h
generate_joint_position_motion_external_control_loop.cppfranka / active_control.h
generate_joint_position_motion_external_control_loop.cppfranka / active_motion_generator.h
generate_joint_position_motion_external_control_loop.cppfranka / exception.h
generate_joint_position_motion_external_control_loop.cppfranka / robot.h
generate_joint_velocity_motion.cppfranka / exception.h
generate_joint_velocity_motion.cppfranka / robot.h
generate_joint_velocity_motion_external_control_loop.cppfranka / active_control.h
generate_joint_velocity_motion_external_control_loop.cppfranka / active_motion_generator.h
generate_joint_velocity_motion_external_control_loop.cppfranka / exception.h
generate_joint_velocity_motion_external_control_loop.cppfranka / robot.h
grasp_object.cppfranka / exception.h
grasp_object.cppfranka / gripper.h
joint_impedance_control.cppfranka / duration.h
joint_impedance_control.cppfranka / exception.h
joint_impedance_control.cppfranka / model.h
joint_impedance_control.cppfranka / rate_limiting.h
joint_impedance_control.cppfranka / robot.h
joint_point_to_point_motion.cppfranka / exception.h
joint_point_to_point_motion.cppfranka / robot.h
motion_with_control.cppfranka / exception.h
motion_with_control.cppfranka / robot.h
motion_with_control_external_control_loop.cppfranka / active_control.h
motion_with_control_external_control_loop.cppfranka / active_motion_generator.h
motion_with_control_external_control_loop.cppfranka / exception.h
motion_with_control_external_control_loop.cppfranka / robot.h
print_joint_poses.cppfranka / exception.h
print_joint_poses.cppfranka / model.h
vacuum_object.cppfranka / exception.h
vacuum_object.cppfranka / vacuum_gripper.h
+ + + + diff --git a/dir_5f30c89189ebb3336d6b33aa932838ba.html b/dir_5f30c89189ebb3336d6b33aa932838ba.html new file mode 100644 index 00000000..7439f8c3 --- /dev/null +++ b/dir_5f30c89189ebb3336d6b33aa932838ba.html @@ -0,0 +1,148 @@ + + + + + + + +Project: include/franka Directory Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
franka Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  active_control.h [code]
 Implements the ActiveControlBase abstract class.
 
file  active_control_base.h [code]
 Abstract interface class as the base of the active controllers.
 
file  active_motion_generator.h [code]
 Contains the franka::ActiveMotionGenerator type.
 
file  active_torque_control.h [code]
 Contains the franka::ActiveTorqueControl type.
 
file  control_tools.h [code]
 Contains helper functions for writing control loops.
 
file  control_types.h [code]
 Contains helper types for returning motion generation and joint-level torque commands.
 
file  duration.h [code]
 Contains the franka::Duration type.
 
file  errors.h [code]
 Contains the franka::Errors type.
 
file  exception.h [code]
 Contains exception definitions.
 
file  gripper.h [code]
 Contains the franka::Gripper type.
 
file  gripper_state.h [code]
 Contains the franka::GripperState type.
 
file  log.h [code]
 Contains helper types for logging sent commands and received robot states.
 
file  lowpass_filter.h [code]
 Contains functions for filtering signals with a low-pass filter.
 
file  model.h [code]
 Contains model library types.
 
file  rate_limiting.h [code]
 Contains functions for limiting the rate of torques, Cartesian pose, Cartesian velocity, joint position and joint velocity.
 
file  robot.h [code]
 Contains the franka::Robot type.
 
file  robot_state.h [code]
 Contains the franka::RobotState types.
 
file  vacuum_gripper.h [code]
 Contains the franka::VacuumGripper type.
 
file  vacuum_gripper_state.h [code]
 Contains the franka::VacuumGripperState type.
 
+
+ + + + diff --git a/dir_d28a4824dc47e487b107a5db32ef43c4.html b/dir_d28a4824dc47e487b107a5db32ef43c4.html new file mode 100644 index 00000000..3e1e18de --- /dev/null +++ b/dir_d28a4824dc47e487b107a5db32ef43c4.html @@ -0,0 +1,104 @@ + + + + + + + +Project: examples Directory Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
examples Directory Reference
+
+
+
+Directory dependency graph for examples:
+
+
examples
+ + + + + +
+ + + + + +

+Files

file  examples_common.h [code]
 Contains common types and functions for the examples.
 
+
+ + + + diff --git a/dir_d28a4824dc47e487b107a5db32ef43c4_dep.map b/dir_d28a4824dc47e487b107a5db32ef43c4_dep.map new file mode 100644 index 00000000..e648cc01 --- /dev/null +++ b/dir_d28a4824dc47e487b107a5db32ef43c4_dep.map @@ -0,0 +1,5 @@ + + + + + diff --git a/dir_d28a4824dc47e487b107a5db32ef43c4_dep.md5 b/dir_d28a4824dc47e487b107a5db32ef43c4_dep.md5 new file mode 100644 index 00000000..75b071d8 --- /dev/null +++ b/dir_d28a4824dc47e487b107a5db32ef43c4_dep.md5 @@ -0,0 +1 @@ +ae770c2db1b59990403d9c0cb3895738 \ No newline at end of file diff --git a/dir_d28a4824dc47e487b107a5db32ef43c4_dep.png b/dir_d28a4824dc47e487b107a5db32ef43c4_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..b6ada0bd153491b57f600843888f986dca131acc GIT binary patch literal 3212 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 literal 0 HcmV?d00001 diff --git a/dir_d44c64559bbebec7f509842c48db8b23.html b/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 00000000..370a1246 --- /dev/null +++ b/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,91 @@ + + + + + + + +Project: include Directory Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
include Directory Reference
+
+
+ + +

+Directories

+
+ + + + diff --git a/doc.png b/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 00000000..ffbff022 --- /dev/null +++ b/doxygen.css @@ -0,0 +1,1793 @@ +/* The standard CSS for doxygen 1.9.1 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + border-right: 1px solid #A3B4D7; + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +.contents a.qindexHL:visited { + color: #FFFFFF; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #FFFFFF; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #9CAFD4; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +.DocNodeRTL { + text-align: right; + direction: rtl; +} + +.DocNodeLTR { + text-align: left; + direction: ltr; +} + +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; +} + +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; +} + +tt, code, kbd, samp +{ + display: inline-block; + direction:ltr; +} +/* @end */ + +u { + text-decoration: underline; +} + diff --git a/doxygen.svg b/doxygen.svg new file mode 100644 index 00000000..d42dad52 --- /dev/null +++ b/doxygen.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/duration_8h.html b/duration_8h.html new file mode 100644 index 00000000..44707e44 --- /dev/null +++ b/duration_8h.html @@ -0,0 +1,193 @@ + + + + + + + +Project: include/franka/duration.h File Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
duration.h File Reference
+
+
+ +

Contains the franka::Duration type. +More...

+
#include <chrono>
+#include <cstdint>
+#include <ratio>
+
+Include dependency graph for duration.h:
+
+
+ + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  franka::Duration
 Represents a duration with millisecond resolution. More...
 
+ + + + +

+Functions

Duration franka::operator* (uint64_t lhs, const Duration &rhs) noexcept
 Performs multiplication. More...
 
+

Detailed Description

+

Contains the franka::Duration type.

+

Function Documentation

+ +

◆ operator*()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Duration franka::operator* (uint64_t lhs,
const Durationrhs 
)
+
+noexcept
+
+ +

Performs multiplication.

+
Parameters
+ + + +
[in]lhsLeft-hand side of the multiplication.
[in]rhsRight-hand side of the multiplication.
+
+
+
Returns
Result of the multiplication.
+ +
+
+
+ + + + diff --git a/duration_8h__dep__incl.map b/duration_8h__dep__incl.map new file mode 100644 index 00000000..1b334f46 --- /dev/null +++ b/duration_8h__dep__incl.map @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/duration_8h__dep__incl.md5 b/duration_8h__dep__incl.md5 new file mode 100644 index 00000000..3e14ebbb --- /dev/null +++ b/duration_8h__dep__incl.md5 @@ -0,0 +1 @@ +2419ea66674e4bc3b2d7066dd96a693e \ No newline at end of file diff --git a/duration_8h__dep__incl.png b/duration_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..9de4eabfb71f3c57dd82bb7484acecfa80ec1598 GIT binary patch literal 65546 zcmagGWmMK(_wS2pmCz(gmXI)JQ2HQ>^-R`8Yg5+b##;@%n;&&nUENpCgUY_h z>)?@fUw-A}GBW?uTT#)I>f_e;P!3N<6&3$KAC1Sn1t@pu|9!Fpc^sMl^S_17DYb&DZSrS1XaRTxce`bhMZcS9Z5ypbQRyc>MnaG?SDUXNBXZZ{D z!Gi~CVUp_WO6kHk{rvo}XdY^>tH5RQ0~d+i=?e$YuqlH3(nS=g(NqgIe&t3D)8XOc ztKR+Y^}p`Mv@QLg4>1{``+uJiBRWC^UsddrVrt;^<&NLonX4afm{))0ViFJ%DpWSg z=eDe5`o(65dKn+A4&IH;VOi{mX-!~|>;AZvEQ&^~p+j>Yu9SVj?Z}+Xw)pbRR^-y= zcm?|H+uvszy~=GT9~86}s2Bb^_lHMCH(XGX*68~5^!-4Q7FR*52kTD5K2Bg@pu_RD zo`;7=^VF2?dVJ(t$_gSTrL=IVFr2lAn#41=5D)zdv6h91m5qP>I*{q~ zYGLXh8+Z_Ft2#dSa9djarD7`Y%|_3|U;4Jx0(MjrHTH4M&5weEgR?Y?pQrGcpgpg# z!$x|npwN0e>lf#|(nojq?#*-&_m1I$XGX@xe(R%yC_irFAEH3hR>>6&) zHqnxhka%32@O-=Yt1wmThyokpvHw%RwOUzOx$}4N3&%gbtYoSvTU zmJXNy-r0Ezla#Y91d|jA>HK)7GaR3R+ig=jnoR~0U$@rb zM&O<1zCIjLucJ2j<{k7v{mwh3y}gRwe}6Em6pfsmEXI|)to@Rl?4zu>gDyi8lpSm2 zm^sUw>5ZJL7LmxVWxU*-xVyXC49l$VLCeUR})s1nV2nZA)rOQxT- z%aMQo{w?_GFXPqau|cKvXvx_5>Czizl^j{@&50^ZOH0cW_^nHl-__|#S9f>IM3uGC z%aIU+OORFXL&gKK8G5Ou@WWB${B|9Eg=r>?w!%(_wT&T@tC7akcYd3|-c*FkAdH1?;H)(?x2kkDqjp4h62f?f0Tzjq>L z*Cg5?Th^F5M7X6sT39!sYT^Tjxkr3uCNl2!WpVN;8=oZRBs;YNy(Gt=kdVk2woD7eo2LVJ{O zXI8$+LBm3cGC0oxuSa`&cwr?4zms{azc>RuJu*2tIT8}s zf4VD%Fk0Q!*#?)kj!q+YWn+Hzeuwu;U%F&mz&H877Z`-3q_^sHalE{|woGDUW09Qn z1+1;Dkz{CdR*2nw5D_H#dmB9BUHAs<_e1X!mG@o59b;qK%sdK@9}isFn3x1bM`M9G zTM*VynTom_1m2kg4-S+3&{cB@e)hrV{79xF!JXx3C{MZEW}KHpub$}Mi|XKl0#@J4 zLoF(C--a%?zwfw>kU0&$Mb|m67`I0fmsM5{7i~50kh)^|x5ODe$(-HS`jcsHZH-y= zJf^l*a4Q*ERaJE&1z{R&C^!(0t$zIeO#(r>wNRtT;rhx4Tz;WB07cO6%KO`ffXx_Q z7!I|hygY`niAnj(9+Isu!mjJhLqmiczl)_LC6Tjpa`v`rX4f~1AiQap8{ed7U`R+! zjhL*lUu?w{mv(b|0KUMfSFgTlbe5W$iYJ5r=g%K*K0av&2kxWo=@*+ObjdyC9(%^M zwY7%7KkGbx{Fvp-)`|(|IvJ5GmcrSE)ktATSs8c!$h!BWgM)*AO^v|s61}2E8ROPa zY>Ub2;v*|B)o&*Yn7yg@#K9J2R3AHd~2A=_rRMTmxrUSNnF}xNQdhqt>-&U zaRRg6gd3x!os{+sH>9MbrW#%mg5e3b)*Twz+s8!^G8>P7dAT}X!Ti8>0##hRX@NTU z8a>b-wk7*zPg07QkMNSys}Hs-q|T}cOV)n90&B~y+u(s;+H@rh>FTw;h(Z!a0PJo@ zEOiuIFxzcwLc7dR!VwpdXcJ6PRf%K@g6`0F$K65K{$hGt*nOMBmF1WG6x4s}%O~=fAxyM8vVAQ) zobhN#S^NpLWVuGif6Rg%@#TM?|67`$SyYmiRuA5^!OqTkhDZ1Y*~A2e&)SUL^)Wc7 zdJN=F`d_VYnAd8(j#)W4q75xAQ86(YQr=UxbUo&Dwa8_O2c zu^K*gdf@7+skBV)!h9f()WVP;+YK46^evIn zB>zA%F(HqRMooG5=i>eY5<}zH`%MJ}SREZg;_O7cDXF(#(ro0&S$+IuHMgnTz<4oS z;Nr4sh!I4PM$XGCjf!UW{ksHsF-jNv?lHNgB?Y)+{M(Nb#@T4MZ(BX|DU@*fBKtnA z#}pa$hDuR8X|?i`h_)YZc$TU7VNW#716d-ueA(#e3z1MiY`&RVD668rS=S(&uo01s z=8qP5N6L;hp|W!0vAi&fYA@%TF;iZ`ly?t8Q&UNo{!)a;&EBXIR^8dU`5n*AjW9mN z19fe!o1op$ZiWCOgjQNL=JRI@Q?nT<&EF`d=AFs;jbDt7f1zW9a4k8t`^AML9r%^D zxBK8$owaj0%D2qU(gxka2jRwtLaEP1v!q&x~GvGxCwd3nDJ5lCruccf>enL&KD!1aLguUR>91U{b$PFwV%OH>r<$6` zqeu=zBO>UcqYr3P!3K~M*$Re@jea5a^K1@89=#~F2uZa2%y?uPd*#g@YSw{@Jb`Z~ z#@trJ-0UNQ**Sz|_OrwnyRGEXa?Bula1!OQCGZSwZDaRWNL#0-YPD@~XusWLRt|l{ znLPjJr?TNojV~#LghK-bL-G%O(~zs4=lJMyCQA^>Sn$zPQGMQBFM2w+u@S12KJ`H* zCCS1dmyU@EzbAR8)4oYBM3?hX?k}R+k~`>-M9|Q1eQ#!DDD57&NKe;Sb@Mz2k0>lb z$X;TJ++TCEemjdNdxkb+4ps!b8Kd(6Hh$eOa)3JR309cut^{ zUXP7}LjL8;uSM?cF?P{+7*9xB;Oo2h+VoM$;KV|6!?7O zh>>lBa2FIOentJ{3Ar!>ntxiLE2Y4IS6baid!wzg31cj|YK+yax62^F8lFnXFHqRlu$NF(naShDq{)dl$@-Bn7*kdSU8 zOi3mGpiy+TyYC!ST1wf_kXB~Y%JW&@2Yr0Jzr>A_tjoxPrSn&=y>VN(TQ12^@a;** zxn@@~if-4VWZG24=2^dfiJ?!i?K8@=-!>eVF7RYTOVo;Qq?+nH6EPJ(oyUR4NuN)U$+aC@4ZzhIP?yoz1 zeA`WoVg&LpvFv7|r6naPu&_)WT&qI9eifaX+ML_cBQ1VDB3JzU&+=g-lu;OyUDg3&f$&dB885BuIMNB zKV7Bd|H58zOooW{-rzm?-JS<5H&^;+W#FMZ<7Qi6-M9q=WP6hOJhrMntNvXS#RF|nBvM2?{tPn1}yKiaH|PQCBf=boy_WO(|whTBR#jG$_|YC|48Z0SYx z*5-JKgJU_X>epBIbpDD!UGd0#*dII%)Y;=FKicGI58K1>x7d1BPA?#~I4sJdKCf|O zt?*&I`*QARD@<5xMM`QhOVb(xZD2$kex2`<@^USSmaahP3dnUX_)VeE^Cv zY$(sUq;R%@{C1u0qc=<;xPDwEUdIcnH6{F5SlxL}Cu>7=WFl^qzlJJYA{&1!^VZf5 zckC_hD-iWee|6m5KYuv;GBlL8H|?!VP3)-M-1}J`_ziH0z-E z0LRwAMrgQUNl9ae0}DK*OwEN~x!k5^g)X5@?(4&37$FhEMoD8cjmbRjCE_z4t%MZV z4yyxC)7eLxuFhznMpMbIZo2r3_q$a5`5d>mxw&H`Lk}ken1n{w4YTjLqbOddFO*U&|hZm?bCjv^1-h zpFj2A57gMKVS%nLXk|jE{bo@6Y>BnCrn(Jekr0Jqscy^K*wBA2zBlmAN9yFP{)0kt z2l1ByohLTao)ij67qL7h-cb0y@9I|jV9<0}>&i|Mh}5tbN?L70uCs77S*;fu9?l$6 z;=I%~MW9jG-@nsj(EgTHe7?Bmxk+p2yl@XM@0W6jvnPMvFRqRcQL<}d8MhxAdwxTo zIo!a-BRw|8e<&c}Ra-aSIz6qw5Dvolu>rz}C81nyNo1cFZk>&Z!QSm==bW&dfR!&) zpXaQ49wZax+g_qaT4pnjlzu+CxbS-KY{P&aa@9)TJ+{4pzt*EPS?2xxAtfddKu`A4 z%RC%23APx-4SZjr6EeAQIuJ>NcT|{N27cxshHQ?m?>AjBe56Nxm+6zJ!01H(um?4r&}Cx*?2`IP!V1gvvmLKzMkp{_p7)|M7B8XDItcK_u2 zQ{QwdJT;DXV&DnCAfE7bkI2)>wIO*%rca2dAtr{65E6FN@0w?3h>WkyE;33ER3q*G9Dx`K9D&Wfpdb}tqByiTEeQ+~9=mfqkOK$m zU46E8-MP5(FhoVQEioa+&$l*($mV=6(IcE+Kl?jWMy!=CTmgyb@xj()!_=`}d}rJ< zZoeyis)rtgtzqYLi*d82E!s*>QFE+`JSuF?p_2x61hLG@YByGA1a=@9{d_+f6cdx% zrV3pZji(3$>Mc;GK)tnr<2Py{&1ZXN^RBwuR7R|F;O{MS+v2XYTx4^7Jo0;AX7_D3*;LatS#yP{SRPWww4eB- zMiJLMM5})_92?=Qu%=95S4xCh7^*x4HEp9M$a>2=raO>T6hj zJHrKz0sGF+VmED|do>etd0uL?HDQEMt7>5%HBt%O@2p_P)B2(}|6M+xUtSJ(-3V1s z8;;YD1@ARo8oI`qTV_1CzVf1tqsc|`C`Z??FgrA~?m?KbdLyEvirn7Gyx0<=f{M!G zcwoV8Y)qh9lq4kVVu5O4AmFk+MW&?0pNmuR3xcB2-z926S2olaHLPvl-I zOgV>u9z8qIt9523!6ZHE7%TtA5vqA}=^nz5=@}XG>P6$<^sW#!SBx?pa0JRh9wCS2 z{Uxv5-y(h;Y#rA0-;5VU(uYXb-agZFYip>f(X_Eq?5wOP4066KQ#V0L;!@0z6H6rp;BB?N66o~EyzNx`yht>+zY5|3k z3ph(eO1h0__TKwH9S>ILV-neKebBr|B3PuP&W0^1wdfK#ck`CGw3XE-CH#l($7%CN zAWc`if}y3r2kli2T`Mc568*+F&=Qf|5I?y2`6V}gAI`5NJ8Mk$^h6woCIx_^;&E9u z)7D8{NH$<<>FbkUkH^r^AUM`d<_t0V(`x_?@Bob>w8a>KhL1QAj7i7ePALWG|Dzt6 zQNWBcYTWh4##tF-Q^LbpZo$j4{W+cAA>|B)(g|8oPrzp;t4l!V#0w9zK`ZMP8PCEC z$a^N|M~;cv6TTV>Q#bBFyzfc6j7S&h&r#0&qg`c%_xW@0N1Q0O_$gB{_mY3NTv6hX zRt-)}BnKVtLU1M=?jG+}toAqt923Iz@Jm+@&Da<{EXi^<;_V7RZlU!W=%M2D!6 z2l-vy?i|W1i0^sn;8a*}f7Bavb6ItDys!RlJWjbI1oHzry2`>>`HS#arAJU~tqy!hc%WMP zq9$qB=$Es!YFl0=O|!skT5~7uaVyB2k2nQwh0nla8r;6R={5h#^~s#E86k)TSQ`@38nK^=4%X$& zdP3NF9ofwa*w%S46mgb$giMBFeDaW|P0;_h0m z#%LRL*XjAid>9gk!8clHF2IOGP*=|u+^6uv1;hw6SvpZs_E~xl=$LSPc`U7t4bh%W zs=WM(ppP)BT-+a`MCf`;ZB39^jF!+r(1lJ6je|ozookA^qK*!m;=4)|ux^{l2i4t* z_cYT9k9Fzjc%W-ax;+)qo+eak@^`6(>QM4^&%Z$bsGv91`l>t8;o+;-7<29Ce_m8N z$Zky_;=Otz;?6RbmO8ag%j3Jp5J?P;jl;F{9S4<${wyz}N*L0s=;Y>^8y&3DIzWZG zIl+%#{9FhEVu8^@hE(n^!=5BU?W*-V(3Uj(`OYZ+S(rhYYWu!7{=-~eG$>fnb~#er zoqJNP#a7HkGW;MEvO*~2f}-;d3yVAmSIBSqBNQHbxww*+~CQh`*5D^I(Hd13%P*iN)ou8%W z{d*g6Hz)_edWU%&{Z!39VIXw+thY0jUOit&vH{NWtbm3v_!~M->@WR9TT(hmw@1n44;mF3(=&OZEAE^Cb^vd#b zFv!J^pjYxIj2Dy+s30!Q&85xngyG(rhrNgHI`luPT4#N{DVhgVIH6sM11&>tk6nQQ z3+c`A`{c2)ASMcWxgEK5!Ap|vofC?Y&RRrnT4Kldup1xQfmdF z2x z80R#y^&{d?duv;IAtN;Y4GllKy{lG8Zi!DV_(gs-Q|D}={rufyYBmk-gan}{UvqPB zUtBV4z5hsUxS+50-%yWeyL^12$8A4D$<4b!6fgbgN@h1Oh?bt8|5+Y-##gUChjY#1 zb*&=b%qO`@{tD)}%l%^abnP4j-ip^MAy7!&V06HW{A< zAyH)7$3|#r9L^_1ocD}>J?16hydZYn_}y}L*a|9|1*ROtnltBr?5D!ps;qJGXfv@8 zMgy8&2%7<4!wdHFm;8T9?1}juXks?Ewc(XEEM%vD`U#rorqg4t7E+$~8WpXvzJ5v`JqLLhK@1zKCG3n#=8&hq1giq>j*B2uTEC z5Vj7c(UL`)he8+W@_HU83|M5l{8ZG|3oDt-n&-wLaGy;1-0w;En9Hn2B%oW`{Eoj> z+d3#8D_iYX!`B{H19C#?3Ylp~xn2M<)uOHQHcTP!NYks^{|A^POtUgP%xokpeZoVJkWq^{PA-EpDM{$oM5;VqeV z7}@y;pa`@;rtmsa?_b|b)cNYR<#F`^5$(^)Dk=ig(}^M3SH?l>2j(*@sGt+Lxe@JN zn^|Ak7pVPXwPJ8#BDnCn@%U5v!Us_F@R)W9aC65S9dADwvCD9yr|-@LMULnnLW9JT zRzbO6(!qfb#vj~fy|TA+80e7&>p1W=Frnr&9LRc#Cj;|}g0k{*5a1vyn-N`-!o>SC zJ~g7l>!t;*blFz1T8LJz7Zm$JXtvUB)fDGPPeanvCD-Gj?+_k-pt)93dwz0a2qW&h zGh$3kFvy!5%#pi0AtoY1$siXSoSS?1p{S?=m7MB30sB~hZIX1(rAOL9+mb<7h4;S3 z$>C@Ly#H%q#=>BaZB|+}unBtOYbohRLU*^hCg;@|{Vw)yA?Eg7U5`=G(B!F=QVZlu z$u$h12Tmq-@q!V$Ry#ASWi{r%^wZUIeLvTyd4(5Z9EnS-PjugPY;u@K?uen(qWQ{p z-_FhshV>6i^uC5x+fKH07cMX()$t@tYk2(3_w4EF>VS?6KKUtX(*^JCe;F~NTSsHH zvv9I*64!AQb+>0B!a&es(9=H zo^<^DRb2pkaJ>0}09ybQvx@s3icRUV?b^+Cb)jDY+*8ZwC@Dq=GQb#Z;}zzI`uf9; zeOzeSuT_fpQy$ndbLwNYZco1%s4U1Crc03a*iJZ_dSl@2=;-KizEuNE3#N#ONHmoY zfpW&fK}!Zf!P;i$Cq|RF)WSqsCA!~N2XpAqk-fdW|N7`lF9%%4xm@-m5VLF<%=DMX z+tWe1oN^u>f=EQ;`bMR4s+~>w%Rk=>bONOYvmi|PAl8eNOTTS>q-cI=36-6lT``6G z21N|htclb}inij_)s?ZMfHja4C)4h;mVWlXKc{M!>Wl6HW@Bt+RaonN>NNQKx8|?~ zUp7mm@$5IB_E>6>NSM7Z0E*HMuN@BDSAWetIXSt#t^|gOSwLr`kq|$W0Y<^Vz+kVq zW`@AT#H9VJ`%Yx>iyD#};d^^~h>O8awbO`th68J4Y;2q@Xx>LvE)zwP{k-^h_1ek` z^VRJ2WhP5xwxH{}y5mAygm8Z;KuFn*jg1~hn>wnwYHJ+N3e*=yinQ8cQz9YU{5mJ& zv;M7kv6h$Fwz_Ij4vBgJsH6kC^V1X&m(@Es)WYh~QBi~dZL|ZMu}T$mvCzN6U!+s< z$z!4IHc&yTy5+_p`6?`Jz{fNuk-DZ~iiC!+{y0x4@{f#OGpvkyDL$p0VpJflYFXLoRy*4nQ^){`s zx{vu=FRHBW+D%qJ<%n4L)|BsQbp7nrStej#;Q(bVG+m2{WFinRXd~(wc%)-km6na> zGkOfEsv0p4wa~9rG=#>Yb>p}zW2pRdA>TE3}8l%aBHr%7ev0C zB@>JaQ(C3^#g~`BHqj&T@baoP_+5WPf7IZ-602`ZeAMX(gd)B_86{3{)Lyeh-gMXRN#^1@Ap88HMv02oG#oH4_tU_e zn9_jPI6@;7hS~PL?%Pv?YoEac;;2QABp0r{FHRfHFiAKDbUIsGrKY~TR7mJK6zV&p zYP~26%5F&FIDPtA%RbiQz#@M5gSz|(o#RSfo_C+KL9T6YeRWa*(v+E-zq99YMob<8YkG-4_RW`E{jUP z{o)jNTnJ`C4@`OeI@`zQWOsf6KuDEUo-SN*QZ3up(~EZ2=bIVN;DhwY(^I&mwH08b zLBLm&XXH#x8GC>JbUjL}nf`~jQBhNaU!qF*ga5&*xUu|%JsvDKk<*6ZM185};riOe zH$V(4ZN>=zt;9pUao?=>k*Vp&KH;0xLAv4>yC}WAz1*(r!^TzV0)N0rKoMmDGHx&NZ<#tCsmJ$=iTERwStvFGf?fEC6UN4p;nlr@h$k?VsiGnbPtly6ozpx2(vZ?;A(P}488nFjuq7!ab@+UCcvyWUhMJT#?{fUdkJ|+W z1;TM5At9E2Zfl3?e(Nl?f&)*bI?d18H@LXC8jdEcJp;2=JPc424tKcZ--?FR8vePZ?^ zN=iyHoTDp(8@zrxoM$`$e;kZ7`%E-*T*u&K%4F-F5ykoHRH#_$JV9!|H{zJ{rCzw6SO(6j& zFBGV8G}Im*KYT{9l5tU6Uk{@-T!>dPKt}=_!tHbB0z5PdP@NNp7{bY`6^%hbD1d;f zZkh%>mf!TtU@g9q14;!FMmuE6a{E~^pj2gdw4*#lF+{G;IGEWAFp_IgngQ8{$w0`c zfgd$kHS}OG>Rr}e@6@wvm9&Aq%&o45Lk`}+3c7&=)c41aAHmts5DPxzbF7!XEaJBL z2#9PD1Gr-o6UGyjmSp@^MA0!Z2pU;XNN5eKXGjiAzT9er4U6&t7Np?{^L}4CPM;s9 zyxzyt?g+(kad82hlZwUUY5V5RP8`S>K8pb)U{YG(W=Kdd0B?_c*%EwPyV3%GeYhY9 zsN8wK>+{S$mCTkTQn$1S`SqP9lyZmpYoorjQ64MxTLrBjuL{h`VQ||V`%s}|wDLN;+VA@E*l~AGBIVt?FNF^^*#5I}=CHPq(THG3H~^{K zxc&LqhU)Mhmz9v}liS%RQ@R*3V-@DOp;+X9TZphU2BETnrb2YT*tz1m%E2e)Ucbvj zQrT#-y%wT}A(k@@LVxj(^-m6lY9KP@t7{}W zOk?`&wk@DEVWT?w=Edy7OT=gQDwgi=tN@pgtu zcs`#VpzUC(Z-k=>jQk#tV0WexsD{AAha1}P&;~x)syUupQh)Z}nxdPyv^KdJJZFAk z0T}}B$=TTg=rbh$4^m+Z-HGgEqMm#(^y{OW1kH;ch?J^`2B{Ugt-2ylr6eZ7PoPN% zbc`FY)cgbRov9|jrh!^XNy&jKYb_ATwO_w3?#{Qq^dJiF?(C$!4nT}R&yUI-oGX%r zsj_)How4u}rPbAmJdZYShe!s%i33C6XCX_)(TF0)JKG;+%R~*-Ih#W^Ge)d0R-!!^ z8VStfLD0bs5NXZ4KV!t}m8y?|FAq`ZC7mjbG0*AwdDPvp&)slB0v{V2yB&@SghNnU z0MxV{;8&~U8mkfcscPF7-zE#y+4kU_5!h}!xEyi))Bn2~?5o-OCwtaM2)XndSU!FF z6bTB1)YjHkCPsGuSAQLS(e_Sfq1|GKNp{X6$6j-QHQ4q&LBU?4>yt%;f>sthq`}!) zgLUq1qJExV1vp^tb=|vH(B%&jbXis5;p9}p!p0_^th8i6##>xmlu_+H6{)VNAq5r1 z4o?a~7EXIqFSyV8HxhgwB z6v&Ij$Hu&Te8CXUq4H5wRGeE}4C4BBB3Wv?>?8yLasYy8?-#%3aA<_$@8W3EeyrY= z9YRBv3JWwR*x+mcJqt^I^Ojj}N&qO<=H6bcXP*=$bakm{#JsgPS01b5Z_fH*XZpAy zDI^_8mFoXQc%SYrm6Y^dgsy{85eel38-IX1boKNAh{|j#gY488cChuyi=?5_1Cu zZME|B;sH{bNhc2CxCvavzqt4w;z>XYeIFaEoyxqg`sy)Eru{&9lvX!QeyOb6e{c?{(e-zYrp>Ucwh+X zEpF2;JR;}&*}UJ6O-8cRETKJ)Z-^*p&&;C&hd(9<* zHwX6x{ir~Vp&{Yzr)tEuc)kd&gcdlmw7c|!u(9Ue_(=!r^OpjFE9473AQ`Q>{)6W+ePRPJMmPXtPZ)mZ2ZOs z#n*naw`gQ%7Ylo32$kD1Rl(I5Edenu;qeN9qM5A<;oU!g2sxPxYD^JtVg^=#&Q(wy z=Xp&DZmOdH^I~5k9eH^sfHEC-W*C4L?OGN}46FF!MBx2mlIP^|*x_I&Q^V5w&Odkl zpge12Ya28D)xBxh7dli&YCTawkT~|r1gY_#ENo8;DyHl*cpe>eR9cpTvn3KLC=k|u z6(Oq2fNr*C5`~VARo61|`tRb9&bVXaxkt(J?<*0fyAokA4p7wX+m>WPPV6wQFZaFN zHU7CKpJ)I>6GICYE+kB$DqO*-eNiFZchH159`FH634}R8}c8Yur9m0I$1!l7d z=p2)gIW(hahy(u|3E=H+C+(1ti3uyLmn;mBi(i1~V?%{*CoqAb2L~Lr^%GgprK|P3 z=J`wVspq8y3(6gUS?p58F8LcvdWWK52J;UKB13@9@+q|nrjyl3STq+H|4@aH{3)9W z7b@{-4YqVWzofZ;9muC0S*ABu^TKTJXIe{L>pcQ+p;_49!}vCcPd@gy$Vtm89s@^MgB z3og-c263tu9|0TFCGSg;Yhd41ntG+Y-cw%wiuAsjqNL}UZGjXW8>!zlbvUA6g}D=; z5$_P&83+)PF5qNCd5MT=`=6hWq2(}_sHF=iFV}zAo45AH>l>5ks;bKIFuMNmfeL0? z-n$Z9(d3ISEa*kRm$ArsKXPPhlD~%dahr(=+t6kTZ*48$v67g`JR7SSkm9u(E*R;$o`YLe(B{I1H1;Y~_1E6_z=#2q7UOCgkm;K>!)$ z4A`A@yQG_U&tCO@=X*>BLFF6u=*OR}_)#=Yk^-7zVPx zpeG+X!eDlHS3Q@?&C{Eo@I~nVkN;0U(5or5N^)yNn;_ zVSoqhcCbljAe7SBb-E?@x|oxDc1H~=;836X`nl4RAJP?Ov_KXjT&8_@{5{`j@Nga7z9{H!>X!og5c<;`yxFu6?7|Zux?-8)YKHE zE45fUmjGCsa8A941C3tK5O|H5S(@2fHnEvS{k~tnzJSYX-HD{7%N(zC2up!Vfu=`{Y5tcC0k*%?NItW*UNtDOh=&$b|(E2j; z&_h}(-)1Li0(Xd*BHzNDX$ImnJR1~MmgWjpPw&%-m%QYE`h0Q}U%MfVRjd#Izk%cr zP^^W$%zzw#S2vb)a}lg1%tMVkV;v{zQPs!=`rxppW{R*Y^RQLSQ3^>L;HLNt6Fip8 z^utBwF}Px@AC=@a1iEMe-k6~~*>vwBm?mHz2KU}cTfjnhrV8gH>%|zrdb<;v2 zQvpYPjQgnk;L)U{$j^@LL#nK2lY}|4d110{Fjl!Hc(k1!_`p^-7bgs34=BZx6OJ%| zxTfk4@hD=#lkTM>-rZ$qJ3=<*fYwP*4}wq(W!z%TYzczJ<>u?Hd;M&{as-b2xVwu` zJrvASG$Y2B!QYzni@b$PV_mAaGkHt{fW~T-4-gI5lzpR29cXAyaOT5kAdeT`0hN4I6uz3in8q_kN9G@dgmxGKmIBa<8<|)` z`tbaK->?-nryfRY80}T)@8aZaziVtkhdE)`g}F{z=j{+0k>9wNXI1&UQe!<6!v%VS zRYh_MKWY`3=7MlNfra|kYdl_m$cKfMfgRP~rwP?+mT}eIg)LYFnpM@m%u(>n-D-z0 zF|x6d7{uBQ1A}8^Gg`dCf;S?FLp?Qi23g9Pt|y?0U`;rVwIlKuEXD>%;Ft@G)7euL z6d{TSl^|(QdRTesFQI~wgH$;mV!wlhy$m(qCuxuk-`>7ej3(blq2T}0$((tRESzS= z1xf%>EN|=j@mU|?&v-kd^kp_hxzBF-Kg$zq4#A9qW|QIX2^KmDyfVA#$$Zt;&&@^m z!Q4Dv2^lZ6^}QsKGhKQHYq}9)lm*yQc+7~OeC_YzjTJB4I+nH>lc(fYOI)c!T|7{Ol;(x>_W?5 zA2}_4wUsy5(+0*rYuG;D>1-Z;+rFN^0F?#;)O6eVcG4172-NP;PE!Xif%@I0d$Q0A z%P}-?|Fqz_b@gQr! z*L%8t{-yAy)A`Z;_#gT<26#@P0~VwiC6+BZc2jj%RbVt8I_~`bCU*cMmVAinM4Y zVd_i#c*JRJO1VBp@3RQds|}~l{if_v+}RMdL)$ZgPWW4ouF7a zD29Vv%*rzzN%wLL?d|Wn3XVj=O0Q&kK~InNd8KxsQR@Q+K(2>AxwgU%I<5}bD8B!V z&B^&dE$sR7#o;J+Z)Owe(NQF6s8P2mG6~l>^^ncl10fNQOf zgbjRXHD8@{7wt<^HD2n%5p*`AyE?Om6BFBko`;_SsFv>rhZ|DHHM}_4S_SM`DgC+s z(H5oE&V2#Cx2=<3X*yyL?+pq1USC=T96J<^Siz#}&JlmQ0BQ1iXXIR0NUP>0;6meDA;%(4M(vKaqWH{d!A>Kk@nx9$rn=u(*&3bPbo2tB;~f{$lsTLaysN1CI_ zrw8*B?k)XI`!)eV9XC!Gyn;O6py|QcflgTQ3uOhWyMs}J)Kk|L?z2Wu)9q=So1Q#U z(ZNyq9^sWGc;l9<{}*Bz)hK@wfvjxTd5fsu5&5nkG`}xAk|xq+*$#*-8s2l}Qb~*F zMxk4|3?fC9HtYIPD?U0>B>&p^8_fZod&bIC9Fh0g+eo`9Pomd>|19l%>pG%#w z>Yvy+I2{CvMJWUXuX$XpxM{?dS_(CC=2pkBk#|H#fGz ze5Iv13&+X19TF5DGP07%Sec!6qbHHoNcQ=3giRK?J1aV76#Kpqm%ew){t9hwd??SBIS30_?tzbPYvG+bI5U^_Y0Jnv9$8X;9hy5;D|wYNI>RW0f$(hhSp zM{a*7(v6syhL3N!+~+I1q$JZ1-9elzH5rlk(E{JI1BqIvmvpgIdy)YDgR*yY*{Xj_ zF@c|*CG2h&Sn%vtV9&DQhGtD5PfX{c@sSNXl_2-cWKPl0#64welYS4lO#BpXBT|lgB6F*%I|N>6aF7T?#I3ewXCj|5;xY1A^uGcKJ7-$+_Wz@qynZH@(iW1w9WqF>l{yjZEs+s=%d1)&9bW zjI_I~AWSA34Zl4(V8w=6x1?J&x}*`H@c8xa_Ms@ZK9!}V#QzoXITP!Mn+?IH>}dH> zaBI?$sG~Ek0D*xYZS}mUpDfS0Ase%PTds3E-{874rnL}may>R#W5DCOP6JSFFu!#g zkBfy?HNy=grHl*QOz}L)J6+OH_`iNLgim@*FfqZ85a43sgarjUco@#m46q;gRj5<4 zhy$KOCMm2-pJj0D9H;IH`_v9`L@%CL2 zM|v7Dv0DS5bwp9o>NU>)9v8yDI3ZiA?>Bd{rvoiS@8inkwpnosYzhmbP3@sTrBirA zZUKWEl)8|GWB%~_nj=eA^%j!P3^xZYI4E|^|N zx~;GYgLTe?5aW>U0_U3k6utS8w8#hd#XVd1!k!_mqX&RuCg2K-~?z{j05cbzm zL9Nl(C`?I9NJ@8ylr$)fAV^7=dW`V_TJBWR?az>vWf#ae_Ts%YNqRcZhRkwV7Us9t?PW-6%nZikfx;N8edRR zikGwdUrr<)8m1B>o@KGS_4&avUiFiwp~1nAd1CqTGBfpS^~bai6PSJG=33LPnjicB zdUp1UJNi7#3sh#HXTlG$nwQ7)1x7Rledk9h&z(8k8salfXLhSN!^j8!WcJ#oQu8)Yz;2lw0h+a4lLP0SyS|4@yB?u1& zGql*9s~T^07Zw{8P8Vj7~G-V~OWZmwQ4xDZyvB)ozvDsZSoQyTfs zLtaGzxS(~isvjsJ-_B2<(PGI|{n$-07}MynGV{HcAC<`$$+m^nR2K)p4-5Esaj>bc zVi`~IJ?=`NzPd<#8E{z_)*kK>3@#6x_;{5Q8VG9jH*Vzm;_}C)j=4+ixxFy7~fd4+Ji zfn&(=^YK%EM~b1=D>7bgLvwogq#cfa&i)A&UU`K>XZrWd^NUHCghN}0W;~AhK!Hgh zj;0RX=j}Ai((6^^gXg}%4=j51nN(EdJLnK0c4I29I(ii_Y>Uc^qg8H~- zXU*s;?2PZ4nvw-vdN)iCu*So97p6-v`s@mgHr)tXVe}r`4H!>X=)Sdw?~KQ( zU>D_Rq~jCON>k_O^9p!9W;nmlyvviHF`Ik(;NN$&>|5d6cx>)=qaR70U!F7Pe6Z`a zxy#Ipc9;BcI~I7XsSrD%z9%N2EtlV!`8*z{?bw0Jocba*FI{ubCIjZSrb-N&&MDQ^&r6+6g+Ul195MmRGp}b{ zlQu~YIQ|PP0#@`&@wb6KhhN7x8Q74wKRjvmyEU5|`O|ez3FTOBs4czU=V{LVoy?8r zwirPHF)$`iExzTuJu#amLFZDh<{inuH<$v%Xb7aF`e67h{H=?#_O$m8ILeoW zu6B1HlK)=NSPZ}O3P*E*$iT?!+jv<%SeW>;ou<|#&eqitJ8>o^=k{JFBInu5>&Q_O zid(}>n%>fibx7GGTh*8Nfh~Q_vo3eWR!ZH_rbO4X|J|lw^6{81T|mTf9vFHt8_sB^!bBm zLJVYP28Ji{_wQdT&>RR%PyZuql(ZZpiBf5w9SsQr5H}K!ckeP(9dJc~XHkxSvCtOk zU0S^zla=-9mdL;0ii3v=iofMGH29_ja2S_#OENGa3u%S-_dnahmXel#m5_jZJO=o9 zfe$!>>Ltjw6%IqgW)!R!rH{`fKWL;+KJKziH|U#N?7p&qk7U_?8T5cd&S2c*y^J&# zv+|*C#7$$xl;q@KBxb!8I-b@E( z&6h!}YD_S9)}$0Gm7a1lU?mrdh^h|{MAvU`w-WX66mi=eS4VOrzth2sjs3Z`5yH}{ z>n)Kad)Ner58mYMb?luCn{pAN0QdxmP0%U!ryeVjOX#$0^Av+C9&or>(wrg&an8$c#Bt!5?`R}PiL+uwF8 zxcQ9fD>x4Lu304|!QKatC*s=Qy?<}AIq~#*qYwYp)!ULzu>gO*pkV32&&ER43kmMH zc+tUC|0D`OefqQ5ZCF~m+TxY#*uG*Xr=xRP<2XL<0eG4xW!9<~?oW%f(sLicEnQ4& zY9e4_YM9%eq0lMVZk?{fT05lBcF>hBXKCJQJiM zk1kGyz*=4kSg8X%3nkR};pf%ik2<5Q9JWc;3&kVG?O7JrU){S!jy?ygW;P0%t?K{yeou!v8#&GX$!Ls4-ikb6Xg2Z!W13>@lXIM*-g* z5qUxujLEq@eB7q3Q_*q@-@{{^a~joRxv#a*P=^eXIt$)l!E6XT-zgwYz89NE=jLXv zt>69z2{uvW>LHW1jPO=3$OcRj#C^}Na?%9!)lHv6b&T+KOUXFE`yZfiKcwk`cc#2u zOzpMl8V>ouRGA8EZXS++%gkLGad()Iby9S$*rA~~32mcffk#)2-kjfRr1+qmmgO{- zUu>hrc5;1db1U}$R#P!DmaR_L;h328-GW@w-oCJmHkl}|AU_{1Ai(a;JE}*Q=km{w zZxI_;*XGgMv^?d>!~;pLLhU}m*~T+WW~IkLU(aSC^B`R5 z|Iv|upHH{4x2P*V(Za5V4(gOv*(-J3D7bbw7@HK^Ff$*&4g{;+f7ine)MH0-W06y$ zSBl$={Gi;pcPUMulHvrqGbC`KZXy@TUQ&$7$=%%@2J&Xmkw#nSd|O6aV8qJC);{IK zzq$E~S<*P9JzToXDqIpG>~}9=ZBs6Yb~@}%oJBPo=U zw~65YtfFh~%Oi)^aP!&HI~=BRUWPegv&K_!+!vu0Ao5E0y1AWmt6d&En#iq|;eK#>YcHb(NvUgM?Y|{G5rH zKJ#TPb(fs+SMsT$h?wk~&&UU3BokN(>6_Z2$SAW9Gt zfB=T;ds$h+!^2KEzOu6;5};@pnKYea_#A0y_xyK!ZwpPoV(RKzFDRc)*Zs1fwD?_b zU;W{g98%nshqupz>>~{pp@zJ#FB&yumKiKh$edghS6b*o#-a{+$`FnZL87k%?ae08>& zb}GRdEi;ot0*+G0O3Ulu06B=-^OY50-B{e?jmqnOoD+vJCU#!wtap zM^_3nLgdrp0>g`ld>j1m^WR&($84L^-jQ1>3Som^^*Kp!6;bYhJ75EiE6jlmKWJ52 zwJdSI>G}+lY zLs@~hr^>9AfJNTNt4c4_Nvfn2TjpvhCZdpNiNv`Ht^bek%Y zxULObL7K6!x4=?uMVvD9m5%cRgfhHuk1(Guhae>`Bw&hAS!ApNx)g~|36dF zvj6`XXUVnZ`D{*Hj8^HMwdF%tIzKW;dsyuH`iynoWyTk2-|YUyZ*2+Oa$D*_Q-3oU zzip+D;;pt2TxQYA_}u$C@~&`77DT z5xYTOeazL<>#-n1&n5hkM5-6BtprE&q`P~~pz#y~n62^9B%6rSaezV|E+{~na8}nG z7==BkPX9V|c=0eX0*r)QCm(}Z+BBlkhrMpU?4BY^zJQyaY*vF!heVPX!M&mb-IcFH$B{ zxM*L@{^dbrQ;CFH14`7p8gbaaej$>lj8h2_q{#Wq+D;d_vJX>$xnU7@&d1A!WqUn2 zNh9v=>jMwhWnoiA;ONMO1kt7@uR^WhOKDEDKn6VM6u|f>t_>1JECTh=j10D^vPGqP z_b`P;Y-(Kf^_DF69{E7zqY!mzvXCT5c(pHFsivNbJWCXW$2j`TYybBs`wbkB_MIKC zyqFY-C=m*ecnn;zmzSSdI8B9aiII_0pV3sXNDR% z_KAr)Y`ioA5)%1p=5AWUOgAhP`0;PjYFZ(Pi+K+#Z~Hucl>@bLUG1Cs?nIW5(BE?Z zQ*kQ&?@kYM;m7^)xO)*MI{Nyd&CNpU_pb{CTrx`ezKP&9HYp;E34&Y3`5|vVgcmMU z8&n~nf9hKOL09GBLjoi}2i#K(7#WfX#n3&GQ~VnA-JD9+V^vA`i4kFe#>s;rGaPa8 zI?y#pIccLs@xSt;1kwpOb!WtynH}wwRsK;!uOg1_U+3A8uYu8*R`8DFaS9)ap>2qm z^L2U|>{5R};f4mxY#TM{>V>4K56U|hPG9NHj%HhWl9|h##xPdbhld>$0Ub*qT9bZF zZQ*DqQ*L(l-VJO))H`f7!Q5W}_T=g&&<^oS<^GRHk_1Jz|4)|;wVTEN+a)I$r%T*q zka%%h{l4*|&G9?OXPH3;>KCk}$fH3ksAa*;;S(2=o?41Rmb2;g=P!&(Y4c1VlH7KY z!Q=kqS*Wjx4p~Pi1jMPb2#nv5kANY9UJz|tyEIZw@TPqUI&U+jvxU@b+k_fS08k|< zTO0~eNYomY*U_Pc&IqJ49JifgT95Yvf(HgHB*_zQeWc4%=jaQpm-talvR3D@CXkb} z4Q5QU^oKmQKvTA*-&q=oSb1vUOu`u^`j>U-@S@K>oPvwU2Mp zd0#F1%Qy|*zIP&&Q`PBR5K<=MdyiRd?4~?+YPqx1Pl`a z6eSkWKXuoVBJNKA)B?Z917eLvw@1CJ?L8a;1^S7D8Y=sr2I=P_q%u(cT?!_ z&!3L2Hv;XTN_9Qk&04qUtPqS;dVx(qL`~i6g z%4K6mQz%2)dqD}Yj+od?x03q}7;^jM3tBKkO|^wjccGJ7YeE41Z*V@&TwEqF|GPya zd&$pd`l8Q^2I5{eZIMPN7n{?=eDMsJVy4v#=Y!CzyXE$XXr}2Rs^yO8_(b>YL(j!7%COei0P`^D zg+q%W{@+H|9pwV>{G@Tv9Jqenv+nFxF3e@1;CcyNhPl4C=0#U{sJoxD(;FKFUcW}> zBBAiUpjwynbcGEu?^4U(kZ5;$=`z^?G7w}%I=%4a?*03ap18`Mn`C1*0#8SqcDn<# zk3wz=@l3?+%d=}^?VvlM0XWx_0o-Nuo1$N^4NW|7aUWw^E-ZkU__}WQ#sP z?9Wo~z<9H{xNVzC2U6u>cgvH(kF{AEeCV1x$;!G{X4S=de)>rSp!`3)-tR0fF8-;R zjRO#KFQse~eF~pvmaz({`s2-~>S>3By1KOx#N>{)e@w*X4nhaj-l2Oy@T3h=K*DE7 zG7!R8!U(pwM6Vx4ct9$=G1^NMO)kzLxX;(t_GfOh0W{j{T|G9#hCbXce9OtGU^xVK zFa-HzSTc9KyuLmO3EN*A$)0EMlWS`qE8DMLe>}AeUF>k3p)Ys#zji_fL)O`OpNK>V zUYm37KxpYBWFj&$@+c@!^I3}HBw&G$Kpayj-hsuF-!~zIT0Z)NWw-Jfsp+9+uC}@% z7omVe6uImO+iBIR7tr@=YoCoQX#8JT0A!f$^p-nfw&4T~D?Il3J_}Abp-)?D>l;Y! zf|`6)gQI)Bj!zUH!5;(t3)IQU{W@Rcncb7O?$SD+^YlpIc>svSI!PC&iw&`VzwPHw zQpsoA#eX*vU%!U24$QZfI={bvPg7f0cUMOTaAuw#J>tp%+yz6|+{w6-z9t|2OrXht zntEA+BBzx9IsV!j6JRG^ZE@fhsV1_`K1t7d{OfbH66llMLM9C#NZrm3od6Cfx;{4c zt;|Y@wf=p=rL?LBpm@v6GjxwVVa#!Pen6+ISGRk(jcxjy|K4wuLZHz=d0qCipPk5B zPG4Wgape;M)C@|lyL!bY-e^g?MVN%9QIftP=X2-v@p ziHTV+r;Sgt1la3iWe((3>FDS{ao$4mUNWup3sN9%!ieByb@lBjHx*W2{aW*{UQpKe zKepDwrO}vq?4zzu(5p(C2>)nP;PIRL!%SQH@#G>Jou(K0Pa4TX{)Wb*w!UIk=z|C6 z=UeY|s* zKZXBE9{r2M$E{v0+GrU8QCNeTIf|$aqktt)kTYHBA2FyYTK^D-~Fd#4npar zRaG##KnD~)AP?@iiqQa_xNvS@VPhj2H0~i(l3)?gyoA32&DUBJJ_OwlYTsmU2YENB zNK+CL0)gJq1_}azd$*zc>beZvS?EIK)c7^|p4^b4BP=m%M0+V1uRnS8p?Jgm*8(s> zclY-0Hv3rA3QfOODn7b zs-1C08=KCrPo{0Dgm4IZyJ+Yebj4u;ibpbqUp5S8S5t1-jJXl8k--91 zE5KAg=+h@|giZc{Ck~c40FAR1PI7O5Ne#g&uMA|C{PcdGo}T^XOB@hD7`eD`feNfh z_YB1Jf%5A%-*&CR`v4Pkw}L->uu6~}p^Pf<7yp1(f#PXf9>8qk!0oOuJ{kfnn|WLG>rvI(HZ z`L~>|?$2lRwYt~HwnI2xj+HbsaIModH1Zl|J{f?j|7VepE3_;zuzXtjzu+J08z-FqN?&5o22b)!ZuEhbg_v;Khx3}l!EPw|-|5a9AwJUM)XhFH5 zu@PW+&+P5(TSiAAeQ?0W#=i5r-gBtl(+QtS7#j>BVf@7Ui)+E>8%ZRl@gFCeF3|q| z^E7C#kroo7c6OF@gZg-LRu%{fHC7_=!h>&EX@|vRrvf^A?x}WTpoG2!MaHn}RRZ8v zz*3pT>lSVD6;1}98@uT>+S(+Hxm9re{reZ!-?YMZrZx?>1^{U}uxlY3?vS30vYZ^6 zBak2$O+w?(z!*_L4Hp&e8T|WPiVg$qZmZxv+;zb4Hx2&e@#{(emI3*RAL#2r28Rh; zB)G1K*Z>X=j$+2a2d7sq@WY@>K@L`FmTg5b072>b=I^f*6B83+&$el_wY8xIvg=N( z`Fb{=OOFiSL;W=Lp=N%jQFOdHfa}FSL2F($L(;XK=JFWB#V!oA4(@5xmfl{p z^>r?QXy8w2sgMmmS4&a^ibg_OS~Og`)QuBp$Mb0a^aG0b+*mBNDB{%;N*bT<<;;x% zH3L1hw*&rM>n-(!tIe$~)J0zLfh$i3Tv61E-Fb9`zsjnXG6z?RD7phq_N9t$*;L9y z(28VcW(JZM6BI~bCK=v93xs)c7i3XHq@*Fhyrl4b@Zi^8Zs*G2Dv7&Xg2-xY8@ z+?$&%k=Q~_&Hc=n^;>7>!}Y4DU1?@-q~Qechq=w^=qh|p&YQ08lQ96PQBdl?Gxp_v zuRn1#={&r6tfAg0FhF;<33W+*{b#806dg2DOT3qWE@rj*I<>R98rCv4v1vM4V4|^%P3Mwkt zF)=X+vxSn1>JNlhc%(a#1Ey7uWHJGl_`oX}pO_#sL?c*y^7ReGvlL!qP+BBFh~;#% zKrICe#)1VUt7~hmu+L|EdmDNm?XW{<5Y|Qnu{ke|f*&n5YoxO3j0sFhAqVw|rd~ZW z6Fv$c*W5lt}!@%HcfzbCIhN*Su1`6qc^^uBmcrY?}3 zovn^z&X){nK!sITT+r;Zwc$`hpxO!n{ai^$ClNg6brM=y(_OL50XuL)Z-K`wBq1Tu z2eh;|m6eq@;%zJ}T7UzaKX(L|+Xm%UcXu~_`>j4Wa!R0o{`WIxo1`loM%XY>4%SB4 z!z?M;L`0JJ4i9bL-G0(z@8l!|oU=agrBRFKQ1dNpZ}$V8SP%vG^5EY;-s1xvliF7& zpcp|3Zo(GA$hCnbS219S0qEMjD1yF`rzWMvtqqDU&5b80@;o;#P zDX;lHcph*pF;!Kbts>*KZdM6S540~|H`#&Sfdx>%d+i+^1%c#f^Tni2d%LT*zMs_w z;8YuWbUqKr{HxVN)e{-tV`mlr%LdRW&qh(a_P~78VxXh}Zj-HCWk8H4jKO3w&T;YkPZPu`*IX(C8Zkk&I;g6P7)t*PT3Tv4*Tm02R-KLWr78 zKp+7;({;q`A+O6hR>`+HWPJ`}P+K6fJ;~>1W6QUA*&W~vX>sd9U0q!a z+;tLqdh=JGVL4dL9R>@^<*wlUa+}_JjhH|owScs**Yo;5y?Lnx>ImF-TSyqmB*6SN zGi5HE??4K<`7G3D?_Bns8-Fp7*3^M_|295#MIzPndT+hiQnos}Ae>@H^pzEr$h&Un z@EIH?vhqk8gVqX$Ag$!7Ak@Q&rzg>g->6loDsqKvlaqEJRl-MEUg}M~W)7Qot|(EE ziy!sAx%6D1P^yIAW!`MmEy6O_yw+vh3;2Uq+2UU!Lt)!;nhl<4Osiu&t_# zPwJnOnI=Cx@RUqPRaKBW%$51dQU&*%o$kNta#LaWu3g*d(c!t8MaW)2XHfQsGNdia zQ3JMieJOS=&WJ*_hRrIr8%je0+SMwLY}g9Bv!S$~~8T zeI;MK>qaH&Y_hztRM)@s<4zAd%t{3W2%&wg|8a#Z`sQ=*P@wCsz(@oX7#x^J4=MsX zi(Oc%8rAlE@4picRAFgL6LrCDIs|%WP}ly2JwDgKMx9B=R!7f@9f!45J+QSZT2uMg z#;Z02AwLnx-aDjL{ofDyn#e)u_H8AIOH%>{?Ejt#R_e8hz8>d-of{89iY+)bRX=hp ziwV>+!r+dBI3F3b0u&*o0~wWG--hB1lN*GDAckz9%f*fw6!ay>-|xPG;Z4+#nQ*$u;bq+ie2%Y zS^Eu5z%z}AkLTaV)Ys}{geKCw-83o!X+jSUO+pl}1tJYJ}saZn23SA>?UzZ1r3 zYHAuB8|wl=3%B!Qx7GFal#RXNFG2}C0EGn^HLGbcA!v2ydd=KV>qq)gF3qdRkN*eBe zcBy*4{`uO_JZ%BqbIX!@spp0_3>+Qh7Pdr31!hu29^PA*W=(JzD=`lb567AkP;u*U zd6BC06x)z7eu^N8{Qye4x3I!XceOUOhOVe@q5O{FySPP{i=?D)sgvR`6#cQfG4RN1 zvzDXk=|ha%Y5W-8C<$9mDu*k-$}+<)=o;PI@_js2zC<&U(@_Ffv-`2K);-~wo-ga) zP2L_QCExwArsA-eO^}dFA6pUSGh!~Tps1+#9EWu3UJnfwRn+dTYcA{??fV%M( zsMMs~c)bqXGfx8p4+X%*X^YQ7H(ucBvJ8x-g2Kb=bo*8B<#Sk(C-4B?^xeDl$6c@9 z0VpHeO!|7Uc|aJnt^>Ol##tl#{$^6k$?sCt||5`H##Idy#3oZ z3}`PvHGH)#K2`k$sE6T0pN&PKHY5Y-A4E&5mDedxdK)s?;$p~#Tv3rlXP|3^3Zh=q z^`4)yydUr3cWeRm8_3G5KZ{7v(9muzk4)RYzv}08 zMS5&bJ)^C!e@A&M%daYvo00M6Lg&^U*abjDbW5oSQ%PbFH1eQtUB=lE`f&v)J$PS z7H(&zF*q>rZfHq#gZ4TMo4%7IsKg8oior+;jVyWnq984UFC=YBV|Cr}5n%R;ZnrXr zB$>nZ6u@32e{o&et9>IoOWqZC5e=B#)C)8@Y%MtuhZr0jL`0eJnr!XukAELPLTa>J z7S-H8I7kE;qm4{PbMmMEXC;dYtbe_2d?@d(HGeS_+Oad6-(pBcg;vG)NEoyJSx`oO zpYEf#;SF==j10!(-N1N&RlJ<6aL_1v0{0mTrC=@zT&FnMtC&ZUxQrp+ zS)eY+&C4U39v}b|UBmIV_mZLBTl1F`G8)iO0yhjTuQ~U+Z#Mr${iv2=8Bk5* z<14k#_XMW2uo)GWD;-C1K|XAEf4{9jGjsP(2Of_>X_j`^BO8v!36zsxSZls-8aRrIUfD z!%jd?NH}VlNBQ+D{nHjrjdSC-_u|>Re`!JhO!jF@Dt8}97{~jpv@c$~yCJ=OaTW=8 zY5#|*^NepGIj=|dC+-Q8+{aKfqa;0p$0p|~4b59J0%&6UV74ht#8e{D(D^Nncef$V zSW4n*2}0;@g@hQ-KLEt*kank$k@pmC>d%*_aAjuwK10O?TNpbC2XrPE-o1N=C|BD*Jc2?=|5 za_mZspJ8AGRS-pLbNzdvrzidM(@M0$hhO$JM)D^Mv~A@=v*eUKTBh)r8+KbjI}>jX1vEHEKJJ9#RUSJw~*Q% zGHX!q9)f9h@~-Lp3@GA2q%KbgeZ}Q8oQpF>%)$r$2S(xwuBFOVG_rt*f~Nlmh!{v? zo=^W$rZTZWV52iO{`sZJ%b!1KSlICZ@DTj>uL;VmjQFy<_}reD1?3%_c?3*rU1qJc}sVq3o-2v`BR@ong>)V%{B!*+L_sKeU`e}Ost(G6Y-uB#_rH^WmYg{B$ z{q`t-&fk=eV$QV|1fyu656hZi*A`-W70`dGS0C3N9*qE>qrEqBja_-i2kA*)6Jjn#c&b$%}xEyLjmzxvH3d*xsC?<9L zmG`=|wdNmzB&1y?^7?yLWk&v1?HW zht(hli!JG8Vh#Rt_T*gr`kfi9ijn+_U_fj2Mq)GWhd~)(JswSwxqIxUT}Ao?L6J?@ zA!0TRo1672=f}C$A3sW|XH3(ZIIp$yr}m*XIlIaddDM+#`I4wWr1^}Q)0G;hk)TWjdyVGXsNJ{bLM z4Eta3TdJR|?7_ek`uLoXoVs8|z*z8GSF@tU+%+$BV!1^EBy^M(7W%;VQGnu?^@WLy zEPC^KIUWc?cTCsaz9D^^GwqWTePPkXa~(pyRCFL?0si^X_g5ODujk=Ag@n)YaTEe2 z?av>xhbOf{wgzp34=A{}WX%{~2lRuMg|#&{pth8f2R;>Jpm9y(r3n|w{v6eV6|v&b zSkQ)*A-1h09l-0+&u9VUgrT|uc7iD4z1tD4#jjsVto;@bQ(y=*B7^~$lJWY{&la7@ zDzJ%er_^hg-Dce-eDvftzpT?>~1LozsxJ~bb!c>n?hsH9NXv~=A{L&G_F=jlLdv$cPFn2>Bk zd}8}NNc!Q7R(E8V6JZy+^7sF4eG{5<@lmDQk@(zANyL$ojEQ}zY$oE!&+qECbXMEnUliK%GjHb5!Ff2jKD)PPB+ac|f9Z-X80k}Nu zwTn91(SZ<){W?+T-uVl_A5)8Fw5Cgzl~bG=Cq{)ANQgAu2T5 z&^$f$`Z8VAYMgWde1Qo}Fju#=*e6r_w!c&P>07;Mau%C@)TV|6JB(bm!stEg%NMRH z^`7rtUEy2UA-Xt?#!L#B05$+cC#Og+l1y1ye83)JV^gY~+3P3%{K*5*Nu0(PC!iSk zz+-EYl!C8M8A4AaH;qx{U}$nOF)U^V_C|rOZPw9dU06)a<_&rsJv~@;snk5~w4}szaHym;QPtJ+Mp6s}cH(^i zuq}mdR`!Cc-4$o}_>qyE1`mneJ^Ei*fTr^|Njl&Yt|LAnE0KLc3s#^-im;!pWIDk( zHu`>=NmfAtXM)vh7a6~Mq0LvEe>YFC9+t?UN`B>o#-_k+=kuGNjnKmC$LpO>&B}tZYVog2Jp}ZKU5C@>pZ_P=8^Pk_X0*VH@4i1KlT6^cmcpwdn=jD zz^ASuIEX! zhm$dq;fY7jk}WAA@w_a}W@ii;l!nj#26(^_p79?4UN>5@vayRsypPAaH41#u8!E~u zbIn&bKr%}axVCo_**t+GKuAF$^tMS>0A{+^sUO|rokV4jl%xR0D%|gs&~Q}r zN&OQ81c09=YF=j9Zs3T*h6)+hODK^LlAMM59;&}%MX+!z< z(SLq6KKnXB55G`XPY=bFQUY=jEWZWIvJrQ0oBd3dx zek;U_Z~-ClNB|R81rwKNxe?qxp9MXoH)4D2_D-Lypgs->_W_;Iz*~Zj>WY$#xw?Sv zjEE8U7Nmozr2Jz`JU7P-keY25n*1<0~H`I z>=Z$Ru{wwPPzFCQFW!IM8;+sx3DR!+i#)z3uL>dnEmHD0s ztk;@gXJ)GQF7`%3yhfgp8&T1R-2K%}!Dyc50ke3YxiRo_Zd zsR&?zP{N88o6BMbT>0Vj_Z#oc2fy4h5WLIqJ-5??%)(|A2e$P9i?m?;zwcpq1WnQk z+F&9k_Ci;71to|A*8q3)QCsxnFvAPgAg(C~2Y zWNP%D=)WG>eSFFM&fuIQV%`Tn+tIdgsKcb-A5QxX9K`*-i^OXH!-VQl33{>9jb~xd zr)imP;Dtu}w^V+I|4srGISFFB0hu765<}y`tY}Ob)B+HCnd7KR9;X!dz5g={nR00< zwG3c{i+=ZRGXvYQJ|N$9*6LGxPqk0}NO%f@&e2m)HFW~WTsTCaJTr-bm5~@9MMEPm z1%T?!?PykPhxh@{0~1D%qn|Vpvq(Tk(n)4MlVf@a06Il~_Q0d_m{OsN*35up)P0fM zL>HKGgU&(wOVm%d{Lg0#jcaZ*F*gF$L=*_o{xt=4$wBPeif<;P4sL4w|)fFB%)YBSNyPqBTM2UE1gv+W^S?UO^#kcd+I+~{ zqkl0EKr{tFf=PdVObOZsdkcFY^pMmiN|l&0kU4@|?O|NCj`8@h1oLe#VkDG9^UGQ? zqYoYmMdsOIqE<= zi2*8Wur{Q{q|jMZO8b)NbJHC*)^)me??#&F*E{<9iCgxg;H9#* z=C~Z7GC@{{U7m7d8dt|yNfKy1f?6gV{wCbVoKoZX8*(i2O|xahISl>jJ|U>+TxQSV zA@QZ?G}pd>cG+oMojTG)SY&tQH-eS#WNTbm7t;VlIFdTA-VU zfbsvs(`#4Vh`tH*GAJlm-Na~~dmAFaA+v_8w;FA9z%>An_OQFRoXT6UfDoIVnLLDC zN!HYSvHXJq$l{m?^t`e%>1o~L%M|Betdb6>h02_N+k^H9XrnIwN951wv!WEJHR<4h zL4{f>8xX64w|}R#b~{wa@uzFv{}E!)H;AR92Rb(~u$IX3VEHN157~y={ttKrqR6CY zsrdh6gCREhB{HEOxk}`wS|S13Z$e4%^x!r$Nxw9?3UUOfiBhM%4C4Kbkb+MCK1SFl zTwKD%$@#uCle-47m5Qw9rIRnL#GcWl5-1U4NQA}Z7i5F2PDNW%f$ zf#f^3&NJjdw1$oJyhztiP`zxXjF>6>kyYjgpQB|MTAWY0U&GAkLIC`}ClQY7Y{umk zif|!=>rQZE=&$~xrb1I9Z+7@I*J7ji?|6Xhz?^1bRm-KpKfT67hHsm7s*L3x!*?{4 z`mV+(P|yg3?D&6%9z?9afPDmbB>Ork2>Ve-aj`_=B-Cg4P>gXM9l#VEG$C*Hy?4NY z%?~ctiSOQpB5aOt-w2y8Ul4)ufC%jYG0kS+7t^$ITFoz!9Wio{*YyLdMH??C>vCOi$8RNE~G?U^C(91GfO{jBC7MHmWrITST z0FZ2zTZd2f7OoI_$5h$Jn1O*ap+PTKJyEaXn;ssH(A!f(j=m54u=A{cC{!H?Hu5sQ zQ8NA$=hYR;Wqr;4$zssw>^!Vez|4Ma6Y)s!h82f!jEi-rAf}bA?@jq?OMot@SEHd%MqnN>6QM_zbwsqz|0<>XPC;V+z!G zUyBMVw&PQxJipH8=P95ZQ|!y!!SVC^LGwf4_8}u|D5Ry8I45krIHZud9KWfhWp3F| zL-@1EicKOzNkI6gyq8zpDka&r&BzI@$pJ-_hm*#+$x9T zK+7Ep`hZPP1CN7LRmX#7SUWE6{;O1WM#263RSt#R9D`aC9FP6Q`;aG;8VuCf*~xZ^ z&ThUeSoyj-`7iyRihiBhA<=Br#xoEi5NtXhrY+EDq#Ta@5y%Z1lQJ+I=aW#%bC~*t zJ3pU@h=JhK)S}5=J|}ven{j_-WVrmq*GGJRZ!L;T?=KPMb9E2WVeKl%n;&2?CjcAY z{qIN6eZ4Y8!H2K>;#4P=s>1ZO*wiXR?k9qRiaHPF{pa$DItlOnMNYgUcipOwGD>kCu*F3= ziS~+E@3!4azSxVTP)TC4m{7?ChNGPVM!s!8O-A`QUGyZgoS$w8^u1pTGpdT=W;E>p zF`xDnUai#`X%rcm=A3(E(iqoHfCZg%%uljoqJS$@=$^q|twCNdbS0H`4}P@u)HJ~!$b zd~mj1+x$_7-54bP$bc6L6gAmGy^)i@e;<=?FZKPb#D%_aklrT(V6^(sF*1&V6dW%; zz6bExJ%_X+RIZh|vfo%->`p`YB_AL1o}U~J4(fg{~1Jy^pI7eu3H_!ia-{yDWYcU&87Jex-N<-RS%S-_FKI zF|aUcm|7im zA_nEIt^c_LLZ7%K!a9redMV*M;>ccjV2g`;=PbM;cXxM;vg-O$bbo`M>7x|SbR-6# z$P^xLGJC8(cs}3s*bpN_=0``a>W-dv`97rGrpIUD05kE zg6=|AUS8VT#^DI8P+V;MPfH*t!coU0FbNcK(tT#KLlG*uQ>!0xbvbqo5Vx(rK5ONC z`0ojV!U;3yG6S|Ftc7~X#TjLc&>4YSu`*x zO?k|uFo16l>-KcY!WusG=vCwk(8=}_(aPujEOv-_^-AE4L=_<{oCe6`7?ZTLu}86J zZk|p1x7?^zN~$8WMn_7qK|171;9lE#p}pidF?>VBk+Q5#inuWlc?7%uZ|%RTy|S;t zmORVS%3@TP9lqo@#fzj-6!P_Tb$;~qp7QA_W{(=Flv;Tc$_@@nRlX?$jk7D2B7@v;)gN?xP@o?}Y7@|5QLzQ0{7-nK}JD0u$ek3~7Pm^-q_BBO^r(7OcDODgZuSh8Bpq7QA&^n+!k< zE>}l4WM6gvtYDUYqFoTj3FyYQuTd_b`eUV_pbp9~B6G`!jXlEY13&Z_xHrUol1uKy zQm3_dSmUZ~cUk+{OnN7uQONy_&alzn#O&kjK`wUhz`BN5q% zQs0wX4F?*uLwkj!>pumqp-4S%S>6vF8cKl0uQKD64m28>af-7|YQTdxwe&WVc{-54 zPxk5QN+*&OLhF-70@vZDTJL&k^_Nhqu5pu$h|7+)^upJQa5m%PDBxTCtc+}zg%H(0 zdcVb&%Rlt2d=F}Cm9J!Trw|DvG;npfG{c{rO@-hg@cVw;M?oQ^lOlevAnmbr3aS$M zZEZOcr-!Co#cRGslhJLzey$3=ns+(K9f-)m7d<|0Ncry~(;0Rr8JXqcA zwX80+xmld`;b3|GXdym;N$7wRD6+f^hW-?MP?X7H#Kp~m6qec>@ex{B9`Z;<^!Csw zetv$~E#aRlv`05!MI;9G?HIk=>6y0}F~AvdiJ-&P%z!)`2IEx6OR4Q}HB;QcH@|s< z!NPu^#m4jkZiN=Bq+k79+}ifc{f?gG@ZGh79iW>g_7EOknGvl0`g-)}{6O?1R@667p?U#5rjKBwp|DS_Ovw7Z$zALmiz8hQw~zB`mp3c3)YU zz}%cYBuuI7WzN0Pstw6k-PXq&CDb_|h!UbK<~4L9hes;hHh#6EN#+~Z-lFkbe*;_7 ziiV#y(hUC?^^Amjk;P!XIeYa;r6$M->y_=?E7!cSDkl=?YT<}DQGIZkWyL0tG31=O zuQ?DF8HpO-dr#0>MVXRv71TON5N{+PBBGFX`??qp4Ke3lfM3o%Qj$az)z`4LJ=nJd zm`^CcEA0GP^aUoTpDU#XGFMWe6M&?&)9ey*H|gNK(+{T4Mb{ zSrUNTBwxMK$!J3>BNBB;U|C+pQw1ip7BF{h)7n=Nx1a2T0!IJu&L%&Ky$*^ChSXjz zk25GMd+7cIoGf8u5>)CFtl3)We3h%Y|FOF>AC@lCGxKXQN<>X=fM<$`coVcf8ar6C zqYVPkhKy6HYQ2xTJd%syYSh+Ock(yW5F@|4u~8%@2H$m)(kGRj32{K6B>D_HSHipX$QWEwj4U7y(yA9&7u&ZEgLJro|`}6#ZhwpGwWto@q{Y!0&f=-*;Wn zh+5^K%J#p2Li~x;`FZ`q!GLHx+>eQgr6~^?Uf#54)7OrVt=Iv%8_|5##0nQ42eMHy zv2k~Z$N#c>E2%aKG`;0!j8R#v0GMQ)Yj$u%~O}<;l~-$6u<+Ogy9VyWTuE? zp+SF#f>K>w#hBRbdU5JEq$S+>>HZ2KO>K;fU&)k^`7b|?E)Qs`F}Re;(nL(2lZ`GWgYe=psi-@j8ieIm?} z*hBXo7l}Ou1v<`CO#kd09ibL-1X{=!c=Z*V5pNwG`C159kTvS?ZQNJ$>1i`1GB>vi z2{&)qn%W#p;0jOF(a9~aV`gL1f)wlqB!XJ3k&&u*VyTn>#z=(%J0mG!83FZ3{y*N- ze=CcNmSFR>wLCB52TDM<7W=E$3Aax~NrdES?oFf0(w00mo@wr&P(@GRpJE&zd%$vl z)}>*O%MMppo@qtsqFe`WtoVQ^JnTcyP^E+E&rkZX?QO)w)~{JqbL0opZoACzNT4NG zkg#tr0HpQ#i`!@@JZ3b(MpgLpTNfI2#b@!dH$W&5I zt3Uz*EMk6jXl<$9ETd~bI#RW>GgegVLl|mjj02{S(1rGAJD~hQ0UKWNw9#Fo@OPAt zNr{0Q5p(T z*St-7*3H%ov+Ntqqs-q!=g2@6)htfbd>kKt@WZWkByLT$^~b%G-}v{{{L(WB1SG+% zjeSxvYruzE+OmA-h5)l)A03W={PrDbK)v)$Bl%v+|G zWEpy6{6%}_I%A+$j?G0&Yf8pA%B38CE}SqYsTI)NGACb_k(mk1ReJw!9%K_|kTHCg zT5H=0{`rd;`#ifbHe^xAW;By}fsy?UZ063LJ3)1N*C65(eXDci*=TdLq(z^G*&h$^fhax+uC| zSd$D|^B_NnZQ2}u`D~!fc+Q(=KVruy)g6qw&N0OS5GU*~8QZ^G)=Zu+D9XIq?)G#- zPKgA}PJq@d`C!Oq5b*#oPcK+nmVE!Nd^eV3;^Rd}PI=q1nW4EmgAKg3>Y9xH<^l~} zIk!MEfZa;an2^eR;SMc&#?e>-_`~@CymWW?C$R&w{`_g6hYm5|6(Z3w32{0#r@*6v zE#D5-LWTf>!$N<{f+X>>(f=Oeb!710h^oRka=Fm?WZ! z3#B{Jg@}PY5{`oK19}=1L{7SGZT&#`06agvVCMtduh6uCNbn5_uoB==z?sJYAwsyi zF!CEvojrRtI3(l>SWjx)^b0RT;FSuv?G-aKA8_cp;DZt8NJB!dW%cvt&re^!ZUqxY z*!r(>VQ*3Pcb}XCPZgG|K!t7~!8GXi-@jWRn)v=kE$F)zmD$ef<(%VV zA_;D5tAI9b22y=9JW%+HmNgb!uOnLrY!g+TP2eW+H08d@>6`(gk!tr*5_Nh0l9v;p!`TBGp zYzyK1#fgLA2MlpYmac~O64KKYk2L8>hXe)R|D1BNw^snWrVj3=v9Reeo&57n15X?G z@uRrnGp<7%95Tm%|A)ixk?jU%)jg)?aG%f+MJ3XeJ9K;uY(_l9}Q?U*Kpn0B(eauI?*Aw^iqFSc{J1 zzwdD=K5Kv#r71?d%#jAbp+L|>V!_lo3wB!_0Aq27&cFFnIr`@hmqmMC;8M(1f@=v5 zA&-9ET}35D#Q+TJewaJr;T6Gc)`07492nmUkQsQ1wHRCIvh;GnCFpKQ_aC?wKEp!Y zZ+!i_l67BoAY3x{d&sE&cH$dYw%iHpPSZuxOr123x`xCusX6*Lv3(iM{`aCKvr7sq z)6yzSN@RSzz13DDo<7}6_7to;JUbWG^1uTc$)}^8Mf~kKcTSsi78Y!hb_7U5LJ4+-$Kv2AT_&QRlRrvE^L<}T+7{Iu|$&l(C{oCcn& zN*mx^B71t($S5!k?sTU%>}^LWbf$)r{y$g% z<*|IOO8S%KF!~Lw2VH$XNdwP&Z!AA{s>t^Q{b;9Kk>O&E+jS+B9OP>B9!_$%b9Z zIrB=&&Gk{!isRo&N$pCbBF6aJ{6iV~Y~?ebAMMkKlzjX+LcJ
nXr&&qG;odFHQ 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�*$jZyMRD}Eop1BbjUGcz-S;ebaX zxQy*FMzs6YxhK4rNd8JYEs0Y>RyulVn+JSh4e8ojA5wcL)4UiijbJ?{BL#Sx)oCyo zP+dRzVY#d!6qVxJ&!3+_@4+zw6?^-#sS>vUpSZwmgQV>rp_wGFdK?A|XM9L{SuorIJuioVPzi(&*a8fqjS@Nuw3yLQfz$F`c zB4gq7P%`}q5c0wC@vTvf17>kk(Xc1Z01E~>0;n^9Yn@x>+qWNsDhVE}A%kKuL4!~> zZQ3(7Ha0s_(E%Huuf!2-XKYEfq5%`K?p?^3*xfHVEkoqAwp?Q5Hg7(F&GbuJn$yo< zA$pQFTgJ_x=NNvvjzMrCDya)mLy+q&b;UNhh-Q`<1xMQBb$r9t(Ir>!T+O=Gayd!MH<5Vq<<1(NaVRavIc91uyCGXhbf^Ell$*3#1MNhT67i5F~ z^?`~BMMOs`cg>lZyg5L{w=_~h3bG2H^EY1%8xM6jae;?T5l81FLL%V{UD)uC( zu1HrRq1(KjEYO1R_6PuHeAzXGhJbq1Ha6xDh1B!}H}t$0o?eO>Zjx`MWwCV8DRx&q z6(=IMUM3=O+nqZ*CkspJ^&z`C1JNZ5&EO*2!#ms--!ziofNt7`J;B03tX(XG3$3V; zWZ|h|9{kh{kaEw>y`;&3DAhm?NlwlP;meVo3C&JQjKY?)HF40QvJehM$@EZnNQzjX zb90dbj!~)95p(SKp4jMUefYb!fkI5dZZ6S&U=})G4H!jHMa6sibyt(H_IybYs40KQ zT$%70Zk?YGPM!@M`T(HX5Mob%gRNUjs8yhvCWlKJwt;=}h6Q+Cv!1_OtoM_{?oDqz zaG%Ve&{dT2=@?rFMn5wDt4hw&CjkJCU)N#HbzA1DvgHuEjZ8l+^OVw)c3(@dxgQqjW>k7vL0mV z+0x;7#2lrh?!`R38>ezz*NMPCrMJK!&vQ{^+@N=`%W!6-hheQhGb#`}FJ;2NE%6l8 zzcWZ=^y=EqJ;V$FgWt}_+UZO@#Y7^hvA|G}?KY?8y2D*8s@;tiozoaaGUbcK;xuS0 zL>Tz!Q9-v@bJHe;)JX_XjMUWBG8*WnOwQFKM-~##ttzqaS~-&ty8uSupp^(BlL>* z!Fm@6>{V!~R&J^F9k{4YSf+oXE>#aJp_NGa6P`ApYr!`lmNP1L)KF|>anu=^ zNl6-572mvs(ZtBvOip{DQV-~Wk-#~*IZDS&Z}%KsVM!;^P&S+wMU-SQL{kZ`r3Jlr zvKcK9%8WW|T5WTBwB&}-w*oN%jLg4%Tz)^n_hiHqw)Y6i==Nxyf9+{5CUR@ESAVxy zDRLkN{`%TU%ifq-fE;wT%?nqEmlsrqhu(@1Z4$|A4z0hi)H1n4E=xiXo_9{7$-ow3 zWN^|Y&^|-5^6h#9X6)>{*T|pitrEb|N>dy8fKO#yf=6Fn4bpfvk`7?Am%Z3gFkcvS zR{i3OENFU(L%r^@fKyhGYy|8*E*^Y#C1d@W|FB&ZFo}d4f|W zP7=p9jaR(Ed(5K*Wh1lvgcJUb`nfk5DdZVWDt**IyI3=WA!kp#N^wfcI&i7Aj~9#0Ep&CM z2FzAu+Dk-*0yFW~WlbuSTWxXoi_DrSsYge_ zknh)=wBM(7C7 z{8^yD%lhEK;;h~5)}mk%=C1U>Ea&PtL#A6vn$-VI8UH`uRO6bm?#IN&+7Xar!-&t@mq_aFaGjriHh^3ZP1HzzLs7sRK?S^xk5 literal 0 HcmV?d00001 diff --git a/duration_8h__incl.map b/duration_8h__incl.map new file mode 100644 index 00000000..601f0873 --- /dev/null +++ b/duration_8h__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/duration_8h__incl.md5 b/duration_8h__incl.md5 new file mode 100644 index 00000000..6291b3a5 --- /dev/null +++ b/duration_8h__incl.md5 @@ -0,0 +1 @@ +17d6f6b2b66c0cba191e8e5ca030e1d5 \ No newline at end of file diff --git a/duration_8h__incl.png b/duration_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..ff73d48a43c119a388f3d2db9089e83527f719cf GIT binary patch literal 6069 zcmZ8l1yoc~yB&s*l2E!^B&EASKuSOb34uX|F6j}Fj-do)05RxLx+R7N5ott1x?_+K z82TOG|JHizy_q%lt~K|rbIw=$`}U4~sIPgGn1L7qf!x&AQa1wkBk=PeBmmc*AChF? zMgY^%REJ#u`)0KizJWk!owU_e9{In=dF!S((%&FZP6OD!;6(JtfSnK&%X^1i#FAdBI8frsf ze4CIoJpG-rHQlr~iG!Y#6QA#&IlX#Ps7f&x4-a3dTdkOnp&{kqdl_646O+b#3PR$- zs;XN_EDA1?(pCr$kkh*7~@9Raf%LKzvEZ$m@9 zdyAbm*4E1PT*czf1>sp)Y#v`ND(!R~ZXiP_3nsjgNaRBklN)k!a^t^#scC9PyJ;Ia z7H4EVE5iI4KcHY@A~i5D7Kme0I00x;i;CGfpw+j7?meN?%_e5+db3x3K={ z)%^z#h_|-3?m3Qf37FTBA`l4It&d{%Wa!Idb7@&wsQ<}cNO`$%N=k~ggG0>c&wLk$ zpRU#6aGoDOek@=xf=|%d**N?A`wc2zKR-0mZFbP)<(HueRg5AR#(BJMHE^k^%o8H~3;0 zI5;@0ZEeH5y42M*G!}n<^|G!sjX@$iwttmVGBe*aHa6zEb7y(6Gn!5*xcT>aY?7rj;wGqK8`^iBt|8*)=HA=iZ?AD2ZVw-2iaBQ3AtL=w+G+Bf2EG;bquTIyCii=eqKc?p6 z<9nTw66TIRCBVHw7LlFJ-rU?QYqv2vYV;fq=MWGe<>BF}sHsu6w$5@0va{p90@+|a z@J?c5zEufvyc1iFJ|hMv@jqB0f-D?u|N1sCkcy~10SAkrny1?GFl`mQh-$C;Ih32j@G8ypxh=^`m0DA?4T^!@t-;DuPs z7rPcaJ3GjnM8rh1|2{PQ2KjviLiTj9)0rmcpk`hR> zoO?k*0VJ=tNaDcF;6}VeEf;w9FQR5#dmnr4` zptO)XG&B@@c`{##IC4_g)a?BBO{<{M+zCa4o3%{mdyF-kA2GLeb0Z5?4nZP`NAPp= z^3?M(`tH@83lagF<5`th04Q~VRCs7*m86p<#4aIGJBx93b!}gLVQ69!eQ@yNU;5Sz zj*i~q)J*J}Yk6sCY#d%yCCVi2q3mLHn@3mK+gltN7uUYLzX#9+2I|5z1^1^@&%P=eB=0MkcH6lQx`xoy@;V@?7qT-5njp?l%3YaQexYQTO;x!H%2O|i0NswA0HJMnaFP3zN1fN-WqTS7Z(?|ZV$s> z@R0WK^15w4wCG{&>Y7mN{HtSThVlFu(+P?wD>pa1q(mS+BO}&_(yqOu1FE8;GTG?E zFE1}o!N^ELOG|qiws&1&Dp2yQg@KHW%(N1QUsF>fThgR3FbZQ6jQSv>sHCLyyX7UV zo0}UU8JS!C$AL^KH7hIDe*j2KtU8YlYG3qNxtZM4Zd5;_4lGaj>b1T!QEKk3V<=l$ zS-CNidjkrEZlE~C-W5Il;1GOd6kErc8#}5EyjEDX>zxz(u8DD0$gn`4NdfWJjp#-0 zzdu&=_1Nx_{{Qay-;M0y%#PoS7oxMb2=O9wkt*Ed6XV}m7&Ejtw#dTJSDHn|UkQ}a z(F~>n%oS4#>=fUmKBm{z-HnfbZ)og=OLg?5tO{>6$9LA<%F5~?mB!U`>}}%6nAopT z=%Anq|9y@`W)+w$j#VEA{uU zciU=|Z3mvY*%2Mx#?nH2e!9{;eS5oRr8BJwf<4U0a7LY8g$bEM!T9p_OubdlkBr30 zuVb_b#Fofb5sHS<(6AabhA2UEp{$x3nvs#}?A%<9`WiPPky?ViGat?;CDMuJ^;cbq z%w84Np$IfLHN`?04lcrWs>+u4ZgEd2u2sim1BS2^Z&kH%-bp_=7++q&_I0vhM76!z z_{8vlZl)x$wsyAvMFZ2^-1$Qb3%&Y0w;Lk03|{+7YPy+qBtd6%Vf~i)n!TakIw?eQ zayl01=3CR#F8%?@KN>!>7d%nJgRg*FPGz*k|1(Kyy4#7qMk6Dba0PErUg5o8JN!W3k)~9*a0M zg2>J71)RL-_N1B#%e-ecv&s9g$gfhIvUh-)rQK8m6>XtnB(Ua(!!=|EQ`v5!}Ib| zyM{5!qRYtebhADtITTXH3ufc)p1^O?A>xuAC}!b%M+xAz9SmZ^?M zps%VLrnG7F9nu%?$9(X?jOcCZ&$f9b9DICgX@8HqzklB!71YjU8;bY433I}K^Uf@! z94#CFtmUug=?gj+*MUt`Uh?Z7{_DWu_%C)$`PK%`DVKX^Kptq2mO{RXEgz`qmO>a9 zGbtDlP^Llp63gvG)>jr0prH*5#)*Jf1yUIMB^Mf8hZWkB245agCbE)uRoNN0!+hp% zJa~)W7vE1N;zQdIa7flJMrZLiJN z_+o>dD60p(r^GzD0e|%0kZqV?aPaCx?(RVU3pIy|2{+0t6*p8`!k;=v>b%-6mmYH-2S-1YL5sH7xLY+z{DkpK+Pe|A zk#Ah?>LGqZumVYc8f$Nwm44giSo=LO+xx1z48YcQc>Sxb(?E8`>kC_Iej`N!f=2A= zdOipgo{$uY>f-suy-&jGW@b2LRzn4b*-INV1&S}Y@agF_9Gq?;1!;-rE%Wc_GZ71x zx=|8CLh9>rBUEiNS6w7Ya_`@?-s!)4va6tiIJ+GS279IGdiPVlM|n(i^C|uPRyH$r zTs31+I1noQf6eJ|{qbk&`kfau4ohBhXMop zx%bZ=Kla%>Jf}=Zkgs&}a|Rgh`v)C`ME>G?ROnCVy0!hQx_uR%U9A10j@I8#^ctH> zwLKwn=P5_R#F}08Q#z$NRB}LMd_2d-_DP7cvi4<0Rk3zVQ4tsQU1PF%2_H*la_5Qn zC}|VwxbCpJIvP^}njMUi^7A}$^yP$FH{WKi0V{6c@l-VIYs6Ib2Zu*_@&&r|iLb6R zafPIq(CAOfR#rD$B)`nowXc(Sto=}s4=nmB9C`0pWaK8};PSU*IoIGfKPTYfL$n<| zJ)~mxvew5tm2}dtGh*2t-^+NB^P7AOd5GO5L#5W1nl~r?Sl;)%L`ae`Hzw57s5&@S zc2CFFNiuTYH(mUmdQXqZT_`!ZAQ-zRQ(!R9d3KeTo0|X}NkAsv{a(g)5rYY744Mrg*$z6Vae)1a3@BJT zjKt2&`*H}EGeNB3@CX^No{rvL9I*39iT))aseFV^nkWVBiCz82hCdi{#fIMkOfo59 zm35);)9>tDHFsq9;2_!B+V>2I%12*I zL&K!`VE&F$^Pz>UGn}=-T4N-S1|Z~l6LDOv`F8e&=o=hF$egxidYhko!jba2Miv$& zkjKonE-vvnxCFdGN-1=*e>opLfgT_K9X!eZ%or-aPF$*3X|uyt!kLlam8I zTpx=5`c>xaXggXMjfDc0hKj!$@b6fk2mIxI-c%qRj@x^B2*4*@+LHr-Cj^o%<<0`+ zfh2AnR7f|heQJsx^6<$M0%2icI!4A$5F`5`WGiC2ac0u+H#bJ@jbphhA|N2N8x}eM z?*wbj)VZo1s$~F{D4Y1e{nI1<@BRJ7=Jjs1&wjIu!GC0dwkO7S=T7wJva*8XKl28F z85>e*7#<%Vzpbs6@HyGF{ES9_oUU_av~zRQCyG=ZL6DG;Yz=;pqxv*d$cxMYocJy| zIr-eAg^WbN!SnB(ooY2oj=(Bm{;8>{N4~ywzgOQrZOt=XUt2Shm6aXG%+wc0 zMG^2xNTiyzAZm-==jL*zzJAU2imNLt>Nr_^{QP&3IYoe4 z8G3qp=3w%>TUvs?eJ?eyFFH6l&`(W`9IV+so`#DBDt@NsD-l4}2L0n)xo3=3+OtEE?Z>(Z#;Asj}nVOb1Zo+-0POk=?l@$V2 zRtPvyuMyzqkAo_wqEHV?jZp_xIc^2Jyc3a;k#9poaZ)ofrrf3`5(Jf$K0(>wc~-A3 zAAc^ElTFhV_vx>jVtIM8o4+>rf&WZkU>xc6i8-UOfA&wI!6#K69TK%D(&Prce$B(b zM@Kl2n>TOf*iB6QiCz`t;{z}#NpO>a%M9-9%x`w5RR3weGY50`GzcYN6(kcSPjNw} z3RpH$0oCEwHlL7C6rk9qOmec(16p!vy18~Ucp*R{l9rZk8y=<*pdrc5&VJFtnT0%_ zvNI-U5GMq33qC&nhqByN^GB?KdpOuY#g9s_ln&H`gV7Ej#2d|?eMqL+-W)3o?_cFm zP+&GL&<%}?BbjRsz=gO*;j!Gah5!}K(9n?G?1`!ABzI6s6!XM$v$_F5#j&TSHe&^P zy!`y(4|&yfbxE-oC$=-%aiM(E_Gv?5Aftd-Q{la71h_A2QE91$g$0w4W#f49838#9 zDIl!>1U?{y@bd9>AgTEmc6R~8&L3hJ`FXIVt67QmTqXeAGy38pP+USng^eOBJ6lB@ z0l&VwOwP!->l6YU+a5u58^~y30M@8zXu>)dy|t~jgYG4)`5$lnBvC;8RW>tYfWcs0 zb;&fik82DfEzFXb<)RF8@3#*O+yuf)&*k|E7@=15fB9{V-=$+ zB$HEhuoa(Y+SJ(C(ba{wySuwF+av|n^EmtK2wsLlCdw@108*#|0{S*p!Dox=pLY5D z8-;&BfX)6=x8>->oML)cmP&Yq*SbD%So`E8-Qwb6x{O!Bq-0f>@)X8+iH!);95{>l z*4Kvv$tO$6`f(-^yRz~;l{BU8t?z96K9}ep9g5K50rmnO3OWK2iO{xtF~vl9Q7XFs zmshJTQM3=VX8YPdYeC@K+S=y-3GXuVxyL;r&tkCDC|NKuHWr>ipJ7kzFExx7)hpd0 ziQ=(=!wD1=R`mvZYkW(A9JKFGCzVF?Z!?3pl!Utf5wibBa|XNjT;mL`v^isEmTm$a O9-^(GuU@8V9rj + + + + + + +Project: include/franka/duration.h Source File + + + + + + + + + + + + +
+
+
duration.h
+
+
+Go to the documentation of this file.
1 // Copyright (c) 2023 Franka Robotics GmbH
+
2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
3 #pragma once
+
4 
+
5 #include <chrono>
+
6 #include <cstdint>
+
7 #include <ratio>
+
8 
+
14 namespace franka {
+
15 
+
19 class Duration {
+
20  public:
+
24  Duration() noexcept;
+
25 
+
31  explicit Duration(uint64_t milliseconds) noexcept;
+
32 
+
38  Duration(std::chrono::duration<uint64_t, std::milli> duration) noexcept;
+
39 
+
43  Duration(const Duration&) = default;
+
44 
+
50  Duration& operator=(const Duration&) = default;
+
51 
+
57  operator std::chrono::duration<uint64_t, std::milli>() const noexcept;
+
58 
+
64  double toSec() const noexcept;
+
65 
+
71  uint64_t toMSec() const noexcept;
+
72 
+
85  Duration operator+(const Duration& rhs) const noexcept;
+
93  Duration& operator+=(const Duration& rhs) noexcept;
+
94 
+
102  Duration operator-(const Duration& rhs) const noexcept;
+
110  Duration& operator-=(const Duration& rhs) noexcept;
+
111 
+
119  Duration operator*(uint64_t rhs) const noexcept;
+
127  Duration& operator*=(uint64_t rhs) noexcept;
+
128 
+
136  uint64_t operator/(const Duration& rhs) const noexcept;
+
144  Duration operator/(uint64_t rhs) const noexcept;
+
152  Duration& operator/=(uint64_t rhs) noexcept;
+
153 
+
161  Duration operator%(const Duration& rhs) const noexcept;
+
169  Duration operator%(uint64_t rhs) const noexcept;
+
177  Duration& operator%=(const Duration& rhs) noexcept;
+
185  Duration& operator%=(uint64_t rhs) noexcept;
+
186 
+
203  bool operator==(const Duration& rhs) const noexcept;
+
211  bool operator!=(const Duration& rhs) const noexcept;
+
212 
+
220  bool operator<(const Duration& rhs) const noexcept;
+
228  bool operator<=(const Duration& rhs) const noexcept;
+
229 
+
237  bool operator>(const Duration& rhs) const noexcept;
+
245  bool operator>=(const Duration& rhs) const noexcept;
+
246 
+
251  private:
+
252  std::chrono::duration<uint64_t, std::milli> duration_;
+
253 };
+
254 
+
263 Duration operator*(uint64_t lhs, const Duration& rhs) noexcept;
+
264 
+
265 } // namespace franka
+
Represents a duration with millisecond resolution.
Definition: duration.h:19
+
uint64_t toMSec() const noexcept
Returns the stored duration in .
+
double toSec() const noexcept
Returns the stored duration in .
+
Duration() noexcept
Creates a new Duration instance with zero milliseconds.
+
+ + + + diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 00000000..3174bd7b --- /dev/null +++ b/dynsections.js @@ -0,0 +1,121 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +Project: echo_robot_state.cpp + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
echo_robot_state.cpp
+
+
+

An example showing how to continuously read the robot state.

+
// Copyright (c) 2023 Franka Robotics GmbH
+
// Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
#include <iostream>
+
+ +
#include <franka/robot.h>
+
+
int main(int argc, char** argv) {
+
if (argc != 2) {
+
std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
+
return -1;
+
}
+
+
try {
+
franka::Robot robot(argv[1]);
+
+
size_t count = 0;
+
robot.read([&count](const franka::RobotState& robot_state) {
+
// Printing to std::cout adds a delay. This is acceptable for a read loop such as this, but
+
// should not be done in a control loop.
+
std::cout << robot_state << std::endl;
+
return count++ < 100;
+
});
+
+
std::cout << "Done." << std::endl;
+
} catch (franka::Exception const& e) {
+
std::cout << e.what() << std::endl;
+
return -1;
+
}
+
+
return 0;
+
}
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
void read(std::function< bool(const RobotState &)> read_callback)
Starts a loop for reading the current robot state.
+
Contains exception definitions.
+
Contains the franka::Robot type.
+
Base class for all exceptions used by libfranka.
Definition: exception.h:20
+
Describes the robot state.
Definition: robot_state.h:34
+
+ + + + diff --git a/errors_8h.html b/errors_8h.html new file mode 100644 index 00000000..4b4d18f5 --- /dev/null +++ b/errors_8h.html @@ -0,0 +1,181 @@ + + + + + + + +Project: include/franka/errors.h File Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
errors.h File Reference
+
+
+ +

Contains the franka::Errors type. +More...

+
#include <array>
+#include <ostream>
+
+Include dependency graph for errors.h:
+
+
+ + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + +

+Classes

struct  franka::Errors
 Enumerates errors that can occur while controlling a franka::Robot. More...
 
+ + + + +

+Functions

std::ostream & franka::operator<< (std::ostream &ostream, const Errors &errors)
 Streams the errors as JSON array. More...
 
+

Detailed Description

+

Contains the franka::Errors type.

+

Function Documentation

+ +

◆ operator<<()

+ +
+
+ + + + + + + + + + + + + + + + + + +
std::ostream& franka::operator<< (std::ostream & ostream,
const Errorserrors 
)
+
+ +

Streams the errors as JSON array.

+
Parameters
+ + + +
[in]ostreamOstream instance
[in]errorsErrors struct instance to stream
+
+
+
Returns
Ostream instance
+
Examples
joint_impedance_control.cpp, and print_joint_poses.cpp.
+
+ +
+
+
+ + + + diff --git a/errors_8h__dep__incl.map b/errors_8h__dep__incl.map new file mode 100644 index 00000000..d4c26bdd --- /dev/null +++ b/errors_8h__dep__incl.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/errors_8h__dep__incl.md5 b/errors_8h__dep__incl.md5 new file mode 100644 index 00000000..c68b6158 --- /dev/null +++ b/errors_8h__dep__incl.md5 @@ -0,0 +1 @@ +ae1c8cd80573cbcca5d80dc0c9cb59e1 \ No newline at end of file diff --git a/errors_8h__dep__incl.png b/errors_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..62c6e155df5d534714e4de5afe1159adafe47360 GIT binary patch literal 49640 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 b(OD8Yj9@Iuo7aw!@SoQH!~3#SEie5a-^=<6 literal 0 HcmV?d00001 diff --git a/errors_8h__incl.map b/errors_8h__incl.map new file mode 100644 index 00000000..fca5a0a0 --- /dev/null +++ b/errors_8h__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/errors_8h__incl.md5 b/errors_8h__incl.md5 new file mode 100644 index 00000000..46fb1616 --- /dev/null +++ b/errors_8h__incl.md5 @@ -0,0 +1 @@ +126f684209a4eb6c33d6469d1dee996f \ No newline at end of file diff --git a/errors_8h__incl.png b/errors_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..04dad9ed97a94ab46a242f524bd242689249d5cf GIT binary patch literal 5511 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 literal 0 HcmV?d00001 diff --git a/errors_8h_source.html b/errors_8h_source.html new file mode 100644 index 00000000..1a78467c --- /dev/null +++ b/errors_8h_source.html @@ -0,0 +1,205 @@ + + + + + + + +Project: include/franka/errors.h Source File + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
errors.h
+
+
+Go to the documentation of this file.
1 // Copyright (c) 2023 Franka Robotics GmbH
+
2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
3 #pragma once
+
4 
+
5 #include <array>
+
6 #include <ostream>
+
7 
+
13 namespace franka {
+
14 
+
18 struct Errors {
+
19  private:
+
20  std::array<bool, 41> errors_{};
+
21 
+
22  public:
+
26  Errors();
+
27 
+
33  Errors(const Errors& other);
+
34 
+ +
43 
+
49  Errors(const std::array<bool, 41>& errors);
+
50 
+
56  explicit operator bool() const noexcept;
+
57 
+
65  explicit operator std::string() const;
+
66 
+ + + + + + +
95  const bool& joint_reflex;
+
100  const bool& cartesian_reflex;
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
224  const bool& instability_detected;
+ + + + + +
246 };
+
247 
+
256 std::ostream& operator<<(std::ostream& ostream, const Errors& errors);
+
257 
+
258 } // namespace franka
+
Enumerates errors that can occur while controlling a franka::Robot.
Definition: errors.h:18
+
const bool & cartesian_motion_generator_acceleration_discontinuity
True if commanded acceleration in Cartesian motion generators is discontinuous (target values are too...
Definition: errors.h:158
+
const bool & tau_j_range_violation
True if the measured torque signal is out of the safe range.
Definition: errors.h:220
+
const bool & cartesian_motion_generator_velocity_discontinuity
True if commanded velocity in Cartesian motion generators is discontinuous (target values are too far...
Definition: errors.h:153
+
const bool & joint_p2p_insufficient_torque_for_planning
True if the robot is overloaded for the required motion.
Definition: errors.h:216
+
const bool & cartesian_motion_generator_joint_velocity_discontinuity
True if the joint velocity in Cartesian motion generators is discontinuous after IK calculation.
Definition: errors.h:179
+
const bool & cartesian_motion_generator_joint_acceleration_discontinuity
True if the joint acceleration in Cartesian motion generators is discontinuous after IK calculation.
Definition: errors.h:184
+
const bool & cartesian_velocity_violation
True if the robot exceeded Cartesian velocity limits.
Definition: errors.h:86
+
const bool & cartesian_position_limits_violation
True if the robot moved past any of the virtual walls.
Definition: errors.h:74
+
const bool & cartesian_motion_generator_joint_velocity_limits_violation
True if the joint velocity limits would be exceeded after IK calculation.
Definition: errors.h:174
+
const bool & joint_position_limits_violation
True if the robot moved past the joint limits.
Definition: errors.h:70
+
Errors(const Errors &other)
Copy constructs a new Errors instance.
+
const bool & cartesian_reflex
True if a collision was detected, i.e. the robot exceeded a torque threshold in a Cartesian motion.
Definition: errors.h:100
+
const bool & communication_constraints_violation
True if minimum network communication quality could not be held during a motion.
Definition: errors.h:206
+
const bool & base_acceleration_initialization_timeout
True if the gravity vector could not be initialized by measureing the base acceleration.
Definition: errors.h:241
+
const bool & cartesian_spline_motion_generator_violation
True if the generated motion violates a joint limit.
Definition: errors.h:233
+
const bool & cartesian_motion_generator_elbow_sign_inconsistent
True if commanded elbow values in Cartesian motion generators are inconsistent.
Definition: errors.h:162
+
const bool & joint_motion_generator_acceleration_discontinuity
True if commanded acceleration in joint motion generators is discontinuous (target values are too far...
Definition: errors.h:135
+
const bool & power_limit_violation
True if commanded values would result in exceeding the power limit.
Definition: errors.h:210
+
const bool & cartesian_motion_generator_start_elbow_invalid
True if the first elbow value in Cartesian motion generators is too far from initial one.
Definition: errors.h:166
+
Errors & operator=(Errors other)
Assigns this Errors instance from another Errors value.
+
const bool & cartesian_motion_generator_joint_position_limits_violation
True if the joint position limits would be exceeded after IK calculation.
Definition: errors.h:170
+
const bool & joint_position_motion_generator_start_pose_invalid
True if an external joint position motion generator was started with a pose too far from the current ...
Definition: errors.h:117
+
const bool & joint_move_in_wrong_direction
True if the robot is in joint position limits violation error and the user guides the robot further t...
Definition: errors.h:229
+
const bool & joint_velocity_violation
True if the robot exceeded joint velocity limits.
Definition: errors.h:82
+
const bool & base_acceleration_invalid_reading
True if the base acceleration O_ddP_O cannot be determined.
Definition: errors.h:245
+
const bool & cartesian_motion_generator_velocity_limits_violation
True if an external Cartesian motion generator would move with too high velocity.
Definition: errors.h:148
+
const bool & joint_motion_generator_position_limits_violation
True if an external joint motion generator would move into a joint limit.
Definition: errors.h:121
+
const bool & cartesian_position_motion_generator_invalid_frame
True if the Cartesian pose is not a valid transformation matrix.
Definition: errors.h:188
+
const bool & start_elbow_sign_inconsistent
True if the start elbow sign was inconsistent.
Definition: errors.h:202
+
const bool & cartesian_position_motion_generator_start_pose_invalid
True if an external Cartesian position motion generator was started with a pose too far from the curr...
Definition: errors.h:140
+
const bool & joint_motion_generator_velocity_discontinuity
True if commanded velocity in joint motion generators is discontinuous (target values are too far apa...
Definition: errors.h:130
+
const bool & cartesian_motion_generator_elbow_limit_violation
True if an external Cartesian motion generator would move into an elbow limit.
Definition: errors.h:144
+
const bool & max_goal_pose_deviation_violation
True if internal motion generator did not reach the goal pose.
Definition: errors.h:104
+
const bool & max_path_pose_deviation_violation
True if internal motion generator deviated from the path.
Definition: errors.h:108
+
const bool & self_collision_avoidance_violation
True if the robot would have collided with itself.
Definition: errors.h:78
+
Errors(const std::array< bool, 41 > &errors)
Creates a new Errors instance from the given array.
+
const bool & joint_motion_generator_velocity_limits_violation
True if an external joint motion generator exceeded velocity limits.
Definition: errors.h:125
+
const bool & force_controller_desired_force_tolerance_violation
True if desired force exceeds the safety thresholds.
Definition: errors.h:192
+
const bool & force_control_safety_violation
True if the robot exceeded safety threshold during force control.
Definition: errors.h:90
+
const bool & instability_detected
True if an instability is detected.
Definition: errors.h:224
+
Errors()
Creates an empty Errors instance.
+
const bool & joint_via_motion_generator_planning_joint_limit_violation
True if the generated motion violates a joint limit.
Definition: errors.h:237
+
const bool & controller_torque_discontinuity
True if the torque set by the external controller is discontinuous.
Definition: errors.h:196
+
const bool & joint_reflex
True if a collision was detected, i.e. the robot exceeded a torque threshold in a joint motion.
Definition: errors.h:95
+
const bool & cartesian_velocity_profile_safety_violation
True if Cartesian velocity profile for internal motions was exceeded.
Definition: errors.h:112
+
+ + + + diff --git a/examples.html b/examples.html new file mode 100644 index 00000000..7533af59 --- /dev/null +++ b/examples.html @@ -0,0 +1,127 @@ + + + + + + + +Project: Examples + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Examples
+
+ + + + + diff --git a/examples__common_8h.html b/examples__common_8h.html new file mode 100644 index 00000000..19756ca9 --- /dev/null +++ b/examples__common_8h.html @@ -0,0 +1,174 @@ + + + + + + + +Project: examples/examples_common.h File Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
examples_common.h File Reference
+
+
+ +

Contains common types and functions for the examples. +More...

+
#include <array>
+#include <Eigen/Core>
+#include <franka/control_types.h>
+#include <franka/duration.h>
+#include <franka/robot.h>
+#include <franka/robot_state.h>
+
+Include dependency graph for examples_common.h:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  MotionGenerator
 An example showing how to generate a joint pose motion to a goal position. More...
 
+ + + + +

+Functions

void setDefaultBehavior (franka::Robot &robot)
 Sets a default collision behavior, joint impedance and Cartesian impedance. More...
 
+

Detailed Description

+

Contains common types and functions for the examples.

+

Function Documentation

+ +

◆ setDefaultBehavior()

+ + +
+ + + + diff --git a/examples__common_8h__incl.map b/examples__common_8h__incl.map new file mode 100644 index 00000000..398dae64 --- /dev/null +++ b/examples__common_8h__incl.map @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples__common_8h__incl.md5 b/examples__common_8h__incl.md5 new file mode 100644 index 00000000..52b83dd0 --- /dev/null +++ b/examples__common_8h__incl.md5 @@ -0,0 +1 @@ +08064b584744cdb2a467696989af3459 \ No newline at end of file diff --git a/examples__common_8h__incl.png b/examples__common_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..e3ee3aed994ac2c542acec68452a803d1b1dadd0 GIT binary patch literal 98466 zcmaI81z6Nw_bxmNA|g`K(jp)&sdSf=2uPPmmoRh*2#Az`2uL}Eh?Gb-h?KOHbcvL7 zNuM=7@ALl8`OdjMoC{`#8D{_XUVH6(-Rr&$Q&*M0hC_*iKp?IuD#&Oc5LogE#07io zi|`B&GwTNYz%sipFM~Ko|9e-L6Nf<1ArxgKH9b;(PkQP+v>ZlkCcjFxBWRbp*iQP2 zjt=J~ONO*W!H>G3;pHF0VY51D&J{dYUZ?k z#`wy2xG5>hj|1-$&dU?0TgN*&2sJI0%Q{{k3rn3=CiDzi)K7 zh+#{IzIqdrO%D-&fByi9nNVB${peo@T_61Wr%h&l{`w_$ve{f8 zb@7=|j8gXf1kOEIV)VyU-b(!c9n5Dv^sD~)GFb}v=QNFBeY~ z2VW&qVk9z_M_ZaPLZJUqwHB7kzrV;h&(C4WmFmHc9-?v`84+SXj3p=U2^#Lg+h)XX3i-Z>WXcPR@=unBuIv67R5S=g&CZWsSF){SpkrAPsN9 z4y-+1uUT7LqxIRmKpJjX;V?N`VtI!gH?%p4-*))qa0l)O(p@FvR8~~X{rK@?LBWF4 zUE7gD4lb_q!^QM&i=Ex&0b`HZOB)W?nN``@*lN7?Skrrr%k6Zfq@*0BqzKHX>wU$~ zPfFx632}mZ#m{||m2s=jmj`l~Ra0IxnS?Ywu8JA8J3DAN_dVLR&g@T&k1sRtAR-FO z8nO{T-5vP;T?13{`}gl}I1QCD`yJS}r+yDN>oTdlMJ{}cUs+jcY;0WUOo*lxKWlB* z*V8ldm<>)lKu>04-^H@OOF%9o;5aogHg>etM!PXu!pzQY*Bo+e(%y;{z;)cWV!G`}zZjRsC;iC1x`vSun?YyCVCdMS?eVD6;?Qd-G z0^?Gv{^G}Nwa4%#AyH9Z50N)F?8i!T%gfz5-*D8pt-Xwltn=7n2&5}&IIHfrnt&I> zX9x=k3D}PzYhn&8DrkC~cbEDt(|z4wZmX)Qk_GIyJwycMrjmWp3(sBppRfs%m6vbJ zeVAk9vn5LtEss(s<WJfHwJS_WKtO({R$ zn~fMPEiF^Rv>r1TQ0fXyaW2lz?4+Hsx9(f`D3g(;O$5$8oB5 zW@cvE|GZ9+{_yZ{*6A)zuoNA^-26Nlhu-sbM{e?ud3kNHO1Lzgk*}2&VEso54R6rU zsAg+e_NJw#rAf^V4y@bK{{ z#Od#es*>#N7Mn5#?C)iZQ61(PH!v>-C@{t7!ytHIetWy_#!sWiYp!-4w*48lEXa2U=kH5K2`l@-^-*wY*sxrXE+L=B- zOHj>mKYradKU(YQ;^pNfD=X{gch;4}ONiNT#dkx{!Dl{FP(wqb-F$nh&KqK8kLc~{ zmV>3a`7TeEB8>PgU&s6wF)1mhez_gQhz!FPY*Toik|uhgb>5}QpkjP-csPV9UfoV$ ze8Ks4yplk2B%Ok-En6U6Q&UsL4WC}DU+m~Xk?Xy~AVlAB?=dT0MOu`N4Gw16*k~wb z7d&~wLB`3KBBbTAqS+mQk$^{4S?cZHfiIqN*z5n2@cGbA{|`GiIl0z19Qx)wN!=EC zA3wrW1~t!05d1veXxLa<@;F>b7%4J7U(QL-DDV+T?w;TJb9@ZnUcP*p?tgZONAu&~4m2nX$4O{MJZI5n{(Zqti;QbVEZGwd4> zSRb|Wjs$Sg7mUlQ{x`ql>U-44(mN}wN zfO#i*&8?<$!I>gbVE3vhP4v*pC%t~(eC)tPWdV3!MNOB5a3GymU3S7wxgw)T%!@X& zJJ>{<3BpDC73(z{_4*|ik#d<~FJ5?@Y_)B9oV0|K!3EdZj|&imy-rCHabKSpG4}U8 z-d{7|Jg8bs8?Stt*;PpmY!W(TMJY2ZWYU6s&;fdXV^udqoc#s)fKY! z+V9`Q*qB9i`;NvXHqVs2)cIL zqPlYX@$#H>Kgyt{toQFZbwB@fySWh=aPRMd6heTTe~vziaEY|@nk`&(3h?rVmM6^Y}Aw2(G^y(CyoOSV4`86+S*W;ONOfD9=DhfJq z^fgnpjqXBk25hO!m|`7VFFBg%gGLN|5jb^EPh_S-;Di)ATFNvlu2hTKAGJ&;#C{G> z?RWG$Jen3GeMa{}lhv>qX?_2GxCGs%>))uYyz*fPJ-qcdlk25Azx4`Q%!>8d@iO~u z_{P{tYewxxR*NQcNA#7Mk_VQDZMq#Q#!WtY* zy%?IUp@?}gO1bqR3+BZOWW+K%JI&nW#8i0qvx%-?QY9(V#cg3;EF6DC7cyyCh0bre%x?4QH<90$3!h}d9Cet(b4+n6 zMHOBTH7!cI&7P7+3S{=LI8QRt2RECZo+|QD#watr>cGSbQf9jTLdL+#>RmeR8&&4{ zEx)rf%+k+cQuH%hen_FwUVQ1CxTkl;{rwsA)@4uxTOJJo{;G}Ce*g&hQcF$0>Rj0Q z)xGLw>EOWm^EY~E+#mj)7>(Sfd}GQ?c}*s~lm%EpS~(>Uyd|S(CX32Jg1=vX*Uc4T zh4;dqKjvn^#Y*bP`lO>NCjLy}D{qqdM(PsM1uN)_c`OD-t~$p*__LAwAEZ{%ZC7qv zX2JI$*kK7tS~nGVmN%l`Zyz)}*6m;%r7eY`#l;F!We$DLJwNAxi*B!cp%-2=GpHy-ILB*hH=`I z*Sw;2^Z4EKvNJTokU~}WRbO^3Ugjn@r;L0)HM(a^8HssI6Y&fcs1Tu3Y(`rh*>-&C z@_>hkg*pL0BO@Kl3reCdwP#!$cN2e&s{>4WMu?3Ds@y461`d&}`TdD}l-H|K+Q!FA zZ}X%s=eeIsLBJD8Y`N{h`0~)&?k^gEPt%f^T;;=CNiGwS)6m0R|2Kils{cuzaT~AqACSw16Sf8yclx1OqK6ecvS`=Q)}Wl z(UvzNZ`F+^Nz9C|6}XelbmMoLiCR^3+LwFfmGvwS?jPR9iiWWVNI2#7QsQb?8I1Is zS~-rmA<4(b%SI}$Ial@Am1ow>Zuzkfmwn`{NMNWl>;dKK&ox&Js1W%4E z)pN1Tc~Btmap-*%UXaog&0J-hGQw`1Tur&i)`^1BmmOJ{n13!~XQQRR%)IDvQn(rl#y-;)oSf^p)uUEm?3`%Eq!ZDEet6vNbm9 zMn|nB1T|SR2bTBO)pFv3f~*4qMsV``t|4!9YoTuR{kYiJ_kH;N>7V()RN-DG=FqyM zm6X!bb|b&pgXwgm2EXaB>$W!;0=-MlzXVUePUw93a`?~j^$mt8eP^Lb|C4@}7)>fM zgWIBn3>`V>I|6^R>#K6?Cte}rAEd+#&^2n1gqxOYF92U zhF-&azjdh0nb0wR$3uiEp%eRxsdE)BO|&Fk<6Sg>xk-u61n+tiyWO%iqO~7&EO?dv zP|D_kwH>sH)3b*K;v7k*U}K6SB9^&^n}vmSbotVQpg=43H~uDc{IGG*Pw(R6W=Xk{ zAetjoEzfobGN^@Bw+}Daj`X}070x|qQDKU+-~L%)*{eELxpijb7p7s|{%y?p{B&Nx z-fKoxdc9!9#?us4`cA@YR_bQVi)0>I7SiyqW`v>A8ygSt#qmP#7YKOeRlj|!X%+Lx zrQ~CQ%Btb#%yGt|O()W7Q5#KyRMq`8X}BB&7UJ*qROD;R%ZEzl4!XNhlHmBl-2#E~ ziq*c_c#YhH9yLhntiN{u{Wm=L~O|Za5ga6M?F0~Y~y0h|D?zKs8)6vhVHEyB_Nfh46^wae5-*hxJ zb#-(eXlhy)|F}+sY4)^Mhh0e-mpTyI@18 zme~z2zgt3DWPhJIO;Ti>t2Dq$R@Z|U0G72_@o zFO?Z$lo&|>dE;W;;(eHyN}ZmZjEHo`z@j#sp2!DW?rLxSx`WTkU4&+XjOfcQ-p7M| zUOBnXxtfWwSU?N@$^=Ya40@iCEt^mn?sKlU&x#Yi)k9BIv?%2i=8-4N#jR0l-$Jip`9z> z6U_5FE|6o0NxS=C!OdGk;|t^;UWaIx5` zqbq3ciKLLw^x#~TzHSuJ*C)YFs$B=?!3^&!z;L*CU{B-@R+L#g8n791p1Z^&*-5Vx z%dEv#n0*>WqBF4a{1!Po=`~WN%ZOdt$kyFa%eID-Z5bJvO}3&g(r{UK&&I=@22GY- z`RKyxWZb}_BLYX+9Nx_3g20QpMvhnTEuUD1Z*Rx8Mn^xB>7YYtC+q3+Lyk#O=7_T% z8!Ig+csr~eS#c{}<_kJr{UjiCA!M&z`?-Vh<;z7+5vG$gKn2_gG&w~cQEenB7pL9b z&01>OH_j3;@oE3zh<&2nCB){H@RqZ^ksPtZtXER>^_x=bwVu~cPS*Dwk8jFG-)J4bXN&hWa`l>E(><~;mDout$@;ds?j{z9`(KW0pX(rF2ZzRWmN z`1m0bI%l@X;fmA=u5D{0o;5YE?NbRM(MOL>*>VSSPQDKPdR#=r&`SF^FUylZ57PaF z&ex*_JYWX1a}{sJC_r3j>WwMT&1gKl`PJ-!kr7d7^QNoSyGKI8k=@-N-;lcA53jD$ zg++I8&@L;tp~52zq?2LbWRD;rB_$_q#kuw*IQUXX2v$h&B_48OE?WKBY2;%eBw^)TK$e>c=%rq| zVKp0Hq1JaCQdXulk2KQPz0KX1-fa3jw50FC+LUg|MM*?fAp#+-sSh<_qm9s2Ui~tGSrppUn zv}6?O^6sEQTMy)i>)*|M3%qm=tlKRL3U_|Sv-crNkdENm)zVb^&4H@eFpz&EWC1m`+#2_oZ$b zH&Rnagf91oJ(_a&1`roO_pI5p(HIiKGa=WHzlI*27uDC#hcWXQ`8>r+Rb6jzsXIT5 z;c5`s8h2c+oH%2BMxF7$XPiv=&efIIfEWOMK?WUo9~sigeKStgvas;Y$RJCtqhFzs zR)%N<6vb_iv4agzuU36`u2WLJXp#B|1VIQn5cAx)dj@{N^>IN@LLe_4a2nZ7RX#nh za@i}fWUf2e{=Mm>-H?VyO>{mN&P&FXHdVw-xdLPOKA07&kVO=>+m$3FE^eo%m!-pw z23O}A&rLo^TxNea%DH<@!?*6c)d}xVa6K0hPL-7>8M_q*koHsniO9z^SszPFw+-b{ zM@FWqsC<0$M!d6#8z^mQ`RNqbZquiCk;d{+bxMaQzxO=Cr44|v9Rag^{f4EReB}Zpjd~Iv@PeooCF5t zW^AYHwQH%7k<{=VJ~1RDsZ%CGLu6AIlU(zsB?$Xxb1@$3Vk04C+7ZrNsq%s)$X<{n>;KGk z)zM$~e1b6Vdu2Kj>cJ+ET#}Vl59o5K?@5&bGXbXgla{cSjNFHh zkF9wq$yaJSf4#e9I5f1qVsr1P{%Z8W)hniM_9hXL3&o>+#-YG_-6TYhFQSk1%UeoM zmB`vvVb-5VH*Py#yy`1|X<-XCVJH>eNX0a1!}%E@6<&>*Y){~&xXX55==4PP+Hd9- z0mg4kA*85>Nz*Xo;9`GGO02+TV8s}-8OPiP+je5&`HV@s(zAwl+Q|R`R#%Ak_Nd|Z zsEBoSRrt3Xb08f%DZkKLYKo4impD-`&E(}vn!o6r8aiBo^ai!+pTy=_8`}W^!OWX9 zKdmn2Rp~~aP5*RSGF(i=37+`CA`szt88+?QmIoe9ZLRe{QxsnFLp2rMa`t4oo7c<{ zy<*4d_Y>Ym(;5rEy7Jz18m5gW=@(Q?VKQFZ=4G7=s)|>7I|vtkGJgH)tK&SSt? zq5NKw*8qlCWVH67=uvr@H6c2sp-}ltR&JV_PUeiltS_mrH($ZYI1)04`cE4Uh{k6S z7p|@^$Mj@XBIj0yq988H1q#~cn@qUr>APOMm}zf+_xC&8F{%6t2MfmX!L+TQ!vt4+ zx!7i7hHJvPzf_7 zjAk;9!aElntRIXFv)0l=imRJ?NrxS$7#21wBk$5jMf$cikU|F_8Jnx?w}Yupai^K@ zuWx@DF>Y|*U3wJ|Etz>oC3(N6)H+lA$ZD!Fotnba_l4lXzxX9Ekgcrja!K)JscipCB_jAq+=u!gOw*~k>fSEb0-DX(qIG=@yrN~ z2YfN?8D*GFQJu0dNOn>nQ*p5_)iEp@-l}d$cn)*dcb_#LnB7~`e#hQEBL2-G_b4d( z>tCApXE@$hqKu+7ZZ=W(A!>ZFCS4o?6>S0JUlcV_|DK`)}OB%Mo+J79Eufk z1$dnI6}7Y+95xA^k>#8?!6{2ts>-;`Od;2)yF+SO5r_$5*d~?Nv4YA_sLWhNt%o;@ zavx|u>I9sYu_5*61W}qMBJhTd*jX+bFTkB1&>?nG_r7EOy)xIl=W;iT43c;qr!Z*+ zE-Wl2a2fpR#upb6w%1E3GLw))BWWu>CP)8_CKD2zDzjn*_9!)#$VLyZw!BsVL*hPMfy2?c@%|=xf9FFapFpQ$&F~414#<6K^doVXs>%oFnwuQVg^G z{0{HTs312JK%M8l5nM4XX2mx~%JEIFns2;9bcQwl=~$_|MYqz#=LJ*Rkbpq3uQWgG zdSYXb0xw$o`RVE>3$VO+8&8sukRak}!ybTmj49FJR3pm4v2vs40ylXC;0j`Av&WvW zaFutBlyO6)=>G^A!CtU}QN0rmZPqfLeqcCh^q^l`chty`!_oSIw+IboBqOnNKPIW( zbsF^X@kJKMC~_s$)Q_I0d&ZC)qQ%~pTXg3)eWDqSQ#-5q{JHMaW=oU0=LO#vb(;UL z{F0J_DUkeYwXbnAM}4W!=mOu+t@!ecJ%gpO(W$5lF)#3!tr3l%EqY@gZ>Tx|Opq%kw=oBUWZcV00}w3kv43vW?r?{M6D~BO$Se zKcT8IC=B)DKU#pCWQDI+f+zm`dG$lb$VY^WlN0mf)e8t|YV)#2?nPuZEYnia4lo;9 zTHg1=DJ2OgBZ+T#uYJ}spmN`}N-G*pfn%)CA1SnxlTNz!<7sR!zD|wX@b6K@Aj{f{ z=Gp3vdjBeeG>pq{@XPZr@6u0Q`#)=4Wu_q!vg{VniU8oOG{UNdFf_mhZ z{8ke?uy6V251rD-G0BN63JL^`PMql8uPz7o#Jh%)&To3(zL`V8{HU;0kKN6R8S+U? z>pzGM>e@+%-no{6G*62aljOy^r}Jly4IE-#NG(m`@sZ*Q%w78Zu>atUV>2}yyL*7mn=``^Bmuh>+zm_cs`Kv>KRTC%qAXnevjsV`r2 z>Z3q4;DsL6Pm0KL;Jvn;bv>){YirBOwbzl=xtbXYU)2-{A}DSuD9p5db;25d;son_ z`t|>&G`tB&+f(kj?9GN&_--~$$kVFqxUyGZ`o8d0$m35J(hAyVUfI(|ycaNZ8Zy$lm7t`boUG+g5vs}@E+M0nykF1>o+l9O1I50vxar zPS+f_`VKE)k;HYl?R_Lll^rj;z`zr`mMSIeX7|TLN0Ai49SgM$?u99SoPIuS`+_g? zTOOe`nbz#6R~QLG0E!v&iZ(nJQ=2d28>NZdvw#EO$`v1Dd8CU&#bR+=IRtqWl`cPa zczbn~H7z7p{$zV9yynn=Yxn?&zDQY12JC(bmSZ3keDYGAoiwb40WWlYwGXk>v*6rm z{`M_pm3v>P6iS}pc{3_=M|9>p52BG7j(Mz`RR-=`W-hwAo$+j+x1EzTtR)B-*&~9> zuScO5lc4b>kXZX+hNT0 zUI&x%G~RX@MUR&`9BJq7b9H;Im7T9o8P09d0nYn9x}#`B_}l5<5zpu^ zf7WXhG~jeMO#QCk=(DU*0-c(-tx779COo(6@vg&Adw;B{icD>2PcFbJ_n|tW^Y|!F zMNRD9lSAh_@j^eC-vV{y;yl&c6><8zqyZA*-_wtT&FxMSaca+RWHlisJ%LkMnLb_b zcmD~8-gq{iFd5bu&DZf|+~lvjl>g=(2WWHcyCM-MWe%&c2??F~+LwV}BP5KdA6HW* zh6)c)Tn<{~S3c{R%&-t2K^Jw`U0+c#NY(PaI`-1g4R~b7J~DC#@*p`eG;n!)PZpal zw@t!+iA)!T3awl4;L)Rs-c(`Jy_F>C4CYA(cL0DnOmS;{sCa2xmdYj*-}y*m_jM6a ztxPyn9Gn^Z8@_o+Iy1oLcgy4{H1R~|* zN4L_5yjlb82mKZ$_d3j_e0<%JPTh}d0| zwK36Ye}6eTY<5n+s#V9AZz&Jot6aWCv<%=+aH^7vGitG!&av}bd<`Bgr!dm$36c+; zHbdf=^B(2@$OXcIh=c25ljGrbN<5p356O@AtbwHdU2Vw#&7uk@8~@f&(X_M|GQ%7D z=8)AzMyDl?7=|W<(FZp~g&6tyFOmjbMC{U-mq{3d!UeWzI9amN{bZ;m3v**?3>@%6 z@3`6NC@KBeUDCahIVEaNfz^rQ9kt(2g zZU}TKszq&0T-^s|dtCr8?}}uIzQdT@Dub-REN1cKYCB1P3*R@PQgvH5W48gK$OWmk@HfWVq4uJh(% z*DoJ9K6|coD^;Y*VzI|%yqu(1XOQ34LTtD156X4#Y%uq28}0Pj_xlI9Rk9c$ym9N# zIA7WWv4QKnCA553R=OF9{AMsP47DD0UcH)q=@N*jq&AX_{Z5Cs6wZ{J4#{;>%>Pvu=2yvzQ+2yQ7jF?O{rb3oenJ~lQa zHr8t+HrU!a=HYwnhYxSQ+n|PK184_w56_Opi^mNor&9hLnqIy7sI3(*iBQi7D~O-V zku6y2M}^~ZUx77*V7jk%spk$o=3%N;k9x6JkeFBjpQbin zeF?CH-DZ+S42YXB#}aD9IEIRf z7-NPyMx4ziub|-2)045Wk@4~>l^~c|ML=NSUI%1WV&QAW{R47hh1#r>-@%mdew-T3 zfuf0f*Q^t$1dX*GRV*$xG%nyB8hx6Zt6oeyey=ZRrlFzZccw%ucggFQn|Gl>j3T2( zSXM@Uey|k1x%tr=1pF;;v~a-w&6`>1m$RMBsV@ zlAq+~&jomX`*yCldtrUHY-F?P{QO~VE+K>rOly+zk_oyPYtv+%?@FSD22gU3qZ9#V zP}9%FA}Xm!O`unT$^3+nOWXCnz08c8zSOGIK(=t|?Ls5-Q5}iCpI_p)Z{45px?c5t z&k*zctoMKR6RN5nhYV+=Aa=V2lx%ztZtaRqnxz%}9@ zHRZF)$uxjvFcWigV=jv;KrBYe!2u$%Xnu=16!aR#ZP-9L|KOptcll*k=cTpmG$E25 zOoxpXlyvuw&BoL%42mC<9tV>r_Ty2$$7^5m^WiPu6CjDp(^8)<-R#&4CcGnlve~t} zoaswVR(Z{$q^`1ZzcJwcrAr!hQ$#d9-+D+Fe!loVkZH<8NUjPi2XyesVXOF=Rjm`M z7}_TAIXQ5~WZHyRrIh*HO%Z;kxcMXZ{{psYY(QtVU=$6aG1WZ`f!|MS%% zGD6HP5YCtsE_`AkmO}C|-+4fAqcbvc0Vh}lU9y>Y=Y9C#+!RRNnGpV{;O*?H&d~$! zn*Aipvz<0tm8VbXWo5aJgs7Y7+E=lj_O zkg67Yh7w*6x+BTk&83u-emuYO;5w5GFn!0z(q?4O=rKO)HK%Lao}C_y!EvRQ`qA1! zJ4OMGmLWgEEh|f%g&*h#4t5|TbEt(yt7;lMl^`e8H(S8Q3eqKdQYeDZ8(+kG z_q=R9J@qv;2@>u%9A|<^7}_t>7G+uAheK(O?B>3 zTb9PPu%BckLzkyz(se+?3QAeJJlC7a-MShY#?Y=nE`2sAypDbG^XEBe1Ziti<+EH4 zxs(0f>Cl;XY%;L$1368P6f+($re9l~eW~dX?}XcJuCXm`2SWs?Wk}Zq9idtI7LHG{Pl-OLWxO!|IPr{cs1obWf_R;*Go7X{aT<67a zUgo83$RX~r87rglz=-o^+!h7J9kXHCyz0>J0hA-1$o0Z(-GO}akECdOVTXTr7K(Y(8Aa-|`A|l{sg?E{$@4^i4W~=Ro zkGU~qBw8dST4}=WAV_4s72K1W{011A6e_GvGT3VfjQ0g9$4i;%(54i27n4U3_)y~^ zP8H~|6UD`S&rXmfqecb>Y%vPZ9{mYG4(5AwGy|F^{C{I$+ z;A9nAX$_~^J72Df16@%n%f!!bw*8ZwCVF|*XHL$3#z){f-=z|O>gCQIBpkLV|92?Em!Ma;OU1cCkO+Jt$Y*@1*%8gO z=4By>B;}hi3RiIop*S8|Mn+QH^!PJ7xI8c)7blHkM++A>hNYwxAL@cbpIC^>-6_~ue)BHYL7H+Vh zzyIX~^0ZG&ExOZ6OBITBkiDW|>eUxR?(ihdtZDF3+5=V+^{p+7_yu zMirMtAq>RJKQs=m8YIyy5gIk!r2Ka?N&t&l?Xxw)K!LDPf81Vb{ggWqYMjQ&#Jf-D zzJTVD(_m>;BBXpwujOX6PtU@4_ccAf4{yv5_eP9+)5W>sI>>Q9%wu7&ilme|ng03` zoCGx|5Xu19y*Cybj#ke9x4wl5H@R`>6$yWoM%d`+7TmA{myo|oELX$BZK3=;n+v}V zeOe9<=as=9&_9@;m!1*7i0}oqSWvh-;X-q0Cn#}z{2F1Dw!>Y}qq{mpijd>wkC%k?i*+zJ?3zBcnW#IvT!$M0=JIboI4s;jryNDyP`5V> zUI!s)v_l!QJRl$XT;kSEg!@&$R9qaP)T(z9Z_|zapc62(qM%INm7bm!catdWPdy&= zj2a2beGa#y#m_uUdbA7;3x;f%l@pzQw#R^r!V!iF3gR>gx(`J~(^W2u0T`EQJb%Un zgk?1tRu7*1csveA=3&Dc+LpAqQB=46H=FFQGt2qzbPoh^XY+$2Lrwe?394su zT#M7Az4mLpYrjWJz?4E79tm3M)q)BU8vLVRQ6I|(7A1#M-Wzp`Y2M0A0|j`22L2Q# z#XlSt>xL?5BwvA`{Px55eapMAU%#H4Gu!P+UKa;VHPl4R={`h3P0A^Ew^~Du4Gkxo zr4jWcH#!YJ|8xWcMt+ug^9{#|P`dV`z2nwMZ{OAkeDOas3M!EkBNr}m6ZFYVPS%|3 z>K^W|PoAfU3RmSTms|C_Z*6f+dv7$9+Y4)J56`)IpB+gc5M21=PCQ9R(8v?pZns3C zxMXB%|NK?(J z_jQA84Nowjl$P>gg0M+Qgr@iOU|QVeSJ%;z7s%mlhCYI4q}qTpx-IVYYj6R$txw#G z>)0LEcZ3zF7>}f3<>lQ;F!lpG6Luiv%3ts4RZ@k}QBY7&(B0iV@LnaE-B8FE)k(?|6J*?6cJ}`M9mVb-qABLFfE;$$3Bn!G)z;fH_i*ycUKF zVkai>J!(mci&xY9&q5)cfiApg9<~Pe*Ilu^p*0QCx5e8QWj409b?#mwX^-2YP=equ zBEYn^x0l^;uQEUi)#c}R&2KT@x&5ALLFO7=CpUzITv0?bCyu<7Hz1<){+9 zsm1c-0{sfK@_lO3;V4x_NlCB5!B9r#D@@YaHr-T$WW~<@Nr7>NL+XJQ9B(YDrB(;G>EH3%?c8J*B~O}gaQCdTTh&%Hn$ixK3I6m+ z3y#Fm1miSlZ5|2nA+Wd-^M*FedAiR|$qqIeG_{985}A7EaTm~hP+m37pF&#{V%4;8 zu}Tj@Mw6AFg$28gf`THr{JG%Xoj5?$JL4{r&i14aGW z&yF~2K0PNVZm*wxeSHo&w$|27vrd_Eky4Iw^75JPP-bIFe);mn%f&67J9!O~iaTJC zQ_xT}984A0BEW*Dv4@s%1F5{W<`_Gyq==b!No!ioEt*b(KMnqgCA(Y-ql(xk3ykTb4seJC{)}AhlWt@ z8R>gx%YK(FHy(k`ggO1B!k}=x#@$*;sj{fK>iX28HcGuKS#SgL!{PY!nOwF8m;#Rm zAPp}hIF5c^Sn3BS#-GjE<_i}th*Et$=2>!^N^97&qPebRY%C6jFq-`~v&(zRI%Q+9 zl^u_6*GY#-Vw{yaPoZ_iS}%PXH8IhdSZR_cxY>0>wdyn<7^*3jR7I4 z0Ly1Pcko|SPC8%(NzxJYq=_E)%hR4d*}EP{cb94%ji%P2v{y;iR#$h*3qtx*Ag@zU zj5b%Cg>%)ncXU7=9 zvfJbp3-QH(XE)=n_MDQfN|MY3@$DQT8qO<8SxIl`V?LASwJyB{(IKg&Y z|GTD%~7!05_x2(3>9){kMxzYdctb%))8)9gB* z-mT)*xNrD@1t~Kl<^nYYNPwNxYV<#4n#ef9|?Ey!T4;2+rk8 z7XvDc?Z7F>td`~jcm;5mRk2P+X69mVdi0yk-(cVaBWqY#7&$JJpx{Afv{?1>1;^Fj z=*FMVzHa}o?$Grbu7yc=S_+zmKKV$>J@~AiWI?se{;aGlv{MuI+;TUWS@Dme`lFR# z=+<;~v9q(+E=yL|;Z`rt>cipJ3q=cC0+(@AR1}zx3C6y9<(-b?>y|jpeo+%UG@qz^ z3VrOlPG(Hk-4E4Oo@7Ci@B7=4Lf~8(uwoQSRnCbc$Hf7sPk+0=t|{Lp%y{6*;b&Y> zyKs|3+3^dR;dv*#ZO8J~+a?p2nn|y^mbLwNPi(D>l=I3wL}+&Xf|^#`yn(m*YqYwT z${E)YLYj{nU%HJH>MVX7-xj3>6#Q9X4inK+Mxp?@o3RQWIKc`zaUJF&Vb3kO+s%0b zWWEe6Gs2Th^QWg_nyg`HH`a5`nrp37%7|)0?2DxA?K+?6n*Y^LPS(}@Y{rlNtTSjm zFb8xuN)S6jg1lEH93{B{oZvvt>i&A&vmW1cA^v@6#Vr0}YTRRhWk3Cg@3|u?TIc8@ z8j4SwChjjLWN}=cuUGa`fw3Nn7+>3KH1cuV0$5mlXn>>{mK4QjUPgv43il!b{-xsKyM>He(l1AGf)&InGWOJ{Z|XX+h%Uj`lXX7 zf=_B3~Umq z!UuSG&Tvq{sV?qI{kHe@8v(I{i3&fzALxeG>p|aNqLuNeW1hr&ab?a6C59VMt0w-= z*$UF4Zpwz+;JybqF@u@_F!NEm*yhRQ@q_;=vem9axW?~Zs;U{!X`Lb`-ysROg#H?Z zXo+Q>{53x~5$?KyacAn~$4#f<=T~B|V{MCn^oNas)UZ8f`xEyY=uLJIs-%z)Nw>Tl zT9K$>D$~1KjT+F+AGW*hQi%J0Qvu>D^I)YB7f$ugX+4Dsse4T4}L2s`;wW&AeA8 z?D@;R_qp<4L4?qL7y^?=nf1ohRqy>2=+IvZe0G_Z>bwzS-puT7eH2g_jo9BqT@}H@ z59sF7rAudLXZVl<0221K%!j0id8+<)TZFd&gaCHG(*JbzDe_zI%$;`IvJe)r^aiiJ zm3X#CQ{9qaM}0fHa)jzn*j)EV$dPrt>OTKdm-c1)EHZ;c!R5r#^0D1-YKjoJ{=q z8k#HnTh-4wnN*9Ahd{b!gYNFnjup_KgW`D=^07TeGoA@?{P47i&$ zdFrB}I|?;=Pu?S8BM( zw6mkv3Wk0DnqxRvDl0_u6D9$s#=^h9Nbc}_b>J*2Nh6}?6M)B@|HfRC>dZOcBb|7IFZKBb_NwL2p1*; z^M|`f?Rr2AVp!7ySq{8Ov|cQ(Q?*wfJh1yGi%4j%GOho)SLIXnWawi$aIVIlPxjHG zQx_5e^Rgq1^j>g^Ye79|W)TCG^WU$Lse4Hu%Y_Az}?5KVFO$Pdi=C zaiNU7ee_V-UuI#HtDN=(WxPG*9tf=Xn-0;Z*1 z9{)x_TeCDFp5LJMkD>jVV!O>AJ@VSu6&qUx?1wBrLFx)uqux#!_D5Q9bk?a-Nch@c zU)=Omp}phCZQ`SHfk-KoqvMD!yBkuFC#iA%&Rr@m1qDQ?H24(_IDWTk$b!?Ad+F-=O8#_^Kj%F7vG(4Cai(syc*P%RSLnar&)nOh5<(o^FfS{FG!D(&X+QmwamOJ8 z&iSpj0a|Z624ZulxXGVGCn0m(OZ7j>;sYbGcqOmpY+Za&K0of03q{(=oCa2v9>rB3 zKh_mL$kv1|UUMXgvY(a<1ZnQzb~h z(|aSLeu0`dBXhLBp9=M=+3Z@V9v1i^nYdtgxRfYyj$}Tp1EU$pe2twwYK_6+)BWD1 zD&iBjHVE|pS|ouiXC#^$iGJ7nL9-PaXIC>!jVeZ zM%mTFSb5sXKu5rT+)^^IWO#rGYWk!DHcx)E8_d|&7wuW}z(poY1(bLi*6d|3# z%fA^fW9e;q92jpz(zyu_ueHW1^fXNEty}RiQg%l*@3DTYLH^m?>gw|6)OnQ&&74zu0;YaG=}&Z8%#9$x0=A@15)w%E%7cE7^OG zWRsAPm7TrGCVQ`tWbd85c|Q6bzyI;P|L1jdba%JtJFe^eoa6qvvM&UUif5gv%`h#UOt&I1PTvk}+bcp;I0AH?B3OHo}$ zB|4GpD8W`ZkCnkQ8?e6@#vQlQ!|ALjdZ_(ykB-(9cF{PZ!de4)2$k+i}+KhgPJr4tV~6BBdzrltnp|IT>3e%t>?Qj%=sx93#rgrNlZ7+ymZ&3jA! z+}x5z94upb30&{R^k?@GNt+nQ|8jG)Vh45`y!>T>5fO`MP^`@o-jYhe>Vj3Gk%)#9 z(s-7eS>YHY)?AXx++Y@vPIVQD`HjEMt*SQ~LShc$@ zVTzs1^fIjUb1|PXFp+ypBx$ys2Bzy{g)R@Yp9ONz2A1fHF9qDOx1v&Yo|o9Ur?A=G zW4QBc_iy+rzN6zzWkuKV&UG6x;cZb|tlAmZm0xI&6T3U5U6*3GM@N5@2=<5HLw}Eo zdce$Fy1Xn}qA@X^jTzYTf~LBZqc)8qFXKJ0JI^&k6(W{upZ??RQL|S1qt-E-t%^P~}HjKIMn6}P~Z(3CN7!R5%_@y#EG0 zERt!3jh9>BH1f3@>i)(yYO|XN_E`maPyMm&zPA;Nnk|SD-u4tyMDP z3K45A(J&&7NKWX%#i*vH77$ADdi1E<>KI~oZ3f2ALpLu@5&W7VxfU1Qa*Je)n>r>z zl1c67IIriWqZS*nW=WdaLVGnP;o|gHuA{lY>?+Gi_v0x7SQw^wzlUk5RNN95Z|9xn zyLlFW_`j>EsX#&5)N(CPKnxI!WyL}A&&!lFsi={{3{_QqvbIJqe8JEt{7p^EH~KjX zuME}iWK!;8j+b;Uiekd5>7l}{CicEWq70*Va1s{nMrOZ~){!*L66S0m%JY&&5LU4U z^)2&zYBJzCJ`((m(qbi)(%?~DTZ)d7u*rCuMeJ0I)~O}3qLh=bH}5NJY|H;F z%$Ex9b5CYwcD4^@1aGNa`dx$C6MC!@+PywrBF~1VDC*OV@mR`xqqy^dYiZ_p?%a3Y zG`qOi-Fq<*q8d(AzqBD}DDiDcH8IU5AlkRHk4Hq4CAL+z*B_l3K0fHpq zs+px`6_r7Pim7ZH4m>taz9P~eq+bX9Cb%O~zW${F+o`hd(+|0X$fBu=E(6J9oc!DJ*Y5ezuOP{c9 zl9F&prG?@JJL!qw(BSA0yzcEW0gu(X`5dqVw9gyt80L=AC@Hb=L+)0< zUC$VAnYB!mezCl(G(4hQTB>w<5joAv5*wfq-X5lDdAXcWd3Huq{YOP9s=>?iw8qhx zo<7Je2=_r&el7t}tt2(Da%;TJ%g<$4F%{M-^{B>WzfJk?MR}pBscDqr8?eI~Tu?F|eNQT=44eJ-xZR+;6crN0jS70{6djEgR1 zY&6Kpv1-9%Y|%`YgpG>$StH-V@=>WqqM3t|nwqAuF1+YFCdP6gt7|IYe7=1-b_T}#T$vOKjJ8&Q;tVpHw0Q}28+|V(vkuX+6{Hc5YbY)dMk5BYi3shiGKg7n9O!$Y_81oyy2pB3GmvS%?VsN zt7(D8x`%I0MB~h|zUC5O_(we2xa!gUpxuzK@m=xn#Xe)?9@Breik$b&db}iC<`tu6 z4xL8r%ges~@)a#}qN!0o<`i4)fJXXzVua5?PK@<5XdRez(#-f*X4ygHYIH!IWC*8 zCp~Q-`w}y)mpAUg?(y*kH6F8zoKJt-oFXRX6ESjixdhYCS; zd0W9l8c}H^J~D!!MG3z>x`sUKBTQA`XmR1$$-{U4Sy zzxkxJ%mG(}GQLyW6IDAP<0o#cD#BRYm#{M9s6O#2LWQywM_G1s@7(VORquEc!R8Um z%n16(mw3(*!~fa66DWzX?uTPXccqU04wDL$G92BY94XC5^_$vx{07{mvRM80Ao`AEWg*0LzZ0V-B(!5>C}m(QTkcO{4|vCh z`#S8P=vi7QoeD+lb0qn~I)Tq3O%P^NZm^-m$6&-a`KYnEuH@*L)0`(tp^u5d2fIre zMWJG6-+*a{#LFn@ay0DnP>HEWk7OTW3wnE5!Od9eo)2aX5dSVJBJ}8_x)Aw&g>2^1 zm$lg(!Cwbzw=(zKkIGXOgPo_JoX-UkEw3p2`HJ)YO%MLd3IWpV?383cB8EH(=YXYB zT;_Qe!%;ynL_i?7^3|`BM|%)1QdPQf=;VjML-L3uyw9lgLHLJGJ@ACdW#5ybvasXe zr>94F2Rw=~#}oZucaHRP-W16yA9jhi8y_dPC~>3U zIlD{!)*)Q|03B6)rT=hzoc9qwRn`zXY)4+RzPVZgF7OL*frZb$?ZOT%0N|j2SSPK( zToe}{`=;gO;`dv$Fsbu<3QV4`eeI5XKM)TH2m_D{yYy$mc$M5c{y(4viGbi{53*l2 zGBwHiu%%x=eanU!;XFzuH@XYU%bSgzom@~5C5*MR&-fi?@cTzI)(q3P#EE^nnFtwc zYE)Qaar|X_`%P|@6lGA=mwys&4wlRuw%ao*lK$zqXJk!>&%(S^q(PpaL!Zp<#~#@u zLi}L-zJ)B!0tctEs0cB-&grQ|>oAIs{&B2s<>oJ2O%`5N6(hm3RSF|L3Ne-VgWS&p zL?@eNS&;HXZP|ub;=1v=%7Ooi^M zVE(s#UtWb0tw2fGw=t~d;_NE*J0a1qojwT1wn@a|%J1&ZPotQYIC|J+6j0P?b$+pr zsaarob@3RBdk$??Ya0>HeNZ)gCi4B6JjSoRK{Y zdWwtulJ2C_Le%C_AZe8?fTS*?_CglbXMv@8&qqfyIY=JiBEx3pFNPh&*q<2BuFv|e zXX&YXr2^GDtfnny4u4M%mU{dd)zDY^lkVQRd_?Z{ZFI~R!PC2u)T|o`$*tlyhA6I? zJm7$(l`{DB{{D$!SZANCn`^Nn%`Q^K=Re{9m~vK!=msKoAjyU!`3q5+l3bL%0Qkq= zt@!P>Qy-&M`I9Zav-j?Qc8S&b-4mF5<nI`&&$pkFj7w?CTSsGSEL@N`zm$ zzxPX7OZJK#A7dYOjPvM5@j)>S)K z->XceS6HZg!!9wOrBDgf|B(oLE?hhb-E)eRb7a{gjChV)Gc#WE64qq6iNeBFl}=-i zoIgpd#oc>RiWFEI%gX4{a4SBnug4Is0DS99?u*cWAn)CHC4Bwn3ML`7Jj}Qa4FVp! zX&1wpb4O0qI@XXj!$;RBGd2ALtW6K6y?uwb?3!xl63su3#oT-yegoK~3JVFRZJ*sv z2tRp6!y75U6gPXjE*cj(vg>=DfLbdDJ-(f?QrcuavG9q9F92i6xlNAoaJf6R-&6SG zbiUPQ_<%jk$A%#K#VFz<4DX8tXW7itWOs%X&&n@7nQd^_{(VII!0niIDw}ZiYzt|l zK|Y z&z|+Zf|8!8no?M6BhIY`R#H-CY8;*At3qmRe&8jE#=zd zbdkI9RwjYV_kcjT^qyrRX1p*cavG|p5S(afS+?POcw5zXkIdJH+Yr@ImNY0=<@58{ z0GLj6>*#h?6>GGG7zlJHy<<>7MR<#I?7n0Q;|j*O@Vn6{>-IE~^h zM(s)#0o&&G)~H0rVj)Y+#O8Z4vvMsP;GD|Kb7nF}CUV@aFQWk`MYg2EHj;)$`t6I$ zIp+_2LyjCxc&Hk$FB{-ruKht2hq`m>Z?Ir1mK5NMX)&^rX@($heq?#y|*QQh|P$cuspj87am?%p z%RBmi;veRYHThii@!~wl zcGdLUG2ej}%E~eW>h*hK8IfSpqpT*hKOTd2DPxcwxBKe**<1)>>ZHJNF<{#JP^oV}Gq-n@; z3Z8F(TcI5;^EPgm5(#`;4JLva6nSdk?38CQV}6EU@2 zIVtE=+hOjgRnX5E5_8@iFk)~r+&=2#Td#KF{jn`EGWDCe(28_(Rnbkri-NuSs}BppiN~^ZDWrVn;gNmH z{|Q(jF>>cQF;UDs5t&=Y*Gp5okYkC_w-%Q|xTB3_@3cU8?;kwq3m#Pu97-wUT>K1BHV@skYiEHvYy zZo0|QiYxx%-5F)%K~2fj*`n@CNudnIzbXtY)c!6>aF0{eLKv{ zXF|HDl<8c6=d@IB8~nKYr}~Q1^sGO5i<5XWC#SV7bU&7NSF=FD9`snEAQ~^4u7`54tb7R#WZ@mR~Hm9JVxv!7o@zm1sj4pxT4BFQM%hkC+ zVOcrq?cayQ5kv)c!zV8*ZiR;r*VI^_pC94~@m>29smaHSHxChqf5^)6nx$P|RivS& z#wWBRV!>z9r23ZM`@x*{rx~K}M_J?GpN7w=eiyP3bTT20%Vf}Mk?F}Dx!RvYG+H5$*@9{ciP11KF&)EZQYv#F^RRL60|`6il;o>pj00Sbi&z zD;$|n{MLHm;RJ*An>Qw}?h7-%9o9-j^c}pqyzvR|7P5@KLwN_c#qH|ieu)nLk3}+h z)q;f%cOBQI2TA=$y_`M3+OjK=1>TUBY}-x69a~4$Q$oZ}Pm_eICRc1+VAgE03N$P) zGGCOMEvf02MiIp&jUbOKmZ117@gquF15h5toOFhf4P|^7HC~AdgOD8>-tEwinbm7< zMJs~asPDX-$ux6DKT9Lt^%EU3o8hgE7%Ko%W9;(>9g(iQL7J8jh}qekXn?0wl>rkw zFektFi?Fcs?tEPu#dch{G)rtznX;>@lwTJW(jCmi<`35)kM;V0mt`~4)9b@fUb|BW ztP&f-0Jsq|b+7jJUH47uj;H-za__Y! z)cjtPm3YqKXj*Dog(FZjNWzP4QuVr`>fpgkV;=;89f*a0j3(>zOilPzJyFOl_`^=D zFn#+rI&Z(3VW~#`UpFKwJSRXLFbeYZj?XZGlykKk5dfDVFV_wZ3<);VLcfmwu3W)I zvhl$B;h*~2iW<$6K;it*fs9)>?~oX@7N6AXG4zh4Y?M*A*ZpPPTt8nO-%*5C1u*$y zmrmv|r0BbQI7K&HvF->(Muv*4N6A+3Kf)5lg^8f|1rk3I-Fk>=?NY?hWZn};S-bU5 zi=Y`rbm%HJ=~U+5?6OA|UR(`CAgYf=%o6irJ=8vv}op*U8Sdy^74Wm*~w3QB?Np}}*!VHz$EO4t56g|nH= zOOL{lI#&nTI{=>_Ulm)e4PR&!q5q?L7)~xlV|zC2PCXjF_ALVs#}YfRc5vn)O6+v* zfuNTFKf|_(iWf7r4F?{;ubJ4xt5`K@UFBYQIxAtofgRYq0D~H7pg1(VQrvw`Wzfvy z|E>iJo;^6=orI42ha?dSG?B%~V(|afwwR-L<{jJ|`G1*}gA`a#3e=KY{ghsD!V9MY zLLQPWot>b4(3@|7%@^4h&nY>HsZjlT4PFipOGj?l>P~*wWBbLb^Qo%56R3q&gUrdT zbj82M#uvj%UdG0-<}ClRP@ZMtQY>ZBCVsCEn%7;7>gaNIUVMxc!AU5}1^){gcA!p~ z$x)WvzQ5S^duE_a1ovNfii;m7SWnx-9C`0=m~Eap0#HiUb+$IwS4V&;;D`oHj9(=> zL&)rWX19*IU}g1dmZvdX>Fq)&SaEe_w=#qI1uwX=QI|E+3`7M_PyQQ56xO9K;FnxO z$!g+~h2C6flSV+Rb~8}hl4&e#_Y7f!B47+51bEr5Rns<)eA-I+j2|$BNK6mcYR{DC9GBDKb_h*l`p7ke2s;MqnOx5I; zaxlF9h#sBf^0MN?qYbaqrJ``D4p#5#`H~Jo$}St23f}X9OnB-6H-5z~oK6vFqb<_A z8JkYLf2E#0B!!vS#>GbvBjYGhzG!l5-wmFChW!=+x*@d1?)1b)0P zB27_U8f2OX^caCHxacA&B-OSQy107CNUkDzqbPXq$e7K_sw*@ZvAkL9eP!N>6dJH~ zsxVkN=zVNSl@Gc0yt{%=%!H2Ub0ZWOP#r3&v_9~=Pp%X?IZW}?+p9^hn3kG)d6CU0 zKvn5Sf?$F$y-rHr;F?9PbCuU#*AxFASiP@=Ph}>Mj~PIV>Pv9O!buQ5(c6dC-cJib z_NtgR+uGi*r>g4fzubASTz4{`OBbFHrto8~SS9zVb0IA8SN1Ds1!_dmGOy}1id}54 z-l0^#d1K3NfDa>iga6&~|o0+46vLo)j- zD3lUU;2NHPUK}6m*R12Sp5M<#XK!6Q(5a&n_SF3S zM*uysU(dr7xEA=VL!IqX!OP3d!q=yR6J?h@u|!r=ZqM||X~!7Ff>;fT%;Wp|XReMC z0NvE?_fHfxxY34625-6DpwBE~cr{lre_05x`@$RBbbIOWO#j!yG1^0HxP!;1h)qwH z9L}^^ie?^Plw{w+z>f(LPmcx_1Cg9UI@N}cD>5!jD!tPPI9-xZ$!KW}E`B)w<6Y3> z_%Qf=KFti%N0s%{KBMb(vgIM28tS7Z&m>!HW%q185;*W8_dVrzd*D zy|;x>pi;7wKYxF_#p)PXA)Bj<8x1)rDK{wa?Q~rt3Z@;cB#t`l5{KhBL2ccmd8SrV zHRc%ji}nN9JJ#2I)<<6zgNqs)u8t-{4Zq{vyqqqSN+bmIfr$Jn8NBPcvN?G| zn3|c1@&nwH>9@MN=$Hth9-e|*DRLNoct_&f5X7|`8@22>zR0%emzW_UJe7GK3pgD1 z(KWrnH<_cqn*zTM$`%DC$y+b>0~TTq|MW%Hh^-UU*`F$S(K1;h!DP(R*}B$BbBi#1 z9v+z0)T+Y20_ayLyxlqiX_V81&9txk+qX_8=B0r+_Ro}3gF7RCnC^uVL^@4gc<``6 ztsER^Aik(ZOv14}F#>LLB9K%7(Ldnre_dV5r`Gu3{J2W^d~*eqVF2J+x0BC!UjZN4 zvjk9mVW+`8u`dg*PHv@>8tkr|f2?$2WFuZ5A4+Z2ixTO$fE!sd!Is{K<5+lOE)sa+ z0MW^rUvyKAjhBO|*j1D2YM)fql1VILF7h>zj7n*=`%GXCySEXNlcJ`ZR-Dx|6TTw7NfY~8Z6Vwlq>*E7mXxV&gdu_K z5ws{b?7;D@qf47Xo%cb9x22yOaS-~6z7F1`2Eu#M2p@fenwIu%um+imuhHY6J$*Kr z==qF41xPJcN!TA$ik~4f4LTZg@lzaA;YG*4kTqwB?4rufjQppwq>coCO-hodmDfi@ z`)2v!K;sV9s$Vm1WSq8Q6T zY199)5?r2z0L{O5dZ1B2`w;tjKc!>FWnuR6SiS!0>@0XZi8eMDl%w}B_9tLx=yC*gtgOYA`S5r{m0R-Mi_or>UgNiL`Ry-9DLV}or?0&!^x4h#Vw zmn|O`b|5)k2{LHxqLE#EdI2F4`>=At3Mt!`I`r)%A1i{KCxKDP*iltXF}>u2)u(Jl zie?cG|97S(osl8X_sh{N|C!jJ%Khy8@ba>zLFl!5Y;NB3%<)Nb^m&_aV&qldg0wU` z=^5sYjlwds+t&`99CIiTLC5kZqZ_Wd+4!DtQp$F`DKXF!xo#us)Ag`zHn2ssAKR*m zZ5^wJm9Em_6ntYuRhC-kKr|Va26TNhNBBJ%xUqgzS=l{S!03Lu#BJ-Y$lKhxlm){D zNLXj(ts9p@Y2RVXBS!4J*Gn~A4NtA~&k9q84PY2t1hOifjs%ZYKE;|!$y}n%DgW1y zr^4VhC-xshUfb@qp=1zh`pTR3M&F*TBhQ1E3o}@3nFZ+5QsTj)!Ydu}`l;5Y$M#AadD1 zcVv;Vi2_lxNH2wK6u<)?#o;JselMV7VSG(5so$imx>+h?L^iwZe)tDH8!Fw~UW8w} z*8?lmv{@{p+NrETyy0hKOVd9*en4T^#zy=z?0(og#1CM-W0;42Gm>z&fDW901lL#n zitDt%*<&3fFP6{EbiqkvmeTJR0-~eP|Y4KznSV zSuBE^XZ%7(6|*MF#&xR#NhK;ZF`DZ*D~5b?3A4#h>)hWrpf6%fvdMT~22` zlvW1<_rl-r$6qeu`oU5Fs^Nm@%J9b4jK|2)QY^Ee;5v{lhZ{Y-7Eq=vQ8IbX@Fczb zQ=@^u&1f!OMva*pVhbdssA=U7lKF*^opj*fw??BsCV5|&)= zlNSC~lc$35imDqw>AT7Xt{(V_*6;Ttb*jk2mZR0Yf~mp8lIOT+P*(j28z`)jNkO*F z0DWFI4TNlhlb@;)K4R2S(r|LtbDD)tBk0Yfjx46a`ye4p6Kxy$fHH*wFFISs+?wKc zU<<0Bcu^oX3FBZcBp9U(IY}PzC-vzSyVq07yZ}vJo))2+fjg$vAQG_A3mR(X@K(K# z;Fhf0GLaMT@>VRUd`HOzvrwd&yW3CfKsbv417%=k1O?GVhm?`hj|I0F96D6g;V+kg zz%?i-t$sBIj);jIyIN0VF+0FZX+}#+CGCe#Ls@~W-kvH*@f=%pa8oa2y3xlfCo$SD z3_h^J<&{eil1Pmb0&H=glbBt*D?_c~7HNcc$A=N?#wigh14wfFf4}7w)V0XxT-aFh z(rsR%NY*%Y2p!CP?XEU!9k=!g-QBsBa^xw708$i;0o;#_OHAnL9avdhD%snAgxmU{`^9g{BNCNSIAkkQ&a2r zXx&IiYP7ThqoQAe^K{y_qZjlu^!I!u)I-xk7n7g?tVMZ%cLV|z80-(^d1<6a_uP=+ zCSOGenQPa(LCu55z`<>|n}rWwZ}Fjx{N>8|y;Tf2t8Xe7X3;;ntpNyh zUQM*l+MWJ1&yz=cTcMVOJ!WR1Ss<6~H)jI%QSL}_6J z2-erHgO+7qwmD2)J+vy4idR;4U!)~Bzc*xnWNo+2>UeX?J*S}o*h(YQ>?!A&M4*+U zzmPnmuITvS2q-WcR9hTj54z>8YGsj8#8rpCTGo$1U&Cx`tAmjprX}FfZDp;CmQQw* z;VOPfFm75avv@UEYK#JZROW09n4=sO#z-@2JWJ~$HHJ~2Vi;G^_SAGppRz`%DmEqG zdTP!_%}bI%>mL=kC0*Uh8D3#~FC^6E# zRCCZ!A>$3PghtqE9XGnuE*(G%*p;F>I~J~BNWvz)^dHC1{idS5NI3fkoD zI9m7nBpZdnrdJN;FhI8pmb#~KmBvRsYvCLU-f4};I5I2r>E;OhPgTK5$-{joA8gl4 zv2RC4lnv_BPL^_)*M6$ZgIyG$n9NX|4K`tZYGVTl|xEt+y#6#6S_tePr;QhtG zd@>XrLyflu3NXY(M|W_bgmtsyv96M0(}!XE*N1g??z{%Dj!@PA!yi#^_KV&MiCCgu zMU6xn3z;@RmCW=6+(V`5FO))bsEk(DO|KH!qC=ZjI`EO8SN2Ut;`;4L6w+#?moBp%70V0>(HrC_K zH<4kJ2j&$ z(I|1;*xt4}Wc7Lp2MYJh&l%x}sRXCxE;*gUalt*-jrHG+d%9s+dtyiB=fhV0_uNk; zWq55i$ibNHBGv(=WxMk-ItmZ$w6kK__h4tCr*FL;%avm3tQ8fwhaGt623ygnnT2_U zBwT$i9&k@8y*hB?!$lXx{S+7X@w3$O?zevdJG*Kw!q6Wk${I`<(K1pV_QC<<4{ovM z%R&oIz9zGWaSN*ai8$_iDcTZ^Pq5I1h21^Gu#i}|p#9c?D63{))@x!96B7zbVn_%R zE;BxQ-0rgU7h<0$ZwHbqZTO(g9FpAIKm6JAUN;I6hVBnN6W(4`Y&hRm$jkFD(dj>a zA)|`9GabrJU7<1MLTjYQM_18yE!&?tXyY~8)N# zXSwV$$uB@lSgOauvAUw^4uufwv2hH4PGkfOQSA;XQE*L2s4HaG%|HUbeeQqYa`Dv* zLKfgF`pa2RNXYUkDuNDu1Q%R}gM*&4BJSei&UPH@H{Qu#Y}ut8pI=*~DxS<-3pH9! zPQ$-^YjTH~d8xyk8vUL~xk>>TPN4A$Waep4=LLAjhg>lJ2U*DHjTVfzXl@-NEmJ&5 z&+gG@qa(TFt-6il(P{9K7>gq&Bz;6CsKOi%a(200-RQuEkpfC*~CpC;$RHx(i`Dp!us0 zHafB>{GmC;S4i`ZLz5^De05V(3}1~vI)qmh^y4Q_C=WHLsq0>qab%Uz<%~}r zZ`HyXRdO)*XHa>9fB)_HXT0ED_s*%wJUH(c4OtY9StGH&bE&L4il|XgST)UG`gT12 z9isf}so!97g4Iq&{J(qzbc#e~CzA;j%fcZl7*|hunnMx1U{WlA1Jct3n=whAw_(7DCo7w$6J(pB7x7r+=se$!%7Q=~hAzYO>xAf3qD z5JzzJ?621I;7G*#f#UTWg{3K14py+9sBPRQ;eew^V&&wJ;HIytH){I7ApDXmAvtPp zw(7MUKQKJ<2Kq-7vAl!t;%0HCD*iHaAjT?Idkct-B%I*I7fzC`StsHvFB&q^2(TyR z57Z4lFqVlvH@t<6T3dO$*sT-q;mRp*267Nn(BKmn;Nt=8e$mS%5 z>;zAneCiDU>_E3s>D!9pAv0d$O*cUcF8%|zUwXxUvzCkf&~w{GRi<&{@i6f&(uWq^ z+X>i&|FSCvC5ZU-U{n=LjdaVG9(u|#!TJAkxqdkPtPCN?L$e@$Ty2`xA|oC>do1`6 zN0mmMy+W0_2?TfN#+yk}RUH$Cq=fi*k_`emIN@ay^zM!ihg>|e|43KO%6z@G;di;Y ziS!;(Ot|PdDuitLgengInX5^XKE=eK;)RNAb;DZwiH|zcY{v8W7w?QV+`5}x{SP4T zgND$@hAzJx&dOD&)l>XSN^;zf-p_V#{tlKkkET+5T!2!~X~5iLcIQB%u-+4qZqIQ=dTt?g0m; zX_&x6%#7hyk#!&+V5Sd|+G@_(#C0lGmveC>$?Iv^D7gRE3&7U-@1WDH%t&~lMzRlG zbMdeOKx9#R14vFb^Hokc9R#$x(^S5IR}xti-V10w=y)!ppfI;<2BxTv^j#Nv0n$59 zEK&ZtTo8ti7})yy6ijS#Bs?Mv?J=+gBQ|jO@o;P|B|gb%c6?$O2$hhY;ZOSXSqdmW zh;VdeWMoDHfCSvHmWjuoR8aj2HDns3WJr}szhI%8y+xgu%Ya5-^Wp2rgwu`{>;+kK z`uEsO+ssqWO>&B?&-$#Lp!RR0$h)3Z=(r-wFBiqk;?vlu=j2Qg6qB8@))nKiXNUQA z=GV7Nt(lb#0L?IxS_d6a$A@dMI9eB>O1}oz-8(V?QcB$7z5R*P)6I8?PCBILQvE>( zhijGA!Z$q7u+r6Y)`G&^knqSs6MF<#Apcm1oxorKCc}yf&YqsKtcxb?_d_R_&A@E{ z4!4#ZLT$tfs&M`x)TQ0%4I4$* zi;zia-_VEmkGWZ|)2uvil&79lEsq(z07E`Qc07aD1l6?RQhIFCH%H!5`E8VQ;e|@d zz-67lZ?)w#2J;`7rfzPWNlbUHVjKYm=c)-}xH>UbNJ}bWbx2Pps8)Yn=(Sm3`IH~% z)uY3Qp)RiYe&jd6GZO-(mK;xfqF|Gy(2a?U6G^|@^bo1I+2AGIqBn1-X3b$b*yZfS z4449o8#rSi@uW5Rabi>AA99BU6LJx-wj~J82`_;B%zkBJC0VNk_Hhl?m1prnH$e|yk=0OEmb%krXZTU|iaC$94x4|0)Q}Vl@1rNf zt|vCno`+)j%ifI4OWkRpm1K>UgVca&!UQqHWKub!Uk0)msl^|oV>`e+NPusHj5rqY zY7LZi9q&sK z__`WwC=hGJ5w0_XiuZeUZ%Huxp%LvTtf3NoV&Xr6+#s|50HMZ95$le=L*v z8!Y=$XDGP1Ru8jB^3=2(`5(mjWQ{a`{j60`8GfWSv?c)p){@f5F!(#~cdCli!1^h- z!jPDQA&o7?;ipH*VgC0^Ni&#H9f&zr|9MJB*DEKq|4||cL*3?%?)6>~9l~erLx(oE z{tmMf8!-?lq(XwHOVX#u(V0Sh!U62q45mFG=y-icoYCO%d zgnCPoa7VBk0iysMyIk5h{KbM-C;bp^ygun@k6{cotWVrvFHm8=^}n-(wyM*@_aUkS z`oC(~(O4mKQu3?H>n9d>KMk%dl{|x$7fO)(;$li~8u_wXuwMu>eVB}CX z)Aju54#302&TOe5(uMS!Tp6#GhcGVs=(wn&&CK88WwonKiv+ z%>l68x`SJ@r-(1t>PHifuCLJveOYYr_=KT&`<{2-)6LnP!Z0MpPVpKNjbwTdqdOwF-Fy+}{5dCuu{`*ph>Le?PU$7||=nM23s4@93y6Daq84*Ou5>ELoz# zUh`h)X##sqA~Z>DMJx1Qoel)9I?TT`M9&t>o8(qIuEnQ=u1+o{1eqZVOt%OCL_83O^1Z2EmH z4)8#i&_PQ}PbLTP;+v(ylw|D@FKz(~)SVU(n7^qv`4Xf|GlBzTALWl#p~TiJa@;6-d;wn{_%9d?;=|IFcGFSvU3gTdF!U@4iPe6M@hsY%Lg-$xGaSFZ zW3spQ#OVKKVW9z}7N%i%eP|c1-h$S%+u^*lnBjRaM0tMQW)09SOg zeebrZc5d%}$L%WhJWkS};k2nP&wRcQ;2+pKg?8cf-L@SZY-|#d+k%R=y%v3(N`eLoO9{ z%oLBk8~l0O{YX5J-|MtzfRj`C`mjhYdRv0%hw7i)+zLpZat?S@dbrLBUzOP6xt`p` zZ4aB=Qf6R=9O6F=o~xo(@f-2aEH3ih;I4<*cRt-OnNT6cc_ESxHtCF5PySgO7kE%P z;t_(>MCz4tm_)k47I1e#RZ0qDu$Y5mwd#bB1S{YnHV(3=h#jooO=F9Ps6OA!%c@)E z*alO{(BJ7h^F6Gb_%p|5R8=dUT0FH4F>vfaT3qxeNz;tuH&XRJif{6v;Xv}ok0LY+ z#TxKF)8LhWAVwwz;{*mu;LU;MSi$ex^c2CD;QJB8M4;(`u%yt3J4>1(@QA^;2$;>a zwU?o7-Jc0TNk>BU6QrkSrwv5l%8$aE-kk6-V!cM)bwdJT0nr`~ReV)dXaO{v04ej> z1_|Ziq1=rM1WMiYQPnwZPs13OdIcFepfiZsG+dn_R83xkdkM~5VIL-7`yfsA8#E8e zwC$m-y{Z|VcPiYH#gl??jly0bGr#_t2sQ`(cC7X^N!O-fRh8Dz=)3nLQ{Fra#0wN3 zfTzmsu$O@GedpI{dIdUsA-D2P4a%9NR~x!GESjHq z*%d-??^wxths24(b6;`Z}_ zuTrvf*US9a2sWXAc95rMgele%1c(|;g}w-n6nO|R$}}xuc;-pKBzf}?PE?HQG}4yE zAgA`1PMt0JMWr~sbBOw9`z~5a&(i++Gi1nq_~^2cJ@I{j!7|K!f3M1fKS z7QKWQ?QoyJDv+D^5Z}rkgUG_y)%r$VA`E|Uu?`kPt^^qSyN@nR5Yk(P&-1(14q%{d zgv4d8Dz&Y#OC9~Y=E29;CsV@Lt`}Xj*5`fJ+i?;T4<$ws!7>PEG+b@hc1&2TLx9En zttrrm%8(-RSd`9|{yF;dXUeBf8n5DCLrk~K#OdN!;<0!Y%H z;dA{I5#c$R-sevl198nkTkct6`oMNj;5jAEKj4q)2i;FY zz~O_3=SC8luDgHlFI=nZ)0OKo>zPbY`}?0ge$9n25QKZDz0lnA>hzRI=VT93qGx+O z6$`aA$nS4cLgC_JF+g|*<{Ko)1sx0iKOhH4;iwK@7MuKbx8f6iFw&RhDCf7KqO;#k zl%Fw6ZC$|(OU6a>5KP~>vGS}h21vDj$s7F~M8`?ecq^Xg}=F4?I?J+6XN2~A@heQks5Zuk05#50x1&R0_n}0pF}hwH>8RP zMYsn!YBaKZ9-=!wvM4x#G;RUyy!wnX+V=MC+mYw@(0}ESj3wLx@6~s747=*vW*P=1 zVoYi-^$75{rwp*r%Ro*zH@92nx%h|HcA%UmYLADZ2B5sWv$SjkNRj^f5qJ-1_4C~YAgN9c5;EjR=0bG4w5i@YuJ>8CT z?Rdm_*L5TCArQF!L=8r4(v7Em=8eL?CiB*|Mjf2<0t4kz6^TP7VSoKMGSn7-e683N zJSq%l**hOu%z(p@;$>Ce^8Efx6Ql9Q4)_b1UN4MPzXZymQs|m}DR+ZOb>%FS_gW+{s-Ft{XzTf*dsEO&T z(e<{pm_Ug}J1nwfD*j^Br8iUa=j7xc3z@eNFg^HKxVIt?KDW$)XFJ_G7`YXKDQpNR zew5}tX0Onw+Q`uD_@oXfKi>5t>s;7)^citxM@s%P4q9XFwwTolr*}`FJuagWBDEz2H^@Bn?h>#IGK@ds@ zXTyO_Lzq~w>xMuBmZq;u-^e(Vnl>Gz45;ram8P=b;D((W=2?0=Jvg~&l(<1V+t1gB znvf9$4<CANs#h z-AhoUDO5h84K>D{`LDoH+Art#O;b1n45@`y)^GE`5>*ME^fjCG$*pKvN0G(#wV{Kf+(Wmg$fDqvc!!9s z_#L7p5ShQtWA=<;^uxb=Q+5WfRc*mnuu40;L5O;ilnZWjRBtfI<$VAddbs?Lg=bf_ zVB*7CKKI1tBH^y#B_~IyF(-Z)d7>+oJhV-|+88c*i{rFWC8LXRo*2t1zLzZeKJ5Cl zZf2dgJak~$PEi=>mW3>IUoY}_jyB7kC*pi^=>9)IuhyTe^mM8{2N`ABZDabuDMR+i zFER5Dmu z-U)r}l&F4nZ^zTMw->)5L6{S6TW6rI=O_oC*~w^;nxxg7-5V%$(O_c!fF9TaE)cK( zk0#rSk1Gfk@3oOANHIY`4N9V+%>m4ou0k4<#&9z#Uutnqr1>qEraG1{m(V;nA3YyuTtfkav`y2e9nZVnIJ-j)wlr+(=7 zWK6T6%=BtxC>1LZaNMWp=&@fX32&!4anXS>^ZggK-c{(jJErEG83jIwJZEfNTeA(@ z#>?#j=sN#tuf@-sBwT@v#LLx={Zy5)Og$a&;GH`c!HCzLLB>v_A71KyS$0xWGx70( zX%OFm_poax>*1jTlOZycBu;|y5IA?w|GvisDK=9R6B8;QY%>PkXH#sGLri6`p31fqwU1=5)EbukW>CU{*hMwn(zV zok}faNlndz41RBCXG4RwfxX>bXHR~ZsXtj~{W?l>fLhVdZ@Sr?i-N);m7Q(X{jZUt zqGmtCkUY0mHx%kXdT2NqnemFQcmpnGcvhZUlOcPH$ z=(o|7f-<{a-PX!L@?xjR6LEQ}`AP-FUpzb=mX`Mi2Orwn^eHLr@sa|?95oaMVsc{h zkZ*liHJ_R!h`jqk{l&ja^*^s&Q1&xdl^g-CwWCthd(81YGiSnws!ZccmVX z-o5#q!$?n0M@_A0K*8^S(MPBFWN$bB=GfZ6;CQVcpA-85X$b?Z-OHCLj*bTg4eazx zOky-92CAc0&MbYn2?;Q2vhsqWSuSsEagiwSx?Yx5=cxcJ8_47^(yi-?2dyr)1*4*V zxhOpU^VK$nI38cS=rRYvWYOnn>u;%M6R5Vp^Qg6mOMf!=dXQYUt!+}`Q#MRtHf;QT zwKYZ$&-kIy)SCv;qai(cFGD&y!Ta~`()Q+thPIcNQ{2PV`AI-9+3J)0_t0F~$0se5 zY0bgnLJ$*KBJb#5LWYVQ{R z4D=aA+8HsA$E*9O(Rm{vT zB-o@FFQWwdk#L;P@>()L6@<^USAMu(p7yZKcbnfK|7|KiRYtAFh(}89eecXPzF+aN zu?Ga0gfTsh&FR?!T!HHYrOC-ku#8EI{9nw?k4<~8rcZ@1!(Y9+Fdil&9xJ6~qov>2 zUAiqQjA%6pKfO3kBKd*uccw~4;D#EX>VM-0^Y05ulF8n>xgXQhZ!EN=-kjLO2Bi?5 zcG=fUEq<{lSjJ{dlFhXm|2`0hK*{QH!k_cMr$2v+q1=?sOi#m{Z(UW@P=U>X;R-t& zo5-7nw83$;hg|L$emukpvqvZP0VXEHEuJW_6($+;VEq|XKCN!(Gl?e#8w)&sd_7}G zSz6Th{z+5k)RekB%Jbs7xQC7+fy#{@_Tj0i>Ow*!YEI@;%q*qvxgObcqi4N)H`N(} z@H6`LYuHCFNI6f$I-2Y15a)cS#>S)$ysUT?l$B*QGy=|?TC=m$tE-#i;fA;1(&@dDgcA~oJnUfPG zm6Z5~zVUwh#tX0T^U={{&=7eiT2_{b<#4O0`wmRB$$hAiCZ6{^iD4cnw|d>pcST7b z&J%OAzf09TKK_N6l8wBbQMXJaPaHFl(_m&)A(&ApI5s=W2>r2E-tV_C0LjT zcD9T4TRy3M|1qJQNs{p1aH#H6_cG_)Tx8Iy{P59!XYwNcZwiiUKPG5{h zc}br*n@EGb2%%C^S`P~wG8&A2W96_f{!O>PUq(T}1wIohs?hnF)@d9r2%dB}EqiNg z?@pDn^u|+C6WNDLySR+4^bq4w>V9THnfn&r_?`hTYN>rnt(ccqi1Qk~BQCC@x!DMZ z)zjmImVua#exubZL0@ym#w=gdI&p8U{}Tnph92r|^edl#8~4#8_u#ENcxp3!?H5aKb zN&-a`@k=D`!G57$)8S2bbgGC50lhB~l<20XG|G#t)L*9XKc;Xn%XhFUaUYHA3V!c1B&u&Bb}?h!=hA}taF>19&sP`)Z6w?Pd9g5 zao3iW0Y9dtukt=oOm*F)&y`o(o7WDAc+4yr6k@}EXTM#Ql?y5=c3QnF{%*t-3U`E3 zF$$cGynSl|+g3JjBwL@1WQ$hT9z|JFa(ZWKZ2r@Ec(~F%rD$?;5fl`@rl#bkrm6FD z4M9PTs7*a7DR*66ePLmLVPO$r;kMvNfqXUV%@OEof?lTq7G|2_VkRGN?Puv`JnkhT zXc@jLxIN!}_`$}+W-c8NnFd8QxiZ+_-b6Mx+kheB;hVyf#V5dIV`be~AI$VUm6UtU zOCXDn5Ih>M5u;GRrsI~=*!Y;*xc0-d4TPsuqS;l}6Xhu>`(R%5YI`GbG4%D@D8&L4 zmDu`+D_B`d84~*T_HOq(C3C0*1s}M(x5AmOudirpYmbSEuIBosNyfy)^y9~mJ0;lS z-#@5Yfi@TSp}DK8oZ*2?td_R**WQR4S57@Wy=S!d!t)*({g%oZ-CrE?{aaX;7m6f- zhlyg$X+;ttaMWK54V5JWl6Yng4i%Lg(kca^iLtRYGBNCKZf>V1+4~B_B<8( z&RzjMt=SJSmK#cozn9ONT;(|QwuaBJ1^Wct7@?io)8BCO!&s5+%u5h8ctli=j1n#F z;c=5ZCL1f6!)|Es7?v_p4}l&N%QoQp*jY`jy{1Ob)|S}6_;rs7oN;K>A6lol-zm<> zOw-dF@G4HJvfTd9Z%!;6kGtqjWhFKzCpeMDq{um{jOgK#;gM);I&0Jp<|zH^gMpyj zusYumcrR5rXJDXkVWA{5b09ObWY>;n#oT0;Q>Hn5a9DY%+f0Cxn&8QkfM2`2qE1Gi z^725p946cppL&i?nSaV^^Ut{bf=dkdipcT)D@!T*1kLX74P#Vy z;Z$j!qJoV|mX3h=t1Qk}u>6CmhBp`WE87!stooElw7~&oIsi-Cy#D;illw(ZepkBi zzIf5wl<7(x!mJG4Xg|o&Jr?pY?`Udn_E~CUIlDXv+1(vDJd7wTe4R~!dB}i`T3*Kb zvAo>Ip<;W>iqj&tDK8K4ba_opO${3xyYufd9%96@u;&d>l(MC5HtE|!LY_JQ!S@IR zc_s&I>j!)`Z+{XXW6Pvx2oDTCgo}ll6s~~*QaIHmCFu#}g&@He`9-yumpPe;yv^j$ zO!#+c4;lc}>GGHyHS5@u*DRVTmS%n({=)Ue#Xlw{OvY$%hxhGJ5eo|3S9{5gy+;Y- zWc&M;15j>nf1D?mK{dkN;MpX{blI^{GdPCuy(%CR80wgRiqW z;(5P78G(9iYN{ph_RG6>@toLFc-Rt*=pnqkZ`%VzM){os0yIoa419d7jg9X{Pmcfi z5pzVKtzFhEwAd;BuhYUw5Z_LeoYGcGxx2jV~SNCc}nTCpS3!n^!@Toms8296sfj54D_y{=C zO-4%a-xK6AePM|soxA3wq~C8Y zSmY_I#$`$Al5Uj1kKySPLF|m?V#%;fH+KcTmvL=^soL z{PQOafa&rV5Dbe)$9DVvX;0bSo<$$@dS!D|L9P@gzf>nqb4!6u9{1dha(Cet@N_8V zyuwYCU$dT2CVf!6)P6njGvJ!OpsL=+-Q(n0CW*0ej{Ba@?L%*b#E~B@?>+XKXXfT6 zPE}-NmaTX%R=+wrE^U1Ln5v=9JD&GFZ;bJYfwG+3)bz`liHU`g5s9CQ_P_lECaIG8 z)6&u?C@5-bYW|J3AqUUX)b#H%?088)oaEzMY{d&l@aRa@h~!n=UGoMs3axqs6T~YU zXWVc}DFe4!J-fcaRrIh>sjp8*Yb^~mE8C|Vm{ehEK7z-0-mkD8Pej=Ag?^)?Ef`xi z#0Mmv?*Dinl%y}J)pqechFIHeGyhpoRiepqyqE#G28AIsOGCqW4JW$JJnlf+v_Wb27-Y$|~bD z__r+8m>a}yKET4XfpFIQoSQ+UEp~k^Tr!7Vxefp#8VpdzSI6t5LzaYeiY6DyQMs;d z*z#8@hL0{A-^5@a5#n>H{QQh~C#+lp=3FxbUMF9i?BRH{&?1aWN=O{PBGd#(I!o8N z%y}zpb*I0--^!LnS7!$T0C35+#?(h7<3G=xin`3EOrT2-BwRN(UaqgHo11H_ZM<}x z<2K(`Q%T7U(!io3>Z~M6t*dvh)N$t%Y>LV%<>n=Izd8#6lOChRRXsX2C2aA{vA&)y z){@g%z|N7Qr&reV#;-xpH4|;<&Umg2@nRdx2Q_OO8%*TS5~2%B*v{PC1BEK_D^8h6 zT%oc-!bz73|?tfu{%gWtR*l&AccGm|hug*8Y8%b;- z^oJY^h05DC`<-9ECco*-rvsfpH+Fp=>(60%WY1vm&GuGNnclYl^+n0}c$DMPYrnIq z&7G-rvFo)*NJ%MgSJu`D?%#jp!1iHraj`%#m6?fYZVsbIFjuS7WDKk+kLBy{wG7Y| z{2o2*4i+)aBu1&xLj}qG_P(OxVlWNI$Hyx#k*UllC*RybQoj1D!nGNNH&a0u^NjA# zJ;LLX_I5%pYrrDtl6M~#Hk$Rno2hJQ^QpIAS2&O`9S@}P&H%p>6NaH|p^p^n>~ zU9S8<<+?R`-FkK*`L14lJW`zi><9+P7f;Q8=WENYQaa@#Y?KEE}ag+ zpZhNp65NN9ct)GgwB5XeIsqRDkcT9)1^djla?TAw`dz+fv1zq!^TOIeWxzwwIc z#cm4ggIa%I)`VGFr{$pFPM>0YeEiDN(q^ZemZ*9}bWGB_uVek-!18l(MVdZAKo6l} zVEA$e%|a>N>`rDA<{eMZQ^izv45>pfX=45t(zMXJP#aEdC`oc=aYH?>iV(E+dtLE7 z|0zBl-SO_Q3iYU!lZA!1v2k1<7vu(7ru&XQ-2w2NV z{sknI7MV}Z@0`9KeQf_7Gzy*uGo${b1fnfrGLsc=15Oo%h=ORKXjpv6Yf7

j`>M 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%0A0I!z96OC6AMcI35j6wD#}6Mq6cx$e4$Rs&KJ9%$ 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 + + + + + + +Project: examples/examples_common.h Source File + + + + + + + + + + + +

+
+
+
examples_common.h
+
+
+Go to the documentation of this file.
1 // Copyright (c) 2023 Franka Robotics GmbH
+
2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
3 #pragma once
+
4 
+
5 #include <array>
+
6 
+
7 #include <Eigen/Core>
+
8 
+
9 #include <franka/control_types.h>
+
10 #include <franka/duration.h>
+
11 #include <franka/robot.h>
+
12 #include <franka/robot_state.h>
+
13 
+ +
25 
+ +
32  public:
+
39  MotionGenerator(double speed_factor, const std::array<double, 7> q_goal);
+
40 
+ +
50 
+
51  private:
+
52  using Vector7d = Eigen::Matrix<double, 7, 1, Eigen::ColMajor>;
+
53  using Vector7i = Eigen::Matrix<int, 7, 1, Eigen::ColMajor>;
+
54 
+
55  bool calculateDesiredValues(double t, Vector7d* delta_q_d) const;
+
56  void calculateSynchronizedValues();
+
57 
+
58  static constexpr double kDeltaQMotionFinished = 1e-6;
+
59  const Vector7d q_goal_;
+
60 
+
61  Vector7d q_start_;
+
62  Vector7d delta_q_;
+
63 
+
64  Vector7d dq_max_sync_;
+
65  Vector7d t_1_sync_;
+
66  Vector7d t_2_sync_;
+
67  Vector7d t_f_sync_;
+
68  Vector7d q_1_;
+
69 
+
70  double time_ = 0.0;
+
71 
+
72  Vector7d dq_max_ = (Vector7d() << 2.0, 2.0, 2.0, 2.0, 2.5, 2.5, 2.5).finished();
+
73  Vector7d ddq_max_start_ = (Vector7d() << 5, 5, 5, 5, 5, 5, 5).finished();
+
74  Vector7d ddq_max_goal_ = (Vector7d() << 5, 5, 5, 5, 5, 5, 5).finished();
+
75 };
+
An example showing how to generate a joint pose motion to a goal position.
Definition: examples_common.h:31
+
MotionGenerator(double speed_factor, const std::array< double, 7 > q_goal)
Creates a new MotionGenerator instance for a target q.
Definition: examples_common.cpp:22
+
franka::JointPositions operator()(const franka::RobotState &robot_state, franka::Duration period)
Sends joint position calculations.
Definition: examples_common.cpp:114
+
Represents a duration with millisecond resolution.
Definition: duration.h:19
+
Stores values for joint position motion generation.
Definition: control_types.h:72
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
Contains helper types for returning motion generation and joint-level torque commands.
+
Contains the franka::Duration type.
+
void setDefaultBehavior(franka::Robot &robot)
Sets a default collision behavior, joint impedance and Cartesian impedance.
Definition: examples_common.cpp:12
+
Contains the franka::Robot type.
+
Contains the franka::RobotState types.
+
Describes the robot state.
Definition: robot_state.h:34
+
+ + + + diff --git a/exception_8h.html b/exception_8h.html new file mode 100644 index 00000000..a1ea9a52 --- /dev/null +++ b/exception_8h.html @@ -0,0 +1,165 @@ + + + + + + + +Project: include/franka/exception.h File Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
exception.h File Reference
+
+
+ +

Contains exception definitions. +More...

+
#include <stdexcept>
+#include <string>
+#include <franka/log.h>
+
+Include dependency graph for exception.h:
+
+
+ + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

struct  franka::Exception
 Base class for all exceptions used by libfranka. More...
 
struct  franka::ModelException
 ModelException is thrown if an error occurs when loading the model library. More...
 
struct  franka::NetworkException
 NetworkException is thrown if a connection to the robot cannot be established, or when a timeout occurs. More...
 
struct  franka::ProtocolException
 ProtocolException is thrown if the robot returns an incorrect message. More...
 
struct  franka::IncompatibleVersionException
 IncompatibleVersionException is thrown if the robot does not support this version of libfranka. More...
 
struct  franka::ControlException
 ControlException is thrown if an error occurs during motion generation or torque control. More...
 
struct  franka::CommandException
 CommandException is thrown if an error occurs during command execution. More...
 
struct  franka::RealtimeException
 RealtimeException is thrown if realtime priority cannot be set. More...
 
struct  franka::InvalidOperationException
 InvalidOperationException is thrown if an operation cannot be performed. More...
 
+

Detailed Description

+

Contains exception definitions.

+
+ + + + diff --git a/exception_8h__dep__incl.map b/exception_8h__dep__incl.map new file mode 100644 index 00000000..43bc041c --- /dev/null +++ b/exception_8h__dep__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/exception_8h__dep__incl.md5 b/exception_8h__dep__incl.md5 new file mode 100644 index 00000000..818e154d --- /dev/null +++ b/exception_8h__dep__incl.md5 @@ -0,0 +1 @@ +2ffd2591379374f70dc19ebccd93ac68 \ No newline at end of file diff --git a/exception_8h__dep__incl.png b/exception_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..1895cacdc509a63f19565a75b131fbb93fa2630c GIT binary patch literal 15889 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 R)CUPZ4;0ko%VbT1{|`%@nTG%X literal 0 HcmV?d00001 diff --git a/exception_8h__incl.map b/exception_8h__incl.map new file mode 100644 index 00000000..b00adbe3 --- /dev/null +++ b/exception_8h__incl.map @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/exception_8h__incl.md5 b/exception_8h__incl.md5 new file mode 100644 index 00000000..8c1ff872 --- /dev/null +++ b/exception_8h__incl.md5 @@ -0,0 +1 @@ +436dc167aa9795891fa28cd8e52233aa \ No newline at end of file diff --git a/exception_8h__incl.png b/exception_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..b04e4ccd225f837a44f5d51a64e74dce329858bf GIT binary patch literal 34488 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 literal 0 HcmV?d00001 diff --git a/exception_8h_source.html b/exception_8h_source.html new file mode 100644 index 00000000..8614657a --- /dev/null +++ b/exception_8h_source.html @@ -0,0 +1,155 @@ + + + + + + + +Project: include/franka/exception.h Source File + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
exception.h
+
+
+Go to the documentation of this file.
1 // Copyright (c) 2023 Franka Robotics GmbH
+
2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
3 #pragma once
+
4 
+
5 #include <stdexcept>
+
6 #include <string>
+
7 
+
8 #include <franka/log.h>
+
9 
+
15 namespace franka {
+
16 
+
20 struct Exception : public std::runtime_error {
+
21  using std::runtime_error::runtime_error;
+
22 };
+
23 
+
27 struct ModelException : public Exception {
+
28  using Exception::Exception;
+
29 };
+
30 
+
35 struct NetworkException : public Exception {
+
36  using Exception::Exception;
+
37 };
+
38 
+
42 struct ProtocolException : public Exception {
+
43  using Exception::Exception;
+
44 };
+
45 
+ + +
56 
+
60  const uint16_t server_version;
+
64  const uint16_t library_version;
+
65 };
+
66 
+
73 struct ControlException : public Exception {
+
80  explicit ControlException(const std::string& what, std::vector<franka::Record> log = {}) noexcept;
+
81 
+
85  const std::vector<franka::Record> log;
+
86 };
+
87 
+
91 struct CommandException : public Exception {
+
92  using Exception::Exception;
+
93 };
+
94 
+
98 struct RealtimeException : public Exception {
+
99  using Exception::Exception;
+
100 };
+
101 
+ +
106  using Exception::Exception;
+
107 };
+
108 
+
109 } // namespace franka
+
Contains helper types for logging sent commands and received robot states.
+
CommandException is thrown if an error occurs during command execution.
Definition: exception.h:91
+
ControlException is thrown if an error occurs during motion generation or torque control.
Definition: exception.h:73
+
ControlException(const std::string &what, std::vector< franka::Record > log={}) noexcept
Creates the exception with an explanatory string and a Log object.
+
const std::vector< franka::Record > log
Vector of states and commands logged just before the exception occurred.
Definition: exception.h:85
+
Base class for all exceptions used by libfranka.
Definition: exception.h:20
+
IncompatibleVersionException is thrown if the robot does not support this version of libfranka.
Definition: exception.h:49
+
const uint16_t server_version
Control's protocol version.
Definition: exception.h:60
+
IncompatibleVersionException(uint16_t server_version, uint16_t library_version) noexcept
Creates the exception using the two different protocol versions.
+
const uint16_t library_version
libfranka protocol version.
Definition: exception.h:64
+
InvalidOperationException is thrown if an operation cannot be performed.
Definition: exception.h:105
+
ModelException is thrown if an error occurs when loading the model library.
Definition: exception.h:27
+
NetworkException is thrown if a connection to the robot cannot be established, or when a timeout occu...
Definition: exception.h:35
+
ProtocolException is thrown if the robot returns an incorrect message.
Definition: exception.h:42
+
RealtimeException is thrown if realtime priority cannot be set.
Definition: exception.h:98
+
+ + + + diff --git a/files.html b/files.html new file mode 100644 index 00000000..c9516607 --- /dev/null +++ b/files.html @@ -0,0 +1,112 @@ + + + + + + + +Project: File List + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + +
  examples
 examples_common.hContains common types and functions for the examples
  include
  franka
 active_control.hImplements the ActiveControlBase abstract class
 active_control_base.hAbstract interface class as the base of the active controllers
 active_motion_generator.hContains the franka::ActiveMotionGenerator type
 active_torque_control.hContains the franka::ActiveTorqueControl type
 control_tools.hContains helper functions for writing control loops
 control_types.hContains helper types for returning motion generation and joint-level torque commands
 duration.hContains the franka::Duration type
 errors.hContains the franka::Errors type
 exception.hContains exception definitions
 gripper.hContains the franka::Gripper type
 gripper_state.hContains the franka::GripperState type
 log.hContains helper types for logging sent commands and received robot states
 lowpass_filter.hContains functions for filtering signals with a low-pass filter
 model.hContains model library types
 rate_limiting.hContains functions for limiting the rate of torques, Cartesian pose, Cartesian velocity, joint position and joint velocity
 robot.hContains the franka::Robot type
 robot_model.h
 robot_model_base.h
 robot_state.hContains the franka::RobotState types
 vacuum_gripper.hContains the franka::VacuumGripper type
 vacuum_gripper_state.hContains the franka::VacuumGripperState type
+
+
+ + + + diff --git a/folderclosed.png b/folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/force_control_8cpp-example.html b/force_control_8cpp-example.html new file mode 100644 index 00000000..c1a6f432 --- /dev/null +++ b/force_control_8cpp-example.html @@ -0,0 +1,213 @@ + + + + + + + +Project: force_control.cpp + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
force_control.cpp
+
+
+

A simple PI force controller that renders in the Z axis the gravitational force corresponding to a target mass of 1 kg.

Warning
: make sure that no endeffector is mounted and that the robot's last joint is in contact with a horizontal rigid surface before starting.
+
// Copyright (c) 2023 Franka Robotics GmbH
+
// Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
#include <array>
+
#include <iostream>
+
+
#include <Eigen/Core>
+
+ + +
#include <franka/model.h>
+
#include <franka/robot.h>
+
+ +
+
int main(int argc, char** argv) {
+
// Check whether the required arguments were passed
+
if (argc != 2) {
+
std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
+
return -1;
+
}
+
// parameters
+
double desired_mass{0.0};
+
constexpr double target_mass{1.0}; // NOLINT(readability-identifier-naming)
+
constexpr double k_p{1.0}; // NOLINT(readability-identifier-naming)
+
constexpr double k_i{2.0}; // NOLINT(readability-identifier-naming)
+
constexpr double filter_gain{0.001}; // NOLINT(readability-identifier-naming)
+
+
try {
+
// connect to robot
+
franka::Robot robot(argv[1]);
+ +
// load the kinematics and dynamics model
+
franka::Model model = robot.loadModel();
+
+
// set collision behavior
+
robot.setCollisionBehavior({{100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0}},
+
{{100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0}},
+
{{100.0, 100.0, 100.0, 100.0, 100.0, 100.0}},
+
{{100.0, 100.0, 100.0, 100.0, 100.0, 100.0}});
+
+
franka::RobotState initial_state = robot.readOnce();
+
+
Eigen::VectorXd initial_tau_ext(7), tau_error_integral(7);
+
// Bias torque sensor
+
std::array<double, 7> gravity_array = model.gravity(initial_state);
+
Eigen::Map<Eigen::Matrix<double, 7, 1>> initial_tau_measured(initial_state.tau_J.data());
+
Eigen::Map<Eigen::Matrix<double, 7, 1>> initial_gravity(gravity_array.data());
+
initial_tau_ext = initial_tau_measured - initial_gravity;
+
+
// init integrator
+
tau_error_integral.setZero();
+
+
// define callback for the torque control loop
+
Eigen::Vector3d initial_position;
+
double time = 0.0;
+
auto get_position = [](const franka::RobotState& robot_state) {
+
return Eigen::Vector3d(robot_state.O_T_EE[12], robot_state.O_T_EE[13],
+
robot_state.O_T_EE[14]);
+
};
+
auto force_control_callback = [&](const franka::RobotState& robot_state,
+ +
time += period.toSec();
+
+
if (time == 0.0) {
+
initial_position = get_position(robot_state);
+
}
+
+
if (time > 0 && (get_position(robot_state) - initial_position).norm() > 0.01) {
+
throw std::runtime_error("Aborting; too far away from starting pose!");
+
}
+
+
// get state variables
+
std::array<double, 42> jacobian_array =
+
model.zeroJacobian(franka::Frame::kEndEffector, robot_state);
+
+
Eigen::Map<const Eigen::Matrix<double, 6, 7>> jacobian(jacobian_array.data());
+
Eigen::Map<const Eigen::Matrix<double, 7, 1>> tau_measured(robot_state.tau_J.data());
+
Eigen::Map<const Eigen::Matrix<double, 7, 1>> gravity(gravity_array.data());
+
+
Eigen::VectorXd tau_d(7), desired_force_torque(6), tau_cmd(7), tau_ext(7);
+
desired_force_torque.setZero();
+
desired_force_torque(2) = desired_mass * -9.81;
+
tau_ext << tau_measured - gravity - initial_tau_ext;
+
tau_d << jacobian.transpose() * desired_force_torque;
+
tau_error_integral += period.toSec() * (tau_d - tau_ext);
+
// FF + PI control
+
tau_cmd << tau_d + k_p * (tau_d - tau_ext) + k_i * tau_error_integral;
+
+
// Smoothly update the mass to reach the desired target value
+
desired_mass = filter_gain * target_mass + (1 - filter_gain) * desired_mass;
+
+
std::array<double, 7> tau_d_array{};
+
Eigen::VectorXd::Map(&tau_d_array[0], 7) = tau_cmd;
+
return tau_d_array;
+
};
+
std::cout << "WARNING: Make sure sure that no endeffector is mounted and that the robot's last "
+
"joint is "
+
"in contact with a horizontal rigid surface before starting. Keep in mind that "
+
"collision thresholds are set to high values."
+
<< std::endl
+
<< "Press Enter to continue..." << std::endl;
+
std::cin.ignore();
+
// start real-time control loop
+
robot.control(force_control_callback);
+
+
} catch (const std::exception& ex) {
+
// print exception
+
std::cout << ex.what() << std::endl;
+
}
+
return 0;
+
}
+
Represents a duration with millisecond resolution.
Definition: duration.h:19
+
Calculates poses of joints and dynamic properties of the robot.
Definition: model.h:52
+
std::array< double, 42 > zeroJacobian(Frame frame, const franka::RobotState &robot_state) const
Gets the 6x7 Jacobian for the given joint relative to the base frame.
+
std::array< double, 7 > gravity(const std::array< double, 7 > &q, double m_total, const std::array< double, 3 > &F_x_Ctotal, const std::array< double, 3 > &gravity_earth={{0., 0., -9.81}}) const noexcept
Calculates the gravity vector.
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
void control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
Starts a control loop for sending joint-level torque commands.
+
void setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds_acceleration, const std::array< double, 7 > &upper_torque_thresholds_acceleration, const std::array< double, 7 > &lower_torque_thresholds_nominal, const std::array< double, 7 > &upper_torque_thresholds_nominal, const std::array< double, 6 > &lower_force_thresholds_acceleration, const std::array< double, 6 > &upper_force_thresholds_acceleration, const std::array< double, 6 > &lower_force_thresholds_nominal, const std::array< double, 6 > &upper_force_thresholds_nominal)
Changes the collision behavior.
+
Model loadModel()
Loads the model library from the robot.
+
virtual RobotState readOnce()
Waits for a robot state update and returns it.
+
Stores joint-level torque commands without gravity and friction.
Definition: control_types.h:45
+
Contains the franka::Duration type.
+
Contains common types and functions for the examples.
+
void setDefaultBehavior(franka::Robot &robot)
Sets a default collision behavior, joint impedance and Cartesian impedance.
Definition: examples_common.cpp:12
+
Contains exception definitions.
+
Contains model library types.
+
Contains the franka::Robot type.
+
Describes the robot state.
Definition: robot_state.h:34
+
std::array< double, 7 > tau_J
Measured link-side joint torque sensor signals.
Definition: robot_state.h:215
+
+ + + + diff --git a/functions.html b/functions.html new file mode 100644 index 00000000..762b914c --- /dev/null +++ b/functions.html @@ -0,0 +1,92 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+
+ + + + diff --git a/functions_b.html b/functions_b.html new file mode 100644 index 00000000..16abd5a5 --- /dev/null +++ b/functions_b.html @@ -0,0 +1,92 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- b -

+
+ + + + diff --git a/functions_c.html b/functions_c.html new file mode 100644 index 00000000..4d0b9257 --- /dev/null +++ b/functions_c.html @@ -0,0 +1,184 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- c -

+
+ + + + diff --git a/functions_d.html b/functions_d.html new file mode 100644 index 00000000..1519e41c --- /dev/null +++ b/functions_d.html @@ -0,0 +1,114 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- d -

+
+ + + + diff --git a/functions_e.html b/functions_e.html new file mode 100644 index 00000000..9ce64988 --- /dev/null +++ b/functions_e.html @@ -0,0 +1,100 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- e -

+
+ + + + diff --git a/functions_enum.html b/functions_enum.html new file mode 100644 index 00000000..84008507 --- /dev/null +++ b/functions_enum.html @@ -0,0 +1,84 @@ + + + + + + + +Project: Class Members - Enumerations + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/functions_f.html b/functions_f.html new file mode 100644 index 00000000..15c9162b --- /dev/null +++ b/functions_f.html @@ -0,0 +1,104 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- f -

+
+ + + + diff --git a/functions_func.html b/functions_func.html new file mode 100644 index 00000000..6f4ac788 --- /dev/null +++ b/functions_func.html @@ -0,0 +1,407 @@ + + + + + + + +Project: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- j -

+ + +

- l -

+ + +

- m -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- v -

+ + +

- w -

+ + +

- z -

+ + +

- ~ -

+
+ + + + diff --git a/functions_g.html b/functions_g.html new file mode 100644 index 00000000..ac3ec095 --- /dev/null +++ b/functions_g.html @@ -0,0 +1,97 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- g -

+
+ + + + diff --git a/functions_h.html b/functions_h.html new file mode 100644 index 00000000..42668eda --- /dev/null +++ b/functions_h.html @@ -0,0 +1,90 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- h -

+
+ + + + diff --git a/functions_i.html b/functions_i.html new file mode 100644 index 00000000..a0375d41 --- /dev/null +++ b/functions_i.html @@ -0,0 +1,104 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- i -

+
+ + + + diff --git a/functions_j.html b/functions_j.html new file mode 100644 index 00000000..f545e4d0 --- /dev/null +++ b/functions_j.html @@ -0,0 +1,134 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- j -

+
+ + + + diff --git a/functions_k.html b/functions_k.html new file mode 100644 index 00000000..d92320ab --- /dev/null +++ b/functions_k.html @@ -0,0 +1,86 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- k -

+
+ + + + diff --git a/functions_l.html b/functions_l.html new file mode 100644 index 00000000..9af119fc --- /dev/null +++ b/functions_l.html @@ -0,0 +1,98 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- l -

+
+ + + + diff --git a/functions_m.html b/functions_m.html new file mode 100644 index 00000000..f4b6684e --- /dev/null +++ b/functions_m.html @@ -0,0 +1,121 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- m -

+
+ + + + diff --git a/functions_n.html b/functions_n.html new file mode 100644 index 00000000..1b3b7143 --- /dev/null +++ b/functions_n.html @@ -0,0 +1,86 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- n -

+
+ + + + diff --git a/functions_o.html b/functions_o.html new file mode 100644 index 00000000..704b70d8 --- /dev/null +++ b/functions_o.html @@ -0,0 +1,179 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- o -

+
+ + + + diff --git a/functions_p.html b/functions_p.html new file mode 100644 index 00000000..47dc69a5 --- /dev/null +++ b/functions_p.html @@ -0,0 +1,98 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- p -

+
+ + + + diff --git a/functions_q.html b/functions_q.html new file mode 100644 index 00000000..0a699ed7 --- /dev/null +++ b/functions_q.html @@ -0,0 +1,90 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- q -

+
+ + + + diff --git a/functions_r.html b/functions_r.html new file mode 100644 index 00000000..f0bf400f --- /dev/null +++ b/functions_r.html @@ -0,0 +1,104 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- r -

+
+ + + + diff --git a/functions_rela.html b/functions_rela.html new file mode 100644 index 00000000..4cf79a08 --- /dev/null +++ b/functions_rela.html @@ -0,0 +1,85 @@ + + + + + + + +Project: Class Members - Related Functions + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/functions_s.html b/functions_s.html new file mode 100644 index 00000000..d0c12456 --- /dev/null +++ b/functions_s.html @@ -0,0 +1,154 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- s -

+
+ + + + diff --git a/functions_t.html b/functions_t.html new file mode 100644 index 00000000..309ce85b --- /dev/null +++ b/functions_t.html @@ -0,0 +1,119 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- t -

+
+ + + + diff --git a/functions_type.html b/functions_type.html new file mode 100644 index 00000000..fb6e6f68 --- /dev/null +++ b/functions_type.html @@ -0,0 +1,86 @@ + + + + + + + +Project: Class Members - Typedefs + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/functions_v.html b/functions_v.html new file mode 100644 index 00000000..6a118809 --- /dev/null +++ b/functions_v.html @@ -0,0 +1,90 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- v -

+
+ + + + diff --git a/functions_vars.html b/functions_vars.html new file mode 100644 index 00000000..fcfd42d2 --- /dev/null +++ b/functions_vars.html @@ -0,0 +1,512 @@ + + + + + + + +Project: Class Members - Variables + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- i -

+ + +

- j -

+ + +

- k -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- q -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- v -

+ + +

- w -

+
+ + + + diff --git a/functions_w.html b/functions_w.html new file mode 100644 index 00000000..eebafc82 --- /dev/null +++ b/functions_w.html @@ -0,0 +1,92 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- w -

+
+ + + + diff --git a/functions_z.html b/functions_z.html new file mode 100644 index 00000000..9c7487a7 --- /dev/null +++ b/functions_z.html @@ -0,0 +1,86 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- z -

+
+ + + + diff --git a/functions_~.html b/functions_~.html new file mode 100644 index 00000000..e4bf6f49 --- /dev/null +++ b/functions_~.html @@ -0,0 +1,95 @@ + + + + + + + +Project: Class Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- ~ -

+
+ + + + diff --git a/generate_cartesian_pose_motion_8cpp-example.html b/generate_cartesian_pose_motion_8cpp-example.html new file mode 100644 index 00000000..6a169764 --- /dev/null +++ b/generate_cartesian_pose_motion_8cpp-example.html @@ -0,0 +1,168 @@ + + + + + + + +Project: generate_cartesian_pose_motion.cpp + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
generate_cartesian_pose_motion.cpp
+
+
+

An example showing how to generate a Cartesian motion.

Warning
Before executing this example, make sure there is enough space in front of the robot.
+
// Copyright (c) 2023 Franka Robotics GmbH
+
// Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
#include <cmath>
+
#include <iostream>
+
+ +
#include <franka/robot.h>
+
+ +
+
int main(int argc, char** argv) {
+
if (argc != 2) {
+
std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
+
return -1;
+
}
+
try {
+
franka::Robot robot(argv[1]);
+ +
+
// First move the robot to a suitable joint configuration
+
std::array<double, 7> q_goal = {{0, -M_PI_4, 0, -3 * M_PI_4, 0, M_PI_2, M_PI_4}};
+
MotionGenerator motion_generator(0.5, q_goal);
+
std::cout << "WARNING: This example will move the robot! "
+
<< "Please make sure to have the user stop button at hand!" << std::endl
+
<< "Press Enter to continue..." << std::endl;
+
std::cin.ignore();
+
robot.control(motion_generator);
+
std::cout << "Finished moving to initial joint configuration." << std::endl;
+
+
// Set additional parameters always before the control loop, NEVER in the control loop!
+
// Set collision behavior.
+ +
{{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
+
{{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
+
{{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}},
+
{{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}});
+
+
std::array<double, 16> initial_pose;
+
double time = 0.0;
+
robot.control([&time, &initial_pose](const franka::RobotState& robot_state,
+ +
time += period.toSec();
+
+
if (time == 0.0) {
+
initial_pose = robot_state.O_T_EE;
+
}
+
+
constexpr double kRadius = 0.3;
+
double angle = M_PI / 4 * (1 - std::cos(M_PI / 5.0 * time));
+
double delta_x = kRadius * std::sin(angle);
+
double delta_z = kRadius * (std::cos(angle) - 1);
+
+
std::array<double, 16> new_pose = initial_pose;
+
new_pose[12] += delta_x;
+
new_pose[14] += delta_z;
+
+
if (time >= 10.0) {
+
std::cout << std::endl << "Finished motion, shutting down example" << std::endl;
+
return franka::MotionFinished(new_pose);
+
}
+
return new_pose;
+
});
+
} catch (const franka::Exception& e) {
+
std::cout << e.what() << std::endl;
+
return -1;
+
}
+
+
return 0;
+
}
+
An example showing how to generate a joint pose motion to a goal position.
Definition: examples_common.h:31
+
Stores values for Cartesian pose motion generation.
Definition: control_types.h:127
+
Represents a duration with millisecond resolution.
Definition: duration.h:19
+
double toSec() const noexcept
Returns the stored duration in .
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
void control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
Starts a control loop for sending joint-level torque commands.
+
void setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds_acceleration, const std::array< double, 7 > &upper_torque_thresholds_acceleration, const std::array< double, 7 > &lower_torque_thresholds_nominal, const std::array< double, 7 > &upper_torque_thresholds_nominal, const std::array< double, 6 > &lower_force_thresholds_acceleration, const std::array< double, 6 > &upper_force_thresholds_acceleration, const std::array< double, 6 > &lower_force_thresholds_nominal, const std::array< double, 6 > &upper_force_thresholds_nominal)
Changes the collision behavior.
+
Torques MotionFinished(Torques command) noexcept
Helper method to indicate that a motion should stop after processing the given command.
Definition: control_types.h:294
+
Contains common types and functions for the examples.
+
void setDefaultBehavior(franka::Robot &robot)
Sets a default collision behavior, joint impedance and Cartesian impedance.
Definition: examples_common.cpp:12
+
Contains exception definitions.
+
Contains the franka::Robot type.
+
Base class for all exceptions used by libfranka.
Definition: exception.h:20
+
Describes the robot state.
Definition: robot_state.h:34
+
std::array< double, 16 > O_T_EE
Measured end effector pose in base frame.
Definition: robot_state.h:40
+
+ + + + diff --git a/generate_cartesian_pose_motion_external_control_loop_8cpp-example.html b/generate_cartesian_pose_motion_external_control_loop_8cpp-example.html new file mode 100644 index 00000000..157cf189 --- /dev/null +++ b/generate_cartesian_pose_motion_external_control_loop_8cpp-example.html @@ -0,0 +1,187 @@ + + + + + + + +Project: generate_cartesian_pose_motion_external_control_loop.cpp + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
generate_cartesian_pose_motion_external_control_loop.cpp
+
+
+

An example showing how to generate a Cartesian motion with an external control loop.

Warning
Before executing this example, make sure there is enough space in front of the robot.
+
// Copyright (c) 2023 Franka Robotics GmbH
+
// Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
#include <cmath>
+
#include <iostream>
+
+ + + +
#include <franka/robot.h>
+ +
+
int main(int argc, char** argv) {
+
// Check whether the required arguments were passed
+
if (argc != 2) {
+
std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
+
return -1;
+
}
+
+
try {
+
franka::Robot robot(argv[1]);
+ +
+
// First move the robot to a suitable joint configuration
+
std::array<double, 7> q_goal = {{0, -M_PI_4, 0, -3 * M_PI_4, 0, M_PI_2, M_PI_4}};
+
MotionGenerator motion_generator(0.5, q_goal);
+
std::cout << "WARNING: This example will move the robot! "
+
<< "Please make sure to have the user stop button at hand!" << std::endl
+
<< "Press Enter to continue..." << std::endl;
+
std::cin.ignore();
+
robot.control(motion_generator);
+
std::cout << "Finished moving to initial joint configuration." << std::endl;
+
+
// Set additional parameters always before the control loop, NEVER in the control loop!
+
// Set collision behavior.
+ +
{{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
+
{{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
+
{{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}},
+
{{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}});
+
+
std::array<double, 16> initial_pose;
+
double time = 0.0;
+
+
auto callback_control = [&time, &initial_pose](
+
const franka::RobotState& robot_state,
+ +
time += period.toSec();
+
+
if (time == 0.0) {
+
initial_pose = robot_state.O_T_EE_c;
+
}
+
+
constexpr double kRadius = 0.3;
+
double angle = M_PI / 4 * (1 - std::cos(M_PI / 5.0 * time));
+
double delta_x = kRadius * std::sin(angle);
+
double delta_z = kRadius * (std::cos(angle) - 1);
+
+
std::array<double, 16> new_pose = initial_pose;
+
new_pose[12] += delta_x;
+
new_pose[14] += delta_z;
+
+
if (time >= 10.0) {
+
std::cout << std::endl << "Finished motion, shutting down example" << std::endl;
+
return franka::MotionFinished(new_pose);
+
}
+
return new_pose;
+
};
+
+
bool motion_finished = false;
+
auto active_control = robot.startCartesianPoseControl(
+
research_interface::robot::Move::ControllerMode::kJointImpedance);
+
while (!motion_finished) {
+
auto read_once_return = active_control->readOnce();
+
auto robot_state = read_once_return.first;
+
auto duration = read_once_return.second;
+
auto cartesian_positions = callback_control(robot_state, duration);
+
motion_finished = cartesian_positions.motion_finished;
+
active_control->writeOnce(cartesian_positions);
+
}
+
+
} catch (const franka::Exception& e) {
+
std::cout << e.what() << std::endl;
+
return -1;
+
}
+
+
return 0;
+
}
+
Implements the ActiveControlBase abstract class.
+
Contains the franka::ActiveMotionGenerator type.
+
An example showing how to generate a joint pose motion to a goal position.
Definition: examples_common.h:31
+
Stores values for Cartesian pose motion generation.
Definition: control_types.h:127
+
Represents a duration with millisecond resolution.
Definition: duration.h:19
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
void control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
Starts a control loop for sending joint-level torque commands.
+
void setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds_acceleration, const std::array< double, 7 > &upper_torque_thresholds_acceleration, const std::array< double, 7 > &lower_torque_thresholds_nominal, const std::array< double, 7 > &upper_torque_thresholds_nominal, const std::array< double, 6 > &lower_force_thresholds_acceleration, const std::array< double, 6 > &upper_force_thresholds_acceleration, const std::array< double, 6 > &lower_force_thresholds_nominal, const std::array< double, 6 > &upper_force_thresholds_nominal)
Changes the collision behavior.
+
virtual std::unique_ptr< ActiveControlBase > startCartesianPoseControl(const research_interface::robot::Move::ControllerMode &control_type)
Starts a new cartesian position motion generator.
+
Torques MotionFinished(Torques command) noexcept
Helper method to indicate that a motion should stop after processing the given command.
Definition: control_types.h:294
+
Contains common types and functions for the examples.
+
void setDefaultBehavior(franka::Robot &robot)
Sets a default collision behavior, joint impedance and Cartesian impedance.
Definition: examples_common.cpp:12
+
Contains exception definitions.
+
Contains the franka::Robot type.
+
Base class for all exceptions used by libfranka.
Definition: exception.h:20
+
Describes the robot state.
Definition: robot_state.h:34
+
+ + + + diff --git a/generate_cartesian_velocity_motion_8cpp-example.html b/generate_cartesian_velocity_motion_8cpp-example.html new file mode 100644 index 00000000..b5ced35a --- /dev/null +++ b/generate_cartesian_velocity_motion_8cpp-example.html @@ -0,0 +1,178 @@ + + + + + + + +Project: generate_cartesian_velocity_motion.cpp + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
generate_cartesian_velocity_motion.cpp
+
+
+

An example showing how to generate a Cartesian velocity motion.

Warning
Before executing this example, make sure there is enough space in front of the robot.
+
// Copyright (c) 2023 Franka Robotics GmbH
+
// Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
#include <cmath>
+
#include <iostream>
+
+ +
#include <franka/robot.h>
+
+ +
+
int main(int argc, char** argv) {
+
if (argc != 2) {
+
std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
+
return -1;
+
}
+
try {
+
franka::Robot robot(argv[1]);
+ +
+
// First move the robot to a suitable joint configuration
+
std::array<double, 7> q_goal = {{0, -M_PI_4, 0, -3 * M_PI_4, 0, M_PI_2, M_PI_4}};
+
MotionGenerator motion_generator(0.5, q_goal);
+
std::cout << "WARNING: This example will move the robot! "
+
<< "Please make sure to have the user stop button at hand!" << std::endl
+
<< "Press Enter to continue..." << std::endl;
+
std::cin.ignore();
+
robot.control(motion_generator);
+
std::cout << "Finished moving to initial joint configuration." << std::endl;
+
+
// Set additional parameters always before the control loop, NEVER in the control loop!
+
// Set the joint impedance.
+
robot.setJointImpedance({{3000, 3000, 3000, 2500, 2500, 2000, 2000}});
+
+
// Set the collision behavior.
+
std::array<double, 7> lower_torque_thresholds_nominal{
+
{25.0, 25.0, 22.0, 20.0, 19.0, 17.0, 14.}};
+
std::array<double, 7> upper_torque_thresholds_nominal{
+
{35.0, 35.0, 32.0, 30.0, 29.0, 27.0, 24.0}};
+
std::array<double, 7> lower_torque_thresholds_acceleration{
+
{25.0, 25.0, 22.0, 20.0, 19.0, 17.0, 14.0}};
+
std::array<double, 7> upper_torque_thresholds_acceleration{
+
{35.0, 35.0, 32.0, 30.0, 29.0, 27.0, 24.0}};
+
std::array<double, 6> lower_force_thresholds_nominal{{30.0, 30.0, 30.0, 25.0, 25.0, 25.0}};
+
std::array<double, 6> upper_force_thresholds_nominal{{40.0, 40.0, 40.0, 35.0, 35.0, 35.0}};
+
std::array<double, 6> lower_force_thresholds_acceleration{{30.0, 30.0, 30.0, 25.0, 25.0, 25.0}};
+
std::array<double, 6> upper_force_thresholds_acceleration{{40.0, 40.0, 40.0, 35.0, 35.0, 35.0}};
+ +
lower_torque_thresholds_acceleration, upper_torque_thresholds_acceleration,
+
lower_torque_thresholds_nominal, upper_torque_thresholds_nominal,
+
lower_force_thresholds_acceleration, upper_force_thresholds_acceleration,
+
lower_force_thresholds_nominal, upper_force_thresholds_nominal);
+
+
double time_max = 4.0;
+
double v_max = 0.1;
+
double angle = M_PI / 4.0;
+
double time = 0.0;
+
robot.control([=, &time](const franka::RobotState&,
+ +
time += period.toSec();
+
+
double cycle = std::floor(pow(-1.0, (time - std::fmod(time, time_max)) / time_max));
+
double v = cycle * v_max / 2.0 * (1.0 - std::cos(2.0 * M_PI / time_max * time));
+
double v_x = std::cos(angle) * v;
+
double v_z = -std::sin(angle) * v;
+
+
franka::CartesianVelocities output = {{v_x, 0.0, v_z, 0.0, 0.0, 0.0}};
+
if (time >= 2 * time_max) {
+
std::cout << std::endl << "Finished motion, shutting down example" << std::endl;
+
return franka::MotionFinished(output);
+
}
+
return output;
+
});
+
} catch (const franka::Exception& e) {
+
std::cout << e.what() << std::endl;
+
return -1;
+
}
+
+
return 0;
+
}
+
An example showing how to generate a joint pose motion to a goal position.
Definition: examples_common.h:31
+
Stores values for Cartesian velocity motion generation.
Definition: control_types.h:211
+
Represents a duration with millisecond resolution.
Definition: duration.h:19
+
double toSec() const noexcept
Returns the stored duration in .
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
void control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
Starts a control loop for sending joint-level torque commands.
+
void setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds_acceleration, const std::array< double, 7 > &upper_torque_thresholds_acceleration, const std::array< double, 7 > &lower_torque_thresholds_nominal, const std::array< double, 7 > &upper_torque_thresholds_nominal, const std::array< double, 6 > &lower_force_thresholds_acceleration, const std::array< double, 6 > &upper_force_thresholds_acceleration, const std::array< double, 6 > &lower_force_thresholds_nominal, const std::array< double, 6 > &upper_force_thresholds_nominal)
Changes the collision behavior.
+
void setJointImpedance(const std::array< double, 7 > &K_theta)
Sets the impedance for each joint in the internal controller.
+
Torques MotionFinished(Torques command) noexcept
Helper method to indicate that a motion should stop after processing the given command.
Definition: control_types.h:294
+
Contains common types and functions for the examples.
+
void setDefaultBehavior(franka::Robot &robot)
Sets a default collision behavior, joint impedance and Cartesian impedance.
Definition: examples_common.cpp:12
+
Contains exception definitions.
+
Contains the franka::Robot type.
+
Base class for all exceptions used by libfranka.
Definition: exception.h:20
+
Describes the robot state.
Definition: robot_state.h:34
+
+ + + + diff --git a/generate_cartesian_velocity_motion_external_control_loop_8cpp-example.html b/generate_cartesian_velocity_motion_external_control_loop_8cpp-example.html new file mode 100644 index 00000000..6efc09a0 --- /dev/null +++ b/generate_cartesian_velocity_motion_external_control_loop_8cpp-example.html @@ -0,0 +1,198 @@ + + + + + + + +Project: generate_cartesian_velocity_motion_external_control_loop.cpp + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
generate_cartesian_velocity_motion_external_control_loop.cpp
+
+
+

An example showing how to generate a Cartesian velocity motion with an external control loop.

Warning
Before executing this example, make sure there is enough space in front of the robot.
+
// Copyright (c) 2023 Franka Robotics GmbH
+
// Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
#include <cmath>
+
#include <iostream>
+
+ + + +
#include <franka/robot.h>
+
+ +
+
int main(int argc, char** argv) {
+
// Check whether the required arguments were passed
+
if (argc != 2) {
+
std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
+
return -1;
+
}
+
+
try {
+
franka::Robot robot(argv[1]);
+ +
+
// First move the robot to a suitable joint configuration
+
std::array<double, 7> q_goal = {{0, -M_PI_4, 0, -3 * M_PI_4, 0, M_PI_2, M_PI_4}};
+
MotionGenerator motion_generator(0.5, q_goal);
+
std::cout << "WARNING: This example will move the robot! "
+
<< "Please make sure to have the user stop button at hand!" << std::endl
+
<< "Press Enter to continue..." << std::endl;
+
std::cin.ignore();
+
robot.control(motion_generator);
+
std::cout << "Finished moving to initial joint configuration." << std::endl;
+
+
// Set additional parameters always before the control loop, NEVER in the control loop!
+
// Set the joint impedance.
+
robot.setJointImpedance({{3000, 3000, 3000, 2500, 2500, 2000, 2000}});
+
+
// Set the collision behavior.
+
std::array<double, 7> lower_torque_thresholds_nominal{
+
{25.0, 25.0, 22.0, 20.0, 19.0, 17.0, 14.}};
+
std::array<double, 7> upper_torque_thresholds_nominal{
+
{35.0, 35.0, 32.0, 30.0, 29.0, 27.0, 24.0}};
+
std::array<double, 7> lower_torque_thresholds_acceleration{
+
{25.0, 25.0, 22.0, 20.0, 19.0, 17.0, 14.0}};
+
std::array<double, 7> upper_torque_thresholds_acceleration{
+
{35.0, 35.0, 32.0, 30.0, 29.0, 27.0, 24.0}};
+
std::array<double, 6> lower_force_thresholds_nominal{{30.0, 30.0, 30.0, 25.0, 25.0, 25.0}};
+
std::array<double, 6> upper_force_thresholds_nominal{{40.0, 40.0, 40.0, 35.0, 35.0, 35.0}};
+
std::array<double, 6> lower_force_thresholds_acceleration{{30.0, 30.0, 30.0, 25.0, 25.0, 25.0}};
+
std::array<double, 6> upper_force_thresholds_acceleration{{40.0, 40.0, 40.0, 35.0, 35.0, 35.0}};
+ +
lower_torque_thresholds_acceleration, upper_torque_thresholds_acceleration,
+
lower_torque_thresholds_nominal, upper_torque_thresholds_nominal,
+
lower_force_thresholds_acceleration, upper_force_thresholds_acceleration,
+
lower_force_thresholds_nominal, upper_force_thresholds_nominal);
+
+
double time_max = 4.0;
+
double v_max = 0.1;
+
double angle = M_PI / 4.0;
+
double time = 0.0;
+
+
auto callback_control = [=, &time](const franka::RobotState&,
+ +
time += period.toSec();
+
+
double cycle = std::floor(pow(-1.0, (time - std::fmod(time, time_max)) / time_max));
+
double v = cycle * v_max / 2.0 * (1.0 - std::cos(2.0 * M_PI / time_max * time));
+
double v_x = std::cos(angle) * v;
+
double v_z = -std::sin(angle) * v;
+
+
franka::CartesianVelocities output = {{v_x, 0.0, v_z, 0.0, 0.0, 0.0}};
+
if (time >= 2 * time_max) {
+
std::cout << std::endl << "Finished motion, shutting down example" << std::endl;
+
return franka::MotionFinished(output);
+
}
+
return output;
+
};
+
+
bool motion_finished = false;
+
auto active_control = robot.startCartesianVelocityControl(
+
research_interface::robot::Move::ControllerMode::kJointImpedance);
+
while (!motion_finished) {
+
auto read_once_return = active_control->readOnce();
+
auto robot_state = read_once_return.first;
+
auto duration = read_once_return.second;
+
auto cartesian_velocities = callback_control(robot_state, duration);
+
motion_finished = cartesian_velocities.motion_finished;
+
active_control->writeOnce(cartesian_velocities);
+
}
+
+
} catch (const franka::Exception& e) {
+
std::cout << e.what() << std::endl;
+
return -1;
+
}
+
+
return 0;
+
}
+
Implements the ActiveControlBase abstract class.
+
Contains the franka::ActiveMotionGenerator type.
+
An example showing how to generate a joint pose motion to a goal position.
Definition: examples_common.h:31
+
Stores values for Cartesian velocity motion generation.
Definition: control_types.h:211
+
Represents a duration with millisecond resolution.
Definition: duration.h:19
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
void control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
Starts a control loop for sending joint-level torque commands.
+
void setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds_acceleration, const std::array< double, 7 > &upper_torque_thresholds_acceleration, const std::array< double, 7 > &lower_torque_thresholds_nominal, const std::array< double, 7 > &upper_torque_thresholds_nominal, const std::array< double, 6 > &lower_force_thresholds_acceleration, const std::array< double, 6 > &upper_force_thresholds_acceleration, const std::array< double, 6 > &lower_force_thresholds_nominal, const std::array< double, 6 > &upper_force_thresholds_nominal)
Changes the collision behavior.
+
virtual std::unique_ptr< ActiveControlBase > startCartesianVelocityControl(const research_interface::robot::Move::ControllerMode &control_type)
Starts a new cartesian velocity motion generator.
+
void setJointImpedance(const std::array< double, 7 > &K_theta)
Sets the impedance for each joint in the internal controller.
+
Torques MotionFinished(Torques command) noexcept
Helper method to indicate that a motion should stop after processing the given command.
Definition: control_types.h:294
+
Contains common types and functions for the examples.
+
void setDefaultBehavior(franka::Robot &robot)
Sets a default collision behavior, joint impedance and Cartesian impedance.
Definition: examples_common.cpp:12
+
Contains exception definitions.
+
Contains the franka::Robot type.
+
Base class for all exceptions used by libfranka.
Definition: exception.h:20
+
Describes the robot state.
Definition: robot_state.h:34
+
+ + + + diff --git a/generate_consecutive_motions_8cpp-example.html b/generate_consecutive_motions_8cpp-example.html new file mode 100644 index 00000000..3e88f2e8 --- /dev/null +++ b/generate_consecutive_motions_8cpp-example.html @@ -0,0 +1,172 @@ + + + + + + + +Project: generate_consecutive_motions.cpp + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
generate_consecutive_motions.cpp
+
+
+

An example showing how to execute consecutive motions with error recovery.

Warning
Before executing this example, make sure there is enough space in front and to the side of the robot.
+
// Copyright (c) 2023 Franka Robotics GmbH
+
// Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
#include <cmath>
+
#include <iostream>
+
+ +
#include <franka/robot.h>
+
+ +
+
int main(int argc, char** argv) {
+
if (argc != 2) {
+
std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
+
return -1;
+
}
+
try {
+
franka::Robot robot(argv[1]);
+ +
+
// First move the robot to a suitable joint configuration
+
std::array<double, 7> q_goal = {{0, -M_PI_4, 0, -3 * M_PI_4, 0, M_PI_2, M_PI_4}};
+
MotionGenerator motion_generator(0.5, q_goal);
+
std::cout << "WARNING: This example will move the robot! "
+
<< "Please make sure to have the user stop button at hand!" << std::endl
+
<< "Press Enter to continue..." << std::endl;
+
std::cin.ignore();
+
robot.control(motion_generator);
+
std::cout << "Finished moving to initial joint configuration." << std::endl;
+
+
// Set additional parameters always before the control loop, NEVER in the control loop!
+
// Set collision behavior.
+ +
{{10.0, 10.0, 9.0, 9.0, 8.0, 7.0, 6.0}}, {{10.0, 10.0, 9.0, 9.0, 8.0, 7.0, 6.0}},
+
{{10.0, 10.0, 9.0, 9.0, 8.0, 7.0, 6.0}}, {{10.0, 10.0, 9.0, 9.0, 8.0, 7.0, 6.0}},
+
{{10.0, 10.0, 10.0, 12.5, 12.5, 12.5}}, {{10.0, 10.0, 10.0, 12.5, 12.5, 12.5}},
+
{{10.0, 10.0, 10.0, 12.5, 12.5, 12.5}}, {{10.0, 10.0, 10.0, 12.5, 12.5, 12.5}});
+
+
for (size_t i = 0; i < 5; i++) {
+
std::cout << "Executing motion." << std::endl;
+
try {
+
double time_max = 4.0;
+
double omega_max = 0.2;
+
double time = 0.0;
+
robot.control([=, &time](const franka::RobotState&,
+ +
time += period.toSec();
+
+
double cycle = std::floor(std::pow(-1.0, (time - std::fmod(time, time_max)) / time_max));
+
double omega = cycle * omega_max / 2.0 * (1.0 - std::cos(2.0 * M_PI / time_max * time));
+
+
franka::JointVelocities velocities = {{0.0, 0.0, omega, 0.0, 0.0, 0.0, 0.0}};
+
if (time >= 2 * time_max) {
+
std::cout << std::endl << "Finished motion." << std::endl;
+
return franka::MotionFinished(velocities);
+
}
+
return velocities;
+
});
+
} catch (const franka::ControlException& e) {
+
std::cout << e.what() << std::endl;
+
std::cout << "Running error recovery..." << std::endl;
+ +
}
+
}
+
} catch (const franka::Exception& e) {
+
std::cout << e.what() << std::endl;
+
return -1;
+
}
+
+
std::cout << "Finished." << std::endl;
+
+
return 0;
+
}
+
An example showing how to generate a joint pose motion to a goal position.
Definition: examples_common.h:31
+
Represents a duration with millisecond resolution.
Definition: duration.h:19
+
double toSec() const noexcept
Returns the stored duration in .
+
Stores values for joint velocity motion generation.
Definition: control_types.h:99
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
void control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
Starts a control loop for sending joint-level torque commands.
+
void setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds_acceleration, const std::array< double, 7 > &upper_torque_thresholds_acceleration, const std::array< double, 7 > &lower_torque_thresholds_nominal, const std::array< double, 7 > &upper_torque_thresholds_nominal, const std::array< double, 6 > &lower_force_thresholds_acceleration, const std::array< double, 6 > &upper_force_thresholds_acceleration, const std::array< double, 6 > &lower_force_thresholds_nominal, const std::array< double, 6 > &upper_force_thresholds_nominal)
Changes the collision behavior.
+
void automaticErrorRecovery()
Runs automatic error recovery on the robot.
+
Torques MotionFinished(Torques command) noexcept
Helper method to indicate that a motion should stop after processing the given command.
Definition: control_types.h:294
+
Contains common types and functions for the examples.
+
void setDefaultBehavior(franka::Robot &robot)
Sets a default collision behavior, joint impedance and Cartesian impedance.
Definition: examples_common.cpp:12
+
Contains exception definitions.
+
Contains the franka::Robot type.
+
ControlException is thrown if an error occurs during motion generation or torque control.
Definition: exception.h:73
+
Base class for all exceptions used by libfranka.
Definition: exception.h:20
+
Describes the robot state.
Definition: robot_state.h:34
+
+ + + + diff --git a/generate_elbow_motion_8cpp-example.html b/generate_elbow_motion_8cpp-example.html new file mode 100644 index 00000000..465563ae --- /dev/null +++ b/generate_elbow_motion_8cpp-example.html @@ -0,0 +1,169 @@ + + + + + + + +Project: generate_elbow_motion.cpp + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
generate_elbow_motion.cpp
+
+
+

An example showing how to move the robot's elbow.

Warning
Before executing this example, make sure that the elbow has enough space to move.
+
// Copyright (c) 2023 Franka Robotics GmbH
+
// Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
#include <cmath>
+
#include <iostream>
+
+ +
#include <franka/robot.h>
+
+ +
+
int main(int argc, char** argv) {
+
if (argc != 2) {
+
std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
+
return -1;
+
}
+
try {
+
franka::Robot robot(argv[1]);
+ +
+
// First move the robot to a suitable joint configuration
+
std::array<double, 7> q_goal = {{0, -M_PI_4, 0, -3 * M_PI_4, 0, M_PI_2, M_PI_4}};
+
MotionGenerator motion_generator(0.5, q_goal);
+
std::cout << "WARNING: This example will move the robot! "
+
<< "Please make sure to have the user stop button at hand!" << std::endl
+
<< "Press Enter to continue..." << std::endl;
+
std::cin.ignore();
+
robot.control(motion_generator);
+
std::cout << "Finished moving to initial joint configuration." << std::endl;
+
+
// Set additional parameters always before the control loop, NEVER in the control loop!
+
// Set collision behavior.
+ +
{{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
+
{{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
+
{{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}},
+
{{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}});
+
+
std::array<double, 16> initial_pose;
+
std::array<double, 2> initial_elbow;
+
double time = 0.0;
+
robot.control(
+
[&time, &initial_pose, &initial_elbow](const franka::RobotState& robot_state,
+ +
time += period.toSec();
+
+
if (time == 0.0) {
+
initial_pose = robot_state.O_T_EE;
+
initial_elbow = robot_state.elbow;
+
}
+
+
double angle = M_PI / 10.0 * (1.0 - std::cos(M_PI / 5.0 * time));
+
+
auto elbow = initial_elbow;
+
elbow[0] += angle;
+
+
if (time >= 10.0) {
+
std::cout << std::endl << "Finished motion, shutting down example" << std::endl;
+
return franka::MotionFinished({initial_pose, elbow});
+
}
+
+
return {initial_pose, elbow};
+
});
+
} catch (const franka::Exception& e) {
+
std::cout << e.what() << std::endl;
+
return -1;
+
}
+
+
return 0;
+
}
+
An example showing how to generate a joint pose motion to a goal position.
Definition: examples_common.h:31
+
Stores values for Cartesian pose motion generation.
Definition: control_types.h:127
+
Represents a duration with millisecond resolution.
Definition: duration.h:19
+
double toSec() const noexcept
Returns the stored duration in .
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
void control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
Starts a control loop for sending joint-level torque commands.
+
void setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds_acceleration, const std::array< double, 7 > &upper_torque_thresholds_acceleration, const std::array< double, 7 > &lower_torque_thresholds_nominal, const std::array< double, 7 > &upper_torque_thresholds_nominal, const std::array< double, 6 > &lower_force_thresholds_acceleration, const std::array< double, 6 > &upper_force_thresholds_acceleration, const std::array< double, 6 > &lower_force_thresholds_nominal, const std::array< double, 6 > &upper_force_thresholds_nominal)
Changes the collision behavior.
+
Torques MotionFinished(Torques command) noexcept
Helper method to indicate that a motion should stop after processing the given command.
Definition: control_types.h:294
+
Contains common types and functions for the examples.
+
void setDefaultBehavior(franka::Robot &robot)
Sets a default collision behavior, joint impedance and Cartesian impedance.
Definition: examples_common.cpp:12
+
Contains exception definitions.
+
Contains the franka::Robot type.
+
Base class for all exceptions used by libfranka.
Definition: exception.h:20
+
Describes the robot state.
Definition: robot_state.h:34
+
std::array< double, 16 > O_T_EE
Measured end effector pose in base frame.
Definition: robot_state.h:40
+
std::array< double, 2 > elbow
Elbow configuration.
Definition: robot_state.h:161
+
+ + + + diff --git a/generate_joint_position_motion_8cpp-example.html b/generate_joint_position_motion_8cpp-example.html new file mode 100644 index 00000000..a2c63803 --- /dev/null +++ b/generate_joint_position_motion_8cpp-example.html @@ -0,0 +1,166 @@ + + + + + + + +Project: generate_joint_position_motion.cpp + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
generate_joint_position_motion.cpp
+
+
+

An example showing how to generate a joint position motion.

Warning
Before executing this example, make sure there is enough space in front of the robot.
+
// Copyright (c) 2023 Franka Robotics GmbH
+
// Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
#include <cmath>
+
#include <iostream>
+
+ +
#include <franka/robot.h>
+
+ +
+
int main(int argc, char** argv) {
+
if (argc != 2) {
+
std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
+
return -1;
+
}
+
try {
+
franka::Robot robot(argv[1]);
+ +
+
// First move the robot to a suitable joint configuration
+
std::array<double, 7> q_goal = {{0, -M_PI_4, 0, -3 * M_PI_4, 0, M_PI_2, M_PI_4}};
+
MotionGenerator motion_generator(0.5, q_goal);
+
std::cout << "WARNING: This example will move the robot! "
+
<< "Please make sure to have the user stop button at hand!" << std::endl
+
<< "Press Enter to continue..." << std::endl;
+
std::cin.ignore();
+
robot.control(motion_generator);
+
std::cout << "Finished moving to initial joint configuration." << std::endl;
+
+
// Set additional parameters always before the control loop, NEVER in the control loop!
+
// Set collision behavior.
+ +
{{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
+
{{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
+
{{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}},
+
{{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}});
+
+
std::array<double, 7> initial_position;
+
double time = 0.0;
+
robot.control([&initial_position, &time](const franka::RobotState& robot_state,
+ +
time += period.toSec();
+
+
if (time == 0.0) {
+
initial_position = robot_state.q;
+
}
+
+
double delta_angle = M_PI / 8.0 * (1 - std::cos(M_PI / 2.5 * time));
+
+
franka::JointPositions output = {{initial_position[0], initial_position[1],
+
initial_position[2], initial_position[3] + delta_angle,
+
initial_position[4] + delta_angle, initial_position[5],
+
initial_position[6] + delta_angle}};
+
+
if (time >= 5.0) {
+
std::cout << std::endl << "Finished motion, shutting down example" << std::endl;
+
return franka::MotionFinished(output);
+
}
+
return output;
+
});
+
} catch (const franka::Exception& e) {
+
std::cout << e.what() << std::endl;
+
return -1;
+
}
+
+
return 0;
+
}
+
An example showing how to generate a joint pose motion to a goal position.
Definition: examples_common.h:31
+
Represents a duration with millisecond resolution.
Definition: duration.h:19
+
double toSec() const noexcept
Returns the stored duration in .
+
Stores values for joint position motion generation.
Definition: control_types.h:72
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
void control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
Starts a control loop for sending joint-level torque commands.
+
void setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds_acceleration, const std::array< double, 7 > &upper_torque_thresholds_acceleration, const std::array< double, 7 > &lower_torque_thresholds_nominal, const std::array< double, 7 > &upper_torque_thresholds_nominal, const std::array< double, 6 > &lower_force_thresholds_acceleration, const std::array< double, 6 > &upper_force_thresholds_acceleration, const std::array< double, 6 > &lower_force_thresholds_nominal, const std::array< double, 6 > &upper_force_thresholds_nominal)
Changes the collision behavior.
+
Torques MotionFinished(Torques command) noexcept
Helper method to indicate that a motion should stop after processing the given command.
Definition: control_types.h:294
+
Contains common types and functions for the examples.
+
void setDefaultBehavior(franka::Robot &robot)
Sets a default collision behavior, joint impedance and Cartesian impedance.
Definition: examples_common.cpp:12
+
Contains exception definitions.
+
Contains the franka::Robot type.
+
Base class for all exceptions used by libfranka.
Definition: exception.h:20
+
Describes the robot state.
Definition: robot_state.h:34
+
std::array< double, 7 > q
Measured joint position.
Definition: robot_state.h:233
+
+ + + + diff --git a/generate_joint_position_motion_external_control_loop_8cpp-example.html b/generate_joint_position_motion_external_control_loop_8cpp-example.html new file mode 100644 index 00000000..114e9195 --- /dev/null +++ b/generate_joint_position_motion_external_control_loop_8cpp-example.html @@ -0,0 +1,184 @@ + + + + + + + +Project: generate_joint_position_motion_external_control_loop.cpp + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
generate_joint_position_motion_external_control_loop.cpp
+
+
+

An example showing how to generate a joint position motion with an external control loop..

+
Warning
Before executing this example, make sure there is enough space in front of the robot.
+
// Copyright (c) 2023 Franka Robotics GmbH
+
// Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
#include <cmath>
+
#include <iostream>
+
+ + + +
#include <franka/robot.h>
+ +
int main(int argc, char** argv) {
+
// Check whether the required arguments were passed
+
if (argc != 2) {
+
std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
+
return -1;
+
}
+
+
try {
+
franka::Robot robot(argv[1]);
+ +
+
// First move the robot to a suitable joint configuration
+
std::array<double, 7> q_goal = {{0, -M_PI_4, 0, -3 * M_PI_4, 0, M_PI_2, M_PI_4}};
+
MotionGenerator motion_generator(0.5, q_goal);
+
std::cout << "WARNING: This example will move the robot! "
+
<< "Please make sure to have the user stop button at hand!" << std::endl
+
<< "Press Enter to continue..." << std::endl;
+
std::cin.ignore();
+
robot.control(motion_generator);
+
std::cout << "Finished moving to initial joint configuration." << std::endl;
+
+
// Set additional parameters always before the control loop, NEVER in the control loop!
+
// Set collision behavior.
+ +
{{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
+
{{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
+
{{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}},
+
{{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}});
+
+
std::array<double, 7> initial_position{{0, 0, 0, 0, 0, 0, 0}};
+
double time = 0.0;
+
auto control_callback = [&initial_position, &time](
+
const franka::RobotState& robot_state,
+ +
time += period.toSec();
+
+
if (time == 0.0) {
+
initial_position = robot_state.q_d;
+
}
+
+
double delta_angle = M_PI / 8.0 * (1 - std::cos(M_PI / 2.5 * time));
+
+
franka::JointPositions output = {{initial_position[0], initial_position[1],
+
initial_position[2], initial_position[3] + delta_angle,
+
initial_position[4] + delta_angle, initial_position[5],
+
initial_position[6] + delta_angle}};
+
+
if (time >= 5.0) {
+
std::cout << std::endl << "Finished motion, shutting down example" << std::endl;
+
return franka::MotionFinished(output);
+
}
+
return output;
+
};
+
+
bool motion_finished = false;
+
auto active_control = robot.startJointPositionControl(
+
research_interface::robot::Move::ControllerMode::kJointImpedance);
+
while (!motion_finished) {
+
auto read_once_return = active_control->readOnce();
+
auto robot_state = read_once_return.first;
+
auto duration = read_once_return.second;
+
auto joint_positions = control_callback(robot_state, duration);
+
motion_finished = joint_positions.motion_finished;
+
active_control->writeOnce(joint_positions);
+
}
+
+
} catch (const franka::Exception& e) {
+
std::cout << e.what() << std::endl;
+
return -1;
+
}
+
+
return 0;
+
}
+
Implements the ActiveControlBase abstract class.
+
Contains the franka::ActiveMotionGenerator type.
+
An example showing how to generate a joint pose motion to a goal position.
Definition: examples_common.h:31
+
Represents a duration with millisecond resolution.
Definition: duration.h:19
+
Stores values for joint position motion generation.
Definition: control_types.h:72
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
void control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
Starts a control loop for sending joint-level torque commands.
+
void setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds_acceleration, const std::array< double, 7 > &upper_torque_thresholds_acceleration, const std::array< double, 7 > &lower_torque_thresholds_nominal, const std::array< double, 7 > &upper_torque_thresholds_nominal, const std::array< double, 6 > &lower_force_thresholds_acceleration, const std::array< double, 6 > &upper_force_thresholds_acceleration, const std::array< double, 6 > &lower_force_thresholds_nominal, const std::array< double, 6 > &upper_force_thresholds_nominal)
Changes the collision behavior.
+
virtual std::unique_ptr< ActiveControlBase > startJointPositionControl(const research_interface::robot::Move::ControllerMode &control_type)
Starts a new joint position motion generator.
+
Torques MotionFinished(Torques command) noexcept
Helper method to indicate that a motion should stop after processing the given command.
Definition: control_types.h:294
+
Contains common types and functions for the examples.
+
void setDefaultBehavior(franka::Robot &robot)
Sets a default collision behavior, joint impedance and Cartesian impedance.
Definition: examples_common.cpp:12
+
Contains exception definitions.
+
Contains the franka::Robot type.
+
Base class for all exceptions used by libfranka.
Definition: exception.h:20
+
Describes the robot state.
Definition: robot_state.h:34
+
+ + + + diff --git a/generate_joint_velocity_motion_8cpp-example.html b/generate_joint_velocity_motion_8cpp-example.html new file mode 100644 index 00000000..486d814b --- /dev/null +++ b/generate_joint_velocity_motion_8cpp-example.html @@ -0,0 +1,160 @@ + + + + + + + +Project: generate_joint_velocity_motion.cpp + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
generate_joint_velocity_motion.cpp
+
+
+

An example showing how to generate a joint velocity motion.

Warning
Before executing this example, make sure there is enough space in front of the robot.
+
// Copyright (c) 2023 Franka Robotics GmbH
+
// Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
#include <cmath>
+
#include <iostream>
+
+ +
#include <franka/robot.h>
+
+ +
+
int main(int argc, char** argv) {
+
if (argc != 2) {
+
std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
+
return -1;
+
}
+
try {
+
franka::Robot robot(argv[1]);
+ +
+
// First move the robot to a suitable joint configuration
+
std::array<double, 7> q_goal = {{0, -M_PI_4, 0, -3 * M_PI_4, 0, M_PI_2, M_PI_4}};
+
MotionGenerator motion_generator(0.5, q_goal);
+
std::cout << "WARNING: This example will move the robot! "
+
<< "Please make sure to have the user stop button at hand!" << std::endl
+
<< "Press Enter to continue..." << std::endl;
+
std::cin.ignore();
+
robot.control(motion_generator);
+
std::cout << "Finished moving to initial joint configuration." << std::endl;
+
+
// Set additional parameters always before the control loop, NEVER in the control loop!
+
// Set collision behavior.
+ +
{{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
+
{{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
+
{{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}},
+
{{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}});
+
+
double time_max = 1.0;
+
double omega_max = 1.0;
+
double time = 0.0;
+
robot.control(
+ +
time += period.toSec();
+
+
double cycle = std::floor(std::pow(-1.0, (time - std::fmod(time, time_max)) / time_max));
+
double omega = cycle * omega_max / 2.0 * (1.0 - std::cos(2.0 * M_PI / time_max * time));
+
+
franka::JointVelocities velocities = {{0.0, 0.0, 0.0, omega, omega, omega, omega}};
+
+
if (time >= 2 * time_max) {
+
std::cout << std::endl << "Finished motion, shutting down example" << std::endl;
+
return franka::MotionFinished(velocities);
+
}
+
return velocities;
+
});
+
} catch (const franka::Exception& e) {
+
std::cout << e.what() << std::endl;
+
return -1;
+
}
+
+
return 0;
+
}
+
An example showing how to generate a joint pose motion to a goal position.
Definition: examples_common.h:31
+
Represents a duration with millisecond resolution.
Definition: duration.h:19
+
double toSec() const noexcept
Returns the stored duration in .
+
Stores values for joint velocity motion generation.
Definition: control_types.h:99
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
void control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
Starts a control loop for sending joint-level torque commands.
+
void setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds_acceleration, const std::array< double, 7 > &upper_torque_thresholds_acceleration, const std::array< double, 7 > &lower_torque_thresholds_nominal, const std::array< double, 7 > &upper_torque_thresholds_nominal, const std::array< double, 6 > &lower_force_thresholds_acceleration, const std::array< double, 6 > &upper_force_thresholds_acceleration, const std::array< double, 6 > &lower_force_thresholds_nominal, const std::array< double, 6 > &upper_force_thresholds_nominal)
Changes the collision behavior.
+
Torques MotionFinished(Torques command) noexcept
Helper method to indicate that a motion should stop after processing the given command.
Definition: control_types.h:294
+
Contains common types and functions for the examples.
+
void setDefaultBehavior(franka::Robot &robot)
Sets a default collision behavior, joint impedance and Cartesian impedance.
Definition: examples_common.cpp:12
+
Contains exception definitions.
+
Contains the franka::Robot type.
+
Base class for all exceptions used by libfranka.
Definition: exception.h:20
+
Describes the robot state.
Definition: robot_state.h:34
+
+ + + + diff --git a/generate_joint_velocity_motion_external_control_loop_8cpp-example.html b/generate_joint_velocity_motion_external_control_loop_8cpp-example.html new file mode 100644 index 00000000..da07158f --- /dev/null +++ b/generate_joint_velocity_motion_external_control_loop_8cpp-example.html @@ -0,0 +1,180 @@ + + + + + + + +Project: generate_joint_velocity_motion_external_control_loop.cpp + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
generate_joint_velocity_motion_external_control_loop.cpp
+
+
+

An example showing how to generate a joint velocity motion with an external control loop.

Warning
Before executing this example, make sure there is enough space in front of the robot.
+
// Copyright (c) 2023 Franka Robotics GmbH
+
// Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
#include <cmath>
+
#include <iostream>
+
+ + + +
#include <franka/robot.h>
+
+ +
+
int main(int argc, char** argv) {
+
// Check whether the required arguments were passed
+
if (argc != 2) {
+
std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
+
return -1;
+
}
+
+
try {
+
franka::Robot robot(argv[1]);
+ +
+
// First move the robot to a suitable joint configuration
+
std::array<double, 7> q_goal = {{0, -M_PI_4, 0, -3 * M_PI_4, 0, M_PI_2, M_PI_4}};
+
MotionGenerator motion_generator(0.5, q_goal);
+
std::cout << "WARNING: This example will move the robot! "
+
<< "Please make sure to have the user stop button at hand!" << std::endl
+
<< "Press Enter to continue..." << std::endl;
+
std::cin.ignore();
+
robot.control(motion_generator);
+
std::cout << "Finished moving to initial joint configuration." << std::endl;
+
+
// Set additional parameters always before the control loop, NEVER in the control loop!
+
// Set collision behavior.
+ +
{{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
+
{{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
+
{{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}},
+
{{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}});
+
+
double time_max = 1.0;
+
double omega_max = 1.0;
+
double time = 0.0;
+
+
auto callback_control = [=, &time](const franka::RobotState&,
+ +
time += period.toSec();
+
+
double cycle = std::floor(std::pow(-1.0, (time - std::fmod(time, time_max)) / time_max));
+
double omega = cycle * omega_max / 2.0 * (1.0 - std::cos(2.0 * M_PI / time_max * time));
+
+
franka::JointVelocities velocities = {{0.0, 0.0, 0.0, omega, omega, omega, omega}};
+
+
if (time >= 2 * time_max) {
+
std::cout << std::endl << "Finished motion, shutting down example" << std::endl;
+
return franka::MotionFinished(velocities);
+
}
+
return velocities;
+
};
+
+
bool motion_finished = false;
+
auto active_control = robot.startJointVelocityControl(
+
research_interface::robot::Move::ControllerMode::kJointImpedance);
+
while (!motion_finished) {
+
auto read_once_return = active_control->readOnce();
+
auto robot_state = read_once_return.first;
+
auto duration = read_once_return.second;
+
auto joint_velocities = callback_control(robot_state, duration);
+
motion_finished = joint_velocities.motion_finished;
+
active_control->writeOnce(joint_velocities);
+
}
+
+
} catch (const franka::Exception& e) {
+
std::cout << e.what() << std::endl;
+
return -1;
+
}
+
+
return 0;
+
}
+
Implements the ActiveControlBase abstract class.
+
Contains the franka::ActiveMotionGenerator type.
+
An example showing how to generate a joint pose motion to a goal position.
Definition: examples_common.h:31
+
Represents a duration with millisecond resolution.
Definition: duration.h:19
+
Stores values for joint velocity motion generation.
Definition: control_types.h:99
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
void control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
Starts a control loop for sending joint-level torque commands.
+
void setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds_acceleration, const std::array< double, 7 > &upper_torque_thresholds_acceleration, const std::array< double, 7 > &lower_torque_thresholds_nominal, const std::array< double, 7 > &upper_torque_thresholds_nominal, const std::array< double, 6 > &lower_force_thresholds_acceleration, const std::array< double, 6 > &upper_force_thresholds_acceleration, const std::array< double, 6 > &lower_force_thresholds_nominal, const std::array< double, 6 > &upper_force_thresholds_nominal)
Changes the collision behavior.
+
virtual std::unique_ptr< ActiveControlBase > startJointVelocityControl(const research_interface::robot::Move::ControllerMode &control_type)
Starts a new joint velocity motion generator.
+
Torques MotionFinished(Torques command) noexcept
Helper method to indicate that a motion should stop after processing the given command.
Definition: control_types.h:294
+
Contains common types and functions for the examples.
+
void setDefaultBehavior(franka::Robot &robot)
Sets a default collision behavior, joint impedance and Cartesian impedance.
Definition: examples_common.cpp:12
+
Contains exception definitions.
+
Contains the franka::Robot type.
+
Base class for all exceptions used by libfranka.
Definition: exception.h:20
+
Describes the robot state.
Definition: robot_state.h:34
+
+ + + + diff --git a/globals.html b/globals.html new file mode 100644 index 00000000..09219f50 --- /dev/null +++ b/globals.html @@ -0,0 +1,84 @@ + + + + + + + +Project: File Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented file members with links to the documentation:
+
+ + + + diff --git a/globals_func.html b/globals_func.html new file mode 100644 index 00000000..883ed9aa --- /dev/null +++ b/globals_func.html @@ -0,0 +1,84 @@ + + + + + + + +Project: File Members + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/graph_legend.html b/graph_legend.html new file mode 100644 index 00000000..5f08499b --- /dev/null +++ b/graph_legend.html @@ -0,0 +1,143 @@ + + + + + + + +Project: Graph Legend + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

/*! Invisible class because of truncation */
+
class Invisible { };
+
+
/*! Truncated class, inheritance relation is hidden */
+
class Truncated : public Invisible { };
+
+
/* Class not documented with doxygen comments */
+
class Undocumented { };
+
+
/*! Class that is inherited using public inheritance */
+
class PublicBase : public Truncated { };
+
+
/*! A template class */
+
template<class T> class Templ { };
+
+
/*! Class that is inherited using protected inheritance */
+
class ProtectedBase { };
+
+
/*! Class that is inherited using private inheritance */
+
class PrivateBase { };
+
+
/*! Class that is used by the Inherited class */
+
class Used { };
+
+
/*! Super class that inherits a number of other classes */
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private:
+
Used *m_usedClass;
+
};
+

This will result in the following graph:

+

The boxes in the above graph have the following meaning:

+
    +
  • +A filled gray box represents the struct or class for which the graph is generated.
  • +
  • +A box with a black border denotes a documented struct or class.
  • +
  • +A box with a gray border denotes an undocumented struct or class.
  • +
  • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • +
+

The arrows have the following meaning:

+
    +
  • +A dark blue arrow is used to visualize a public inheritance relation between two classes.
  • +
  • +A dark green arrow is used for protected inheritance.
  • +
  • +A dark red arrow is used for private inheritance.
  • +
  • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
  • +
  • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
  • +
+
+ + + + diff --git a/graph_legend.md5 b/graph_legend.md5 new file mode 100644 index 00000000..8fcdccd1 --- /dev/null +++ b/graph_legend.md5 @@ -0,0 +1 @@ +f51bf6e9a10430aafef59831b08dcbfe \ No newline at end of file diff --git a/graph_legend.png b/graph_legend.png new file mode 100644 index 0000000000000000000000000000000000000000..7e2cbcfb2d143e382be6ed65635a3d859e53bc36 GIT binary patch literal 20615 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 literal 0 HcmV?d00001 diff --git a/grasp_object_8cpp-example.html b/grasp_object_8cpp-example.html new file mode 100644 index 00000000..9779c2e9 --- /dev/null +++ b/grasp_object_8cpp-example.html @@ -0,0 +1,158 @@ + + + + + + + +Project: grasp_object.cpp + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
grasp_object.cpp
+
+
+

An example showing how to control FRANKA's gripper.

+
// Copyright (c) 2023 Franka Robotics GmbH
+
// Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
#include <iostream>
+
#include <sstream>
+
#include <string>
+
#include <thread>
+
+
+
#include <franka/gripper.h>
+
+
int main(int argc, char** argv) {
+
if (argc != 4) {
+
std::cerr << "Usage: ./grasp_object <gripper-hostname> <homing> <object-width>" << std::endl;
+
return -1;
+
}
+
+
try {
+
franka::Gripper gripper(argv[1]);
+
double grasping_width = std::stod(argv[3]);
+
+
std::stringstream ss(argv[2]);
+
bool homing;
+
if (!(ss >> homing)) {
+
std::cerr << "<homing> can be 0 or 1." << std::endl;
+
return -1;
+
}
+
+
if (homing) {
+
// Do a homing in order to estimate the maximum grasping width with the current fingers.
+
gripper.homing();
+
}
+
+
// Check for the maximum grasping width.
+
franka::GripperState gripper_state = gripper.readOnce();
+
if (gripper_state.max_width < grasping_width) {
+
std::cout << "Object is too large for the current fingers on the gripper." << std::endl;
+
return -1;
+
}
+
+
// Grasp the object.
+
if (!gripper.grasp(grasping_width, 0.1, 60)) {
+
std::cout << "Failed to grasp object." << std::endl;
+
return -1;
+
}
+
+
// Wait 3s and check afterwards, if the object is still grasped.
+
std::this_thread::sleep_for(std::chrono::duration<double, std::milli>(3000));
+
+
gripper_state = gripper.readOnce();
+
if (!gripper_state.is_grasped) {
+
std::cout << "Object lost." << std::endl;
+
return -1;
+
}
+
+
std::cout << "Grasped object, will release it now." << std::endl;
+
gripper.stop();
+
} catch (franka::Exception const& e) {
+
std::cout << e.what() << std::endl;
+
return -1;
+
}
+
+
return 0;
+
}
+
Maintains a network connection to the gripper, provides the current gripper state,...
Definition: gripper.h:27
+
GripperState readOnce() const
Waits for a gripper state update and returns it.
+
bool grasp(double width, double speed, double force, double epsilon_inner=0.005, double epsilon_outer=0.005) const
Grasps an object.
+
bool stop() const
Stops a currently running gripper move or grasp.
+
bool homing() const
Performs homing of the gripper.
+
Contains exception definitions.
+
Contains the franka::Gripper type.
+
Base class for all exceptions used by libfranka.
Definition: exception.h:20
+
Describes the gripper state.
Definition: gripper_state.h:20
+
bool is_grasped
Indicates whether an object is currently grasped.
Definition: gripper_state.h:38
+
double max_width
Maximum gripper opening width.
Definition: gripper_state.h:33
+
+ + + + diff --git a/gripper_8h.html b/gripper_8h.html new file mode 100644 index 00000000..de093bb9 --- /dev/null +++ b/gripper_8h.html @@ -0,0 +1,123 @@ + + + + + + + +Project: include/franka/gripper.h File Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
gripper.h File Reference
+
+
+ +

Contains the franka::Gripper type. +More...

+
#include <cstdint>
+#include <memory>
+#include <string>
+#include <franka/gripper_state.h>
+
+Include dependency graph for gripper.h:
+
+
+ + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  franka::Gripper
 Maintains a network connection to the gripper, provides the current gripper state, and allows the execution of commands. More...
 
+

Detailed Description

+

Contains the franka::Gripper type.

+
+ + + + diff --git a/gripper_8h__incl.map b/gripper_8h__incl.map new file mode 100644 index 00000000..ab2f3ac5 --- /dev/null +++ b/gripper_8h__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/gripper_8h__incl.md5 b/gripper_8h__incl.md5 new file mode 100644 index 00000000..3dadb7a6 --- /dev/null +++ b/gripper_8h__incl.md5 @@ -0,0 +1 @@ +901bc6e28dd18b0229ad7be1abed0856 \ No newline at end of file diff --git a/gripper_8h__incl.png b/gripper_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..1b163fa9b12b188d7b69a599a9ecf0a9fd68bf2c GIT binary patch literal 24665 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 literal 0 HcmV?d00001 diff --git a/gripper_8h_source.html b/gripper_8h_source.html new file mode 100644 index 00000000..bf18f49a --- /dev/null +++ b/gripper_8h_source.html @@ -0,0 +1,153 @@ + + + + + + + +Project: include/franka/gripper.h Source File + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
gripper.h
+
+
+Go to the documentation of this file.
1 // Copyright (c) 2023 Franka Robotics GmbH
+
2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
3 #pragma once
+
4 
+
5 #include <cstdint>
+
6 #include <memory>
+
7 #include <string>
+
8 
+
9 #include <franka/gripper_state.h>
+
10 
+
16 namespace franka {
+
17 
+
18 class Network;
+
19 
+
27 class Gripper {
+
28  public:
+
32  using ServerVersion = uint16_t;
+
33 
+
42  explicit Gripper(const std::string& franka_address);
+
43 
+
49  Gripper(Gripper&& gripper) noexcept;
+
50 
+
58  Gripper& operator=(Gripper&& gripper) noexcept;
+
59 
+
63  ~Gripper() noexcept;
+
64 
+
78  bool homing() const;
+
79 
+
99  bool grasp(double width,
+
100  double speed,
+
101  double force,
+
102  double epsilon_inner = 0.005,
+
103  double epsilon_outer = 0.005) const;
+
104 
+
116  bool move(double width, double speed) const;
+
117 
+
126  bool stop() const;
+
127 
+ +
137 
+
143  ServerVersion serverVersion() const noexcept;
+
144 
+
146  Gripper(const Gripper&) = delete;
+
147  Gripper& operator=(const Gripper&) = delete;
+
149 
+
150  private:
+
151  std::unique_ptr<Network> network_;
+
152 
+
153  uint16_t ri_version_;
+
154 };
+
155 
+
156 } // namespace franka
+
Maintains a network connection to the gripper, provides the current gripper state,...
Definition: gripper.h:27
+
Gripper(const std::string &franka_address)
Establishes a connection with a gripper connected to a robot.
+
bool move(double width, double speed) const
Moves the gripper fingers to a specified width.
+
Gripper & operator=(Gripper &&gripper) noexcept
Move-assigns this Gripper from another Gripper instance.
+
uint16_t ServerVersion
Version of the gripper server.
Definition: gripper.h:32
+
ServerVersion serverVersion() const noexcept
Returns the software version reported by the connected server.
+
Gripper(Gripper &&gripper) noexcept
Move-constructs a new Gripper instance.
+
GripperState readOnce() const
Waits for a gripper state update and returns it.
+
bool grasp(double width, double speed, double force, double epsilon_inner=0.005, double epsilon_outer=0.005) const
Grasps an object.
+
bool stop() const
Stops a currently running gripper move or grasp.
+
~Gripper() noexcept
Closes the connection.
+
bool homing() const
Performs homing of the gripper.
+
Contains the franka::GripperState type.
+
Describes the gripper state.
Definition: gripper_state.h:20
+
+ + + + diff --git a/gripper__state_8h.html b/gripper__state_8h.html new file mode 100644 index 00000000..e9c49480 --- /dev/null +++ b/gripper__state_8h.html @@ -0,0 +1,174 @@ + + + + + + + +Project: include/franka/gripper_state.h File Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
gripper_state.h File Reference
+
+
+ +

Contains the franka::GripperState type. +More...

+
#include <cstdint>
+#include <ostream>
+#include <franka/duration.h>
+
+Include dependency graph for gripper_state.h:
+
+
+ + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + +
+
+

Go to the source code of this file.

+ + + + + +

+Classes

struct  franka::GripperState
 Describes the gripper state. More...
 
+ + + + +

+Functions

std::ostream & franka::operator<< (std::ostream &ostream, const franka::GripperState &gripper_state)
 Streams the gripper state as JSON object: {"field_name_1": value, "field_name_2": value, ...}. More...
 
+

Detailed Description

+

Contains the franka::GripperState type.

+

Function Documentation

+ +

◆ operator<<()

+ +
+
+ + + + + + + + + + + + + + + + + + +
std::ostream& franka::operator<< (std::ostream & ostream,
const franka::GripperStategripper_state 
)
+
+ +

Streams the gripper state as JSON object: {"field_name_1": value, "field_name_2": value, ...}.

+
Parameters
+ + + +
[in]ostreamOstream instance
[in]gripper_stateGripperState struct instance to stream
+
+
+
Returns
Ostream instance
+ +
+
+
+ + + + diff --git a/gripper__state_8h__dep__incl.map b/gripper__state_8h__dep__incl.map new file mode 100644 index 00000000..a901b8b1 --- /dev/null +++ b/gripper__state_8h__dep__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/gripper__state_8h__dep__incl.md5 b/gripper__state_8h__dep__incl.md5 new file mode 100644 index 00000000..288bf031 --- /dev/null +++ b/gripper__state_8h__dep__incl.md5 @@ -0,0 +1 @@ +d32d8979af59cc2c6a9ca0ac1fb83187 \ No newline at end of file diff --git a/gripper__state_8h__dep__incl.png b/gripper__state_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..cc011854e5ec1f8357e02c1f4564bd0d24d67302 GIT binary patch literal 5015 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 + + + + + + + diff --git a/gripper__state_8h__incl.md5 b/gripper__state_8h__incl.md5 new file mode 100644 index 00000000..ad91ebad --- /dev/null +++ b/gripper__state_8h__incl.md5 @@ -0,0 +1 @@ +48bcfa77f3ca458b32475714d0daa0c4 \ No newline at end of file diff --git a/gripper__state_8h__incl.png b/gripper__state_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..3311da1692e8138493df728c0b5515eade520ddc GIT binary patch literal 12351 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 + + + + + + +Project: include/franka/gripper_state.h Source File + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
gripper_state.h
+
+
+Go to the documentation of this file.
1 // Copyright (c) 2023 Franka Robotics GmbH
+
2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
3 #pragma once
+
4 
+
5 #include <cstdint>
+
6 #include <ostream>
+
7 
+
8 #include <franka/duration.h>
+
9 
+
15 namespace franka {
+
16 
+
20 struct GripperState {
+
24  double width{};
+
25 
+
33  double max_width{};
+
34 
+
38  bool is_grasped{};
+
39 
+
43  uint16_t temperature{};
+
44 
+ +
49 };
+
50 
+
59 std::ostream& operator<<(std::ostream& ostream, const franka::GripperState& gripper_state);
+
60 
+
61 } // namespace franka
+
Represents a duration with millisecond resolution.
Definition: duration.h:19
+
Contains the franka::Duration type.
+
std::ostream & operator<<(std::ostream &ostream, const Errors &errors)
Streams the errors as JSON array.
+
Describes the gripper state.
Definition: gripper_state.h:20
+
Duration time
Strictly monotonically increasing timestamp since robot start.
Definition: gripper_state.h:48
+
bool is_grasped
Indicates whether an object is currently grasped.
Definition: gripper_state.h:38
+
uint16_t temperature
Current gripper temperature.
Definition: gripper_state.h:43
+
double max_width
Maximum gripper opening width.
Definition: gripper_state.h:33
+
double width
Current gripper opening width.
Definition: gripper_state.h:24
+
+ + + + diff --git a/hierarchy.html b/hierarchy.html new file mode 100644 index 00000000..53842b67 --- /dev/null +++ b/hierarchy.html @@ -0,0 +1,123 @@ + + + + + + + +Project: Class Hierarchy + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+
+

Go to the graphical class hierarchy

+This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Cfranka::ActiveControlBaseAllows the user to read the state of a Robot and to send new control commands after starting a control process of a Robot
 Cfranka::ActiveControlDocumented in ActiveControlBase
 Cfranka::ActiveMotionGenerator< MotionGeneratorType >Allows the user to read the state of a Robot and to send new motion generator commands after starting a control process of a Robot
 Cfranka::ActiveTorqueControlAllows the user to read the state of a Robot and to send new torque control commands after starting a control process of a Robot
 Cfranka::DurationRepresents a duration with millisecond resolution
 Cfranka::ErrorsEnumerates errors that can occur while controlling a franka::Robot
 Cfranka::FinishableHelper type for control and motion generation loops
 Cfranka::CartesianPoseStores values for Cartesian pose motion generation
 Cfranka::CartesianVelocitiesStores values for Cartesian velocity motion generation
 Cfranka::JointPositionsStores values for joint position motion generation
 Cfranka::JointVelocitiesStores values for joint velocity motion generation
 Cfranka::TorquesStores joint-level torque commands without gravity and friction
 Cfranka::GripperMaintains a network connection to the gripper, provides the current gripper state, and allows the execution of commands
 Cfranka::GripperStateDescribes the gripper state
 Cfranka::ModelCalculates poses of joints and dynamic properties of the robot
 CMotionGeneratorAn example showing how to generate a joint pose motion to a goal position
 Cfranka::RecordOne row of the log contains a robot command of timestamp n and a corresponding robot state of timestamp n+1
 Cfranka::RobotMaintains a network connection to the robot, provides the current robot state, gives access to the model library and allows to control the robot
 Cfranka::RobotCommandCommand sent to the robot
 CRobotModelBaseRobot dynamic parameters computed from the URDF model with Pinocchio
 Cfranka::RobotModelImplements RobotModelBase using Pinocchio
 Cfranka::RobotStateDescribes the robot state
 Cstd::runtime_error
 Cfranka::ExceptionBase class for all exceptions used by libfranka
 Cfranka::CommandExceptionCommandException is thrown if an error occurs during command execution
 Cfranka::ControlExceptionControlException is thrown if an error occurs during motion generation or torque control
 Cfranka::IncompatibleVersionExceptionIncompatibleVersionException is thrown if the robot does not support this version of libfranka
 Cfranka::InvalidOperationExceptionInvalidOperationException is thrown if an operation cannot be performed
 Cfranka::ModelExceptionModelException is thrown if an error occurs when loading the model library
 Cfranka::NetworkExceptionNetworkException is thrown if a connection to the robot cannot be established, or when a timeout occurs
 Cfranka::ProtocolExceptionProtocolException is thrown if the robot returns an incorrect message
 Cfranka::RealtimeExceptionRealtimeException is thrown if realtime priority cannot be set
 Cfranka::VacuumGripperMaintains a network connection to the vacuum gripper, provides the current vacuum gripper state, and allows the execution of commands
 Cfranka::VacuumGripperStateDescribes the vacuum gripper state
+
+
+ + + + diff --git a/index.html b/index.html new file mode 100644 index 00000000..46e4a7b2 --- /dev/null +++ b/index.html @@ -0,0 +1,88 @@ + + + + + + + +Project: libfranka: C++ library for Franka Robotics research robots + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
libfranka: C++ library for Franka Robotics research robots
+
+
+

With this library, you can control research versions of Franka Robotics robots. See the Franka Control Interface (FCI) documentation for more information about what libfranka can do and how to set it up.

+

+License

+

libfranka is licensed under the Apache 2.0 license.

+
+
+ + + + diff --git a/inherit_graph_0.map b/inherit_graph_0.map new file mode 100644 index 00000000..7c1970ae --- /dev/null +++ b/inherit_graph_0.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/inherit_graph_0.md5 b/inherit_graph_0.md5 new file mode 100644 index 00000000..cc90e884 --- /dev/null +++ b/inherit_graph_0.md5 @@ -0,0 +1 @@ +6581ec3ae7612b70562e6c6835abba71 \ No newline at end of file diff --git a/inherit_graph_0.png b/inherit_graph_0.png new file mode 100644 index 0000000000000000000000000000000000000000..659300204317fb7c896851120d5a274d679a7f83 GIT binary patch literal 11062 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 h + + diff --git a/inherit_graph_1.md5 b/inherit_graph_1.md5 new file mode 100644 index 00000000..51b7c9df --- /dev/null +++ b/inherit_graph_1.md5 @@ -0,0 +1 @@ +13cd79676d479a68b01d396da7372c91 \ No newline at end of file diff --git a/inherit_graph_1.png b/inherit_graph_1.png new file mode 100644 index 0000000000000000000000000000000000000000..399c8e21493e2a87eecc93061761b13357fcb849 GIT binary patch literal 1323 zcmV+`1=RY9P)3cRcHyanS&1elSxS*% zwF{JotCgoBB8d=Io=RL$9xhyHlZPacl44_7o^~-VtnGJk>ip+vzhh3E{(WCppU-FC z^EvPDdGCA9>6`LV75M@B||U`L*K zb8v8wl$7M>=SR94kIBx?h7dvs84N~PSXgOk>F(|>Sii!%dn!CXh zZ>(19pFe*{m-0>2YPHkpv|6nzD=QohCpkHJVPWC7MSY7edn1#{`uqEbhK3-7&CSgK z0D(Zz)YO!gmd0YSrl+T6G8u%BMx%v>hHAB1{2hcqAZTf6$;im?_4SR4idtP=ebf2r z=_xNSFE=;WX0v_Pq`kd8A|m2_jN|R?9TgST)zwv2R#sbEi*3l`@z&SZu>mHN2}1bz z_()KBadGk9-d=fmIfPIw7K7L4G>gSjQc}WZvjYMGluG6O{XN0S62j@i%*@Q2%7>^_ zs>;erJdKNs3k(e0+S;<)?Re2{x9{)oM?^&EbUJ)kaB%SU_O{Jt(`vPBHrwHFVD-t# zNwe835{as+s@ykeYikP+4}TwLWo2RO24`bq0|0Pxa^iG4xm@nr+8S0j8jS#ehldB^ z%7sGV*w`38ASo$ncz76#Q&Ur=Qt8#z)#c@7dV0E4Ds?|uH^}93xm@mAA?F^trlv+B zk$8D|;T110ulV@*+S=Nsr6s(mR;v>e6PZkAb#=AHV!6J)#_Gq%#}bJ|E|(7u4!UpB z*w}b>cJ@Ag51-Em0NmZ(k)r%V&d<*`H#Y|c27-cu_I`#MpWz z1(Kf&JU>4>91cG}KW}eugTc_#(?et{I-Rc5>7t{f)6>%}7K@uE|GXD?d3iZKJ*}^= zpO~2F>+8b~y+9xs8ykCke7v~0XlQ8os&Wp8b9i|8{{Imc7M7BdqEe~MX0y>~tgEZb z$;shxI7FsQ1d_c82?^=!>{KWezP`R1ji#WWfT#`{ZFqP%BO@avC529>d(fn}w--Xl zVzIKbv#+nO^?H4Nem?e7M@Pr)?JbwfmC0nEb#tSVmwXE+2dYH9I@|^EwbFlZnUUxmG^#rl_dsr}Q9RA(zWtQ;41dP!@E(p)SZ9 h>VmwXF320|@)r`+3>b8g5S0J`002ovPDHLkV1go%hkF13 literal 0 HcmV?d00001 diff --git a/inherit_graph_10.map b/inherit_graph_10.map new file mode 100644 index 00000000..7abc423c --- /dev/null +++ b/inherit_graph_10.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_10.md5 b/inherit_graph_10.md5 new file mode 100644 index 00000000..525b258c --- /dev/null +++ b/inherit_graph_10.md5 @@ -0,0 +1 @@ +6976fec6e715fef5e88f59e9708c1db5 \ No newline at end of file diff --git a/inherit_graph_10.png b/inherit_graph_10.png new file mode 100644 index 0000000000000000000000000000000000000000..4a04832198d5e6a20b3e6195af0bc0789aeb6e75 GIT binary patch literal 1867 zcmV-R2ekN!P)xfvwPCZZfWeq4nAsU212a1#WMF1zgbb3A6AcXw zC@(Lc4J`~t(5S7g9W^&0ap%sRX{$d~{&jtG zjc?z+f#W!IcXtP+p5GJH$#DPveY}197Cg@*CMG5rB^ivM6O@(x!-o&Z%*>qAM&Gbu z12~QY$8m^^j6`~RI;>XfjB3zmG`M;5=BW8MZ{A?bmMw^ljTN+=J$n{|gM%}wZ>|#* zv-kG)V*dR3!6-GW7>z~{5xTp(QCwV%qM{;v{``4XH9dLq1X`^Y%a$#}t5>hk-QA7q z>T2}%_Ts^V2eYbe&Osxnsi~ncru~wipHBdUm)UG4A|ka~O~;NMqnw-^ijIz^yLayj z+j1O73Wb7BojOH6pHHZzR;%gw@#B=6n@duul$I}FPEVgc6~%AgzD-0#9*>7MZ{AEg zosRnZ`zNe@=FAyVDwTf6d3kwcG#Z8R(9jUgn>UZDtE+`Mm&-+Zy`JLY;z%x+Q&CY7 z_4M?J^qEX1%FfOvsZ>gBzJ2?~?Li>A4jno~ z+1c3?6%|D)m5Lf08>y_Uj1m(QNhXs~ad9yX4Gm2xXR7_}?Chlc{Ctv1rKD1+=+dQ2 z1c17_y2kzde=?4LZBsTo5s|@Qpgnu`i00I4HO0rr)617H$?NrsVqUM8-oJlOsi~=C zwOU0v$;rv|`t@t_csx{ET1s-cT-ag5W_LQBq|s<-@7}!u*Pe{oJsuBTym*l$5(zao zHw)Y3%09deK0U{$K5fv3Bnj3k-JK3D6 z^q1#(L`6l3;!35`@8|v-rq%2m#|iIUE*JEAJx-iB0jJXmpU;PiiVAqW-bvN8SS(nv zVg=T(UymO@egw7lFmZ8lxPJXQT3cIDSy>4HSh8dZyk0LH4u`N^OG}Fo8>X$TO;pQn zw<9SjDWLqYFmXFnDist8#kkk*1JyO%Otl9|NlEZ{JaD_+!kpc1530r)yMsD7I0&E5 zhnSccgolTtv9S>q6%~`NBauj8wOWyumWJHiT)5rtfNEPT7GcF3Ydn&L3m4+Zks~;L z`ZRw2{E3v56lk?t7z_qDoldm3x8vZ!gV?xnBN7r4guE+PuAsiY9({d%C@U)i&-2*2 zb!$NR2?+`K`0=A)5RT(;`SN8{R#u{Jv|*685u}SOvJ5Qw?sL+ckhPT zY{ufni($1|@#xVb;c#H0{G&&Y;_>6hh=_+A95%NJy2Wg#{;7J9uN zF)=YHC@2V6*K`w%{?^pgpufK#N~IE;Hf=&tQBhDeazx^%3k?56lGsBB7;}(u{L7v$ zzz7|f*%=`NGdm+>U}k5849x6|kb#+<5i&5dGeQQx|5UQsY%{5Y!3YWs4Gn%{e$DRh z*&7VTTxHZ9R0iXJ3cG{K2pyQ&86g8RJ0oOZW@m&9{{dT@nzcq(1JeKi002ovPDHLk FV1i$Ze2@SD literal 0 HcmV?d00001 diff --git a/inherit_graph_11.map b/inherit_graph_11.map new file mode 100644 index 00000000..0a07dafc --- /dev/null +++ b/inherit_graph_11.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_11.md5 b/inherit_graph_11.md5 new file mode 100644 index 00000000..bd79b037 --- /dev/null +++ b/inherit_graph_11.md5 @@ -0,0 +1 @@ +c469eaaebbcf130bac248ac66f90522e \ No newline at end of file diff --git a/inherit_graph_11.png b/inherit_graph_11.png new file mode 100644 index 0000000000000000000000000000000000000000..f708a3b2ed3b92e2c370cf610de8aab762027778 GIT binary patch literal 1636 zcmV-q2AlbbP)&Yj<{^M4t4=}7V2XF(o5d^kEf z$}o&Vp~(7#5E+xnxqSQftzNJHtBl;edpCw*7>4EN=a-e0IUJ6x4^dfJdF$3KE_AtE z7K?=-h=PIwqtW>C<;#?^G^=HWOuP(*LMvCU%%3zkQJe}6(InYy|3?c29mmJNr)_4V~8lj+;H zZ@(&X_Uzf>;^O3XZEY>|l4aRgES8g#bNB9D7=HTnsi~<+sZhz_P5>YPDLe{LG@gWLcJ?s6&SiaiLD9TfKVq@bGXn8s(DFXmo6BOsmy8 z91c!KlH}{xufySRS63H75O878OTXV=Sy|cI+A3URK`+DM@Rci9a2$8JT<}s&O^wN9 z^7(uokH=szm`o;aJ_Q8@&!0aJg+eq<%jNPwARwTxsHm{p?XVq>$4g2|_Uzf?bUGuE z2!C_sV&Bm%>mH*e$&t)JGFq_S%PMwOyVgLZI*Nfx0TCIi}tyT+@Fw|%?Tz8E|!!V4no{vhU zx_b5MyLaz`!Qj4q`x+V=hK7ccW$7$rW@ZK!gkRrsa&o?Y{pxnR7hG}z+3^y?FxY@M zo0BI``u+ZRJl@^i9gRj8>`v44=FOXT?bMn<~3yVL1~`SIh2Mx&{&uBIr;@ArGX-uCu(qtRGcSO}HZu3dZa;>FzD+=UAl z7>2P}ECTw%!ou@02D=sc3NwT-M*KW7(+_^JBCa@cP833TKuW#eV zjYgx9Ac(fMww9Kb41V=tEbo7K0|Nu_=DgS{h~)>q^WwjtM99zVM>L@OrFcMI iiU;JSctBo?hkpR^vYz?q_L#%~0000 + + diff --git a/inherit_graph_12.md5 b/inherit_graph_12.md5 new file mode 100644 index 00000000..41719a0c --- /dev/null +++ b/inherit_graph_12.md5 @@ -0,0 +1 @@ +4a8c8ceec44157340d6aee9d76453557 \ No newline at end of file diff --git a/inherit_graph_12.png b/inherit_graph_12.png new file mode 100644 index 0000000000000000000000000000000000000000..b0c72a85cbf7f8cafce8dd944f6403985df4cc8d GIT binary patch literal 1804 zcmV+n2lM!eP)0K~#90?VNo`Q(YX#@13J`y3HVmxVYU^s)1t~fv#4uAY{!JvxP`+ z7HummBP)6_`lF0im{Na4x=Kh#`SMScMEJ*=6uYrrB$8m7&fE}(HP>7++IF5lF3)}T z?B%-FeBpV{=dW|V_ji8xchCLq?Cc<-000C6i2-Aw3xF(Ypg$mVKz~5!fc}8c!3^z~ z&F03&#)T>cvKSDH#kIAyRQF%&$Jp3dcX#)^mjqcX5Cma1n?n_5WKdUE*L>9jSzPSi zy*o^S`ws{m&>s*wpg$mVB;t=>zkVG!aDdHb7Zeoyc?E@qh3)O_f1U?27bN13Cr_SO zEEc=n{^`@Fq!;u*r=+Ch-o1MZUBy2n;*b9R{^H_dE|;71Y7%4T&Yk=B?++8DQt7c{ z#}=fXNGujhd3iaH$4gC3U9)D5Mxz-T8j2c85X9lbhv&IG8WQn`+wESubZOE{Nf@nG z+uhwgH8n*kgM))6lS!k|EMQd>&!0cvv}qHL<9&U7E|;sPr>CT(MAleVk^yrA^9wl)BO*Xva%6x+9NpPrtMmE_vBYk7HjVeLR5fMM9}+qbDAPoF+5 z7K^EBBlEc3?wXn!9LF;=Gc_8`^z<|UfY0am_V$tiV`F0og1B5R8eJq3ojiF`B9Wx0 zrwarEf*=|i8u)xZhr>~;)qy|&01ylYaU4H-^k}U444b{;;$ppCPhC2H{=7sYVYAsq zMMbY(y`tAW9#2h84TfP{E>|v>+ibR|x1f2sDwRs5QiUqN?GFGzb#=8?s||g^?Ck8< zuV4H9eoFNF{qNtu&(F^{7z|VxhGB2syzzRy_4V~U9*=xmq(8>T$Jei4f8@v!`Xo{P z0RXss`La+bB-=ipFDomnwY8Ndk3yl4NF)OT11^`Vxw-l2)2ARIf8aR&_U&7b$8+%D zK{lJMR;#~#`)0LTv$L~1J39dY0|NsHf|$+bSd$qxdtv@qwrrWvXmq>XI-QQg;W(X6 z8eOSW%4D+P;bFJied^SyqM{9#Xumy;cz~F{1|x)8Y2CXobwM1!>D#wSJ%3A>oPJjP!v6J;)LC9r!Mh$JhG9N zmWCk6%*+hgeemD`i^Zz0u8t>3RC021B)#Wo6~1OP9vS$AiIOQ&W@Q@1J$J zPNx$Jh1<4mbGcjzC(&xP9UUDXK7245jpWWWRvsM31A)MoFJHnkq@|@%mUTLvv+D66 z5D0J_r$6AKW-k)*t&a(b2PK&r+FV>G6P~=$$)v z?%%(E=FAzZ)#~&4CMG6KCR3cl@7}#@GMPLcPeVh4-ELPZm9caT!xRcdRaKSMYW?~1 zr^RAXDwRH;@3*RrB+353as0-O8RC=%mk7! z7!0*qJu)&v{j8-aroFvgC=`~KmgeT>zI*phDwQG#a{c=C$;nARpI=s178)E&j}w_p z*4NiJG&Hnv<3g=>7l;PqUsMHK3uzYtxP84 z@p#9NAFryaO2RQj=yDY2{uDAlP`~`+)c>5h+Mh!Ht3ZE1=!o+7V~|Bce}DgP>2m>G zKOl5Ke?aJf{(#T{{Q;pP%Ko&ovvdCIfGh^=b~|;1PZGr+6%`fpRS#s*p;Dmxc`9A0sR4?1Ns9(2lNMoj=umcH(#4YG3YD+0000 + + diff --git a/inherit_graph_13.md5 b/inherit_graph_13.md5 new file mode 100644 index 00000000..1f9de2e7 --- /dev/null +++ b/inherit_graph_13.md5 @@ -0,0 +1 @@ +4b95ee7a157a38077df907b190381db3 \ No newline at end of file diff --git a/inherit_graph_13.png b/inherit_graph_13.png new file mode 100644 index 0000000000000000000000000000000000000000..f745ae08a47d8adc46b0faaf88a19cda0e91638d GIT binary patch literal 2076 zcmV+%2;=vOP)M5E>0)4i{Ma8n5$JR3YoW>5h8Z6 zXq&MzTKA0pD5Dvs6%pwwBbD;fA5kJ9v9!d6r6NhNnNHmh#hOb^B)8}L$KiK=Yq!=i zUHH8Idd_>F=kt8_Iq!4ac{ao#gaCn1#E3tB{Mf&LKZC)DiHZ613gY78Dl04hJP+cZ#uFnxd-klY ztxd1jfBg7y)(cwTBqk=_yLWHCtC$BoF=A(DCzs0&3JRL_YCL1djvf2P0Z zN9Ls-d)nICGBPq)ES9gY@0vAhBoawaPmjY$wOW1X(4oItj7Fmoi9{?GDPb#c4h#%zZ*LzM7?8{53WZ|6D)|X$MRj$x zjbcwqN(wbMKR+Kr7#kaV{`~nZTebuS20niLm<+%$j39{1moHl^7II>2Z0v;#7X$(U zgTYw6diBefFDbpEq5?uVIXRi0o}QeXJTWohEXmcYS0f`MZN_G^8OQNkw{B5Io;-Py z$Kz4e+UGHuOnG^E1VID`2TLT9iHQjaA)C!^Y-}V0$n936(da^tjg38i{5YS_4+sc| zj*eEV)kQ@`Y&M(8WQxUNv)K$Gv{)?ub-o2Zg zoGd6PV6j-_dn1iFG&GcukdT|3>pF=;BSHu-UAn~KaLDoW^mJ%wXnA?Li#+M+>3lxF zySv+HG?tc@K7alkdSpa`Al|=!KR!Nw;J^U}gCQ1+zkKdcDwCSFW5ko>kR4SFpWKt*;OeS+=WWUEeELu2d)#zf9r`gTX+j)75G7M-^k$NdQI=Zy9 z)R|5eW-u5?(QGy|nar-PF8d|)dc900i;9X`v}h5J$9wwpDXBX&qD|{;!dxus8hazo z&ORcJ2y9mK9P};fBwcpLqo}dudlDazkfhL0Ch;d zJ2JpvFp&D5J$oR8jg5`gNvykPLqtS`^_c2|z24W?2LNER*%*dl80O>S^X=O=ola-J z1e?viefzdns~sI3&Cbr=y?Zx#wbF9v;rh%DQ;*;?U5L#bPNb zDVdp>`Q>zlLc!s1wr}5VG#WilB9%(3tE)RYI#enZ`IzD?4?z%Sv-$Jq&o&wS{QRhE zV`OCHm%2MdM@JI`;d-Og{)<-%@=TNT_VzAczTBC z$z%jUw6wGU0BE%To595?unu#*=x;I0->ghcO<63KprD||ix;ca>XMQYcV^M)^s1_= zn3x!WKrk{g;v$Jcp@@o#vL6Egl9G~^E?v57*DfB9NA9#c%Y);1YHI4ig9kr-`eZVh zluG4`7cT$+adC0w<>g~zWBvX8XU?3VGCR}V0mHC6ckbN3fB)2}QyPtCdU|?zc(|#l z$<66^@7`@{Y8oFOFDfe1>-8d$$eE7gczSwzPEL+Sqxt^*ds|zZNF+K+qtV1-abI5_wQJ*|n99mZ4u_MJloSyW@!`V< zfj|HNC@d@-9UWz}*{P|i*1^tnHxUYj&CSg{Jv|#YZe%i<8#ZjvXf$fI+MT%)i6lQi zKRi6Vs;a8KzMlFd;81_`=+WA>YlT7~i^V#6^k_~_j{Pnho6XM6%`Ge}jEs!Laa^fX zmY0`r+qMk=aQgJ=hK2?|KflDpL>H~I4s&x+x3Ipcy7{nzm>Z~#EjRUl2=JF4RuG6k z1Q`+G6*%~XHo{Bj?Ckt4{htQi5fNSiG9tn&Kt@D(1;~g9ufV~>N=;48+}D9v;5aa% z^>5A)h`9lS=>H=kya4nW5#bdeBO<&4WJH8lfQ*Rn3jPD + + diff --git a/inherit_graph_14.md5 b/inherit_graph_14.md5 new file mode 100644 index 00000000..bad5aa85 --- /dev/null +++ b/inherit_graph_14.md5 @@ -0,0 +1 @@ +13beb2915ca39665fff8777a1a8d19d8 \ No newline at end of file diff --git a/inherit_graph_14.png b/inherit_graph_14.png new file mode 100644 index 0000000000000000000000000000000000000000..1a377db758d10c4c52a6528e076f2c4fca39634e GIT binary patch literal 1485 zcmV;;1v2`HP)(+67!x-gETwUf;$@Sd6&jRUx~kJsq1}Xl zXctnvUHG|`nv5I0(oL<%li+=OaNE|!2*wA4~a=lvHy9sWtu zWI7F2`M(DSl5_danUgm|X2K^(5)#Ss30JIk2a>-RDISS!qZiqrZU$MjYe_n z)~(g(Me+v|4u|t>c~_ofGKpu;p8b}FB!51sRBA~*Vl#uSigQfwr}5#o}M0zkB^tNPPr*GpVgpj zS00bYgMonolWkyN03MI0TqVj%BoaYWQxjBG#qjVjzJLFYmoHz!=kwwE_3NwM-roUp z7#bR40drAWTU&YY;zhdMZoYs2o+LRlGs8`rHu27#JKV5ggDF0f$uJNIu)4aMilXrF z;lrGso+e59{eA*4j>g7Dl4N6JBk$h5YiSLV^m@I#a^(tJT3Wbq<3?`VwvDe|y&_5K zx=vM9dHneClIJ!vGsE8AUb@|Gx?C={x3_b0a?(;AtNE8MU1D={GaU{GpFVxc_V#uH zpb&zps`A>kYt(hU=zOfqBe#wfis&I!Ht}4(e3`*ukVlRjAxZZ4_p_s;gD+mZ$P-U< zb2Ho8+L%tKnMfqq($d1Vwl>4x(9pmK4<49ua>Y|>4X@X0h)n>3D9|(wJv}{` zot;H%YinLiGMPkWWhGQqHEi|u^@h(1R@YDz#duv+RRsW;o0~&*bu|DWolYD6Lx&E5 zBwoLMZP+FzCIA4nwY3mJKnQ^~Yu4cB&!3o_oGe+#YQEd;Hl1HM9LDb5yWwy+AcVl_ z)2ES2rB*zT+&U|z?6>MCPMpB==g)EM*f9tp^89smb;xG3NF)-5ZSn4=uCDIirYefJ zWo3r!CNG6l$ z?d^r8X{f2G0RYt0)L?XU)HJZ=u2Bpj1p52?asU2(oIiga@pv5b^Yh4LGI;y;tr6#T zyK(T~L3DR_BOZ_A*RNj~85u!mXD8<8=S$YHlRq~%2VK|Ua=EZ}?OMcQG4%EInPPJ1 zv(kCkWmO&$4h;>#;c&p?@t~oh0kyTY7#til{1+}?*d=<4b+#T1&)O6Oq*L7I0@EdB*gxv4^eqI!_KCnWZf;*r=!ibrA_ zDISS!qZiqMv6ybn044fOYPN>NEXR^!Yq+kL_T4b n*hh*-VjC$QiEX5KB)0hn1lX~XYz#;r00000NkvXXu0mjf + + + diff --git a/inherit_graph_15.md5 b/inherit_graph_15.md5 new file mode 100644 index 00000000..c2195cc7 --- /dev/null +++ b/inherit_graph_15.md5 @@ -0,0 +1 @@ +a2de1ef219d46378a0e42a83777fd91d \ No newline at end of file diff --git a/inherit_graph_15.png b/inherit_graph_15.png new file mode 100644 index 0000000000000000000000000000000000000000..2b35ddddd2ede54f471c7f2f2d3d76803c6a68b4 GIT binary patch literal 2586 zcmV+#3gz{QP)=72_TPxS<%%(fE5heq8J6FU~scM zG?YhTi2`!B0TY5G*DGSL1X+l@1H*el-X=#zkWX8tEE8Q393l?+a_x1Hf5ClOG0|NsllUZ3=`PIAS z=H_P@S|*OWq`*xK5rrl!u!%>1n_E>u^SJR_qaIeE4G z2-n)$>hA8osxqHA({-U1dD@?lkbt7-=;-LNW5>8$ZbwJQ*X`C^OeQlwKObMr&(CKv znSXbq;PaZkfB(L!swyWZr=+B085;ef*RS8^<^5;Ro_~9J39_>8_4JIabdNq6A0J=8 ze*H@KVm9JT*9BS9HNSy@L2PU+f*|ef?O4h1@bHl%N9c6Axw&~nM8umnZ}8w3FJ7=% zEEib4>?!@~oM^!N849UXoA_%Q%rVq&7Yx;iE%M!hrI znjRb+j{}KppcXi1D z0069(*RnYr&ZSG23JVJn1UY^BGyuTa**PU8WzU{HMn*0uC8TeWhja^ zH#dLkD2c@5@$&NW007snU1PCWHa0fuozd2GNJz+r4I8?gs9$Kxb!XVq#)N zMa9_ISVl$$R=Ci%=6e5LSzFs09$vI#M=GB${Ns-v6h&34>D7|-pVigX#m2_Q#KfQ| znwFM^6_%Ekrl+UBefu^vG*siDVam(P1p>j)&=8l)4G#}jU$vp3Aulg4OH0dJw{B6X zR2`M*Mx5z7U#J?9NHnWNBOf0h{Ofvpdf3K5QS{}@mjHm?-d=1G+rPek{TfA4Cnu-m zF2~C6 z-@gw47#SJCo^yQl>J?T#Jv~jM(c0SDP!x4{cP}a`n!Ba|fTKr`DwWE)1CpJc9TF0P zqG(S~50y&A>cQz~O9zoigdpU`#*VnSYYaw`rR6W1H}fql{-N>T&p+qsu5Ib&IXCd+ z$2d7TVF%~A@Ik}EGBY!=&)6|gCX=C`rwxO_5C{ZctVA2)Ojq3i03wk{y=0Mh`x6op ze*N{=k&%(($B&;mbH>-#mrN#0rBVuoVrOTE#bD=MQmNF!!U6zbZ*Px(-QM0_CX?xo zpNmeX`}z6tc)ZEUNgp4d`uckOPui-Qnwp|gsdPFWD|c{kz&`Z$_5uK`tgO`Q@9XQ^ zxpSw+HJzE6>Feu@ii(PkjxH}R2LRO6)SN$mzO%D)a&i&?;OXfJ0AMf})z#HWNlBxl zqf90W0_Sdh4L|V+ny!sJO zlywzjq;5@~pNc;m*6^I208iDYkY9~Kstl#~Pjkjv#^VPO)9WZ%Ah zhK7dO+1Wy&5Q_{52nYxWn3Uvw{CVXfzKCxr9fPKWKp?n#_wN4v`)}XAZE9+|xJod@ znXdD+)Zh6{OiU6J6VIJH7a198Z*R|LvtwgpFJHc_QmIa!Jn84>hwm2)3JMM!IN;*q zQdn3hlgWaDg3Qd!w8dLkShTgZsZ=To(1LZP-h)hLSg_xB5hLMJCD0KnAL)XdC`v9Yn9 zo?dfvb5>Rs*4Djy_Z~cW5FH(DZEZb0J&lDev@HyojC}aeo0rG^@Im$a@BbBxTkhOx zM^O|(km>2!djVr(gMa|%d2Fu5o0{qbU`ZF5+6GNG3WZWxSs4=(vv=>_#>Pe+l?Via z;^JZ~k<>q{Bgk}}r?2pYUwnMLLZK)tD+2(CL?S~&Lnf2y>gsA`Wrdv~V|YAXN=k~Q zrDbJhWqp0UnVFf6_*17&H8eEn>+9pUPrpc8RU(mSVq(Ig^r*?YCz& zH7#WF8aoSsRs)#)YZ!xJ#^?L+`95;__)7N$T6^Ftz25?J^HuaLJ+xN9 literal 0 HcmV?d00001 diff --git a/inherit_graph_2.map b/inherit_graph_2.map new file mode 100644 index 00000000..b41e75d4 --- /dev/null +++ b/inherit_graph_2.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_2.md5 b/inherit_graph_2.md5 new file mode 100644 index 00000000..5f0af392 --- /dev/null +++ b/inherit_graph_2.md5 @@ -0,0 +1 @@ +1b9c9ae28948ac70e25d962ab5665326 \ No newline at end of file diff --git a/inherit_graph_2.png b/inherit_graph_2.png new file mode 100644 index 0000000000000000000000000000000000000000..63f01b973185e102fa4b31428d92c84c3bf0adf3 GIT binary patch literal 1128 zcmV-u1eg1XP);lqd6XD%Vm=0)u{86YUi{{_I?v-d zkAMF>oHG}}L?Qvu{Cya|E#UtGZ8SyDMpFcBG(|wkfyd)nT3Y%oDFuefWa{YXz{8Y| zMi9j9c2h2?0CBtB2!bSMAo3)a%SDx*f&~OYLWbU>DS|edB50#2A{V1$v6x=3XS3NN zk?7|N#A5OG_V&-~{NtoK3^TH~w|8-I5eNjhTyEY46)L%O^yTGcdwcso<#KOtFPO^F z(a~>D;_-M@RaJVu{`K`W?W*PFWf+E;OlD_ir`PNK zu4Dg^+yxGYgOEv!!C)8}8NtJrmX_-3>XVZb6h-kQilSbxS11(P?RI<`pU*!#I}3-y zX0w^cdAq`jbc`003|}94VRPAZMeorXyps*|b_MK5cPv z5gTK@69@#b{N&^$48sFo}LKP z?(grJOy>3V_16Ljkd4mIbu^#P$Hy+0tF^V2#bSXVXfzrFfdKvykH^CXrKP0+07Rov zEL>k-FDolE7!27I`3yowS5{V%wIzoLfFIfUd&{{s7;DD*{2w?p$7C`M4i09kgTYu^Tf*$S*jf_hi4hM_HYHn_BYip~mt=-(*B+rq_WaZ`MDwV3DqQYvmI-O1yi=n u0TcB9qbY&jqbY(mnj&bUDS|edBK`o1JISobKyPON0000 + + + + + + + + + + + diff --git a/inherit_graph_3.md5 b/inherit_graph_3.md5 new file mode 100644 index 00000000..99861f52 --- /dev/null +++ b/inherit_graph_3.md5 @@ -0,0 +1 @@ +04cfceeb66575b4432938134a54baa55 \ No newline at end of file diff --git a/inherit_graph_3.png b/inherit_graph_3.png new file mode 100644 index 0000000000000000000000000000000000000000..5092dc283a195b76f6141dba98f2e735c27df787 GIT binary patch literal 39755 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 F{{o5Oi-G_E literal 0 HcmV?d00001 diff --git a/inherit_graph_4.map b/inherit_graph_4.map new file mode 100644 index 00000000..defb40c0 --- /dev/null +++ b/inherit_graph_4.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/inherit_graph_4.md5 b/inherit_graph_4.md5 new file mode 100644 index 00000000..d366728b --- /dev/null +++ b/inherit_graph_4.md5 @@ -0,0 +1 @@ +0cff89dce9d9ee11fbbc3746cd23348a \ No newline at end of file diff --git a/inherit_graph_4.png b/inherit_graph_4.png new file mode 100644 index 0000000000000000000000000000000000000000..90e141e80e186b293bf6f34241f1e54d46b9b940 GIT binary patch literal 14761 zcmd73byQW+-Y&f9Mg*iwLD+(XbVzr1NjFG0(jg!%-5@Q}Asqq&(h}0$-JRdWbI*Ct z`<{EpH|~FT>Cip)-fOS5=KRe$pPC^Ga^e`MM5qu51Vd6nLD8KB4PfGFUHSRqO$+Is2QhKqYITNS1lq_tY-Kspdg~41)~`N^~Xy1__FWD z;Cfvo0c#w^PLH3TDmHoJNyBz$9t{e>k7~0G+w56u(>(8(P3+UTIIn5!9}v)Sw9$C0+J}=6J2oZ6ij? z*f>`KT3lRQT~Tp#a#B=U+Qkz+_7Q@P0xuX78~d_~VW!sB)!F&+UO4TS&vqt6N98m5=y6d~Q&aD5 zZ=0H%Q&UnJERBaUc&VwWNy*UQVNnAs-~XXS@oVg-45h!fyR_cV7(qXQi6?IQB@^z_{k z#21TgaAZ+5DZf^Z92^{EWMy%1a73%3dsac)tgo-@G`d7fQ0)qbJxHE@*u8#Bk z{oC(uF6y;y#KgL~B8V%JJJFPF)mt0eSC^NU_x5x&H8pj0_qVsV_x3=`HKP4Cc_;Y* z8XpT4hd}IFEy-nX`p;ULy}iAkpI`PACJCo6ulK_}uRq0WJhW7@XU|0Ql#C1w-K}z^ zUH4}Nv2vT5v>kQ_Km0Tb!>6|TB4%Rp@;q*611IEXQ&ZFOvZ1Q#AMgTmz=c6Z$7Nz| zI}8;kbs+N7Ck1tNpOf{0BK0yX_*bu9wXF{g4T)o|f=<;z++?thIuLt6!$~uOWsZ=c z4kIhb&DGG-Dk?0@f)WuDzT!KM6nSCrBrZPwDg4v)G(P*~kD;MbZfjf+vb}m`F`6%1Q&ZEIK<{yVYEjm( zV{^8$ysUsr%J1!|rZ(OghVSg`Oh-$*y0-QT7nMDru<(^X#j|J69&fPZqpQ^y0RvcO zS=Mb-9+pa@?nuyYegas;#C%pXXoacOG`_iM93sFgC=(R@Fs3G|0hz| zQ{;!6I6^|gr^p{uQizV4;keTyDUj3U5+aTRf8FYAsQ(#%AuFhQ_ZYy9|CGGE&k3eWu)@ zoPvVH#Khn~PnnZ!$TO zosgKAhleLPI9Od(RaHerL`1~x!-uV{EoZ_njn!T|4eDQ*{FeNLvUX=`8KKZm5>%yn zt=?b?RAP{zz*=5esc43L_;5APzPz>d;bMOdpHY{SlhfSN5(xpp!rc7#mebaW)qK;{ z^mohN-d;>hOk{s5Dk_P`lO|$>Dbv5+Vq_+ z#ma_?7Bn3kDpOKY0s|ihe@lzEkPxgt#T>#Wvvp=;0vYW`JxLg0Skd9tRpYw79`oN1 z50;Zgu#jIQ(Epr=!4&V;4iEXvrH}-HFe7=lprEIRhllgM{xj0Paf0ye8!B7|(y!Nb zKd{lG=kLdp(nu5~d(8U@j6_8p98Yq(x>|7Ad=tHO^-%&*eqr(H9bVd7yqgX?J@s#D zLVfnEGns{^u2KGG6^8{|lJvkye-o71rKOEcv-3`;&qJ!u#^3@5hPJYDOyf;8mt+2j zdDro=9g!2Oe>=S0=-8P1$@&SMddB_LhTh(ur?~j2JYVwpQMd9dT_Z(&4z%d~se?54G~sjsfzeQ-~)F#ozpit&p9Dx+WCL@9VC$kW0+oXo|<@!Rjs zZSaj>%da6bQZ9#^?LP(Y-y8Y+?*;^zeeN+j!bA|m1ozNPfs1-D?{zgQUwg2?n8YsY zbLFt{;iNb|ZgGg1Kp(8VD)6vNC0dMzMz*W#2{TiQ>SY-xpvgTvIv|i-01!^Ultj3m zTaC-}&$*uj$rfmpyjwFh&5v@0GPSqKac-(fOM4g^b}e=IjQ?R{)ZMLfShEuDh&lu} zfB=>Gf~IYwWoSsP7K6u7t<^ejG|P$6BKpij>L7>2p7Pe^+?0z~OU$RjgX1-5sgg!GlYX2i9(F;1lv+Y z!*)5W4uAg%gyZm~fy(6QxVZG}Q%W9#Yl8FdRqL^vPH!9#HK6?YF>i@>95x1{Z? zvK~!;cgDjDa-)G=Bv(ih%Lxs=05@~8J0&A6EsVI*2S(;%ISgzCUxMaJbsEQqhwTMYU~@F}_4R{aft#qy&fYF-ZL!-J zlm_=+)^g0k^qc5M7bz*}%?ZnIi2fI*h!drTncU7k+bVZx_-do(UEmo6-htC8 z$mH$zwbf+$RS^*C=NjSg7+ol^7Co^DcV~g%5{rw;sT>}KMNw@$Pa(~S zwPs{oQqq<}!akaHhcuLwdyTHO`?Fh79;)wcZJ(f^D5|S-u(0g-SgNV1nGL3G`S9d? z{3k>k76;e$KXF)#f0IZsoA-|fAfU2fskz9_LU1XFBJ8jou! zSnR;^5E$4w-|SJZU3wZeGd+EOy;J73!_C6tcy+wyrC|qPVOv`pDRo0bL#b|agRLYL z){`j%lbf{G+AmBPMxfaSQVCBs9wexJoG$jqF^J!q>`lC!vZ?{g?EEXf&nYR}ySr}< z+CK(AAs-(bOXKxO7%03=mwJ+r>NoSmPa5Eu7xz&9Hj zC^S{?SRg?01FyQedbY)@v8br1q2c;x2u_(^D?^GmSlP1_CTC~CQnsTLYkIJq)rzWSXdoLx=KVdLcF6o)0yR90)dfQW#w zwYm9OB6o3daeDfl75880^F;v)mLfW}V)OU!vGo*gk6&1sbk6Ml36&oIpyl7rdfVi# z+N|Fue|^2fZY^bFzPS7>r@NgB7xn)cM9DwdtaE4EdN)2hOOjgf{ky8TI8xZKi7%#C zeO;ZKhljeFT0&xCV?%?xhlkN9faazHDQCA=C!nZu#G`auJnK9BN!8SD^K?tBu=QfRT@e-iwMN_*2Bk$4@HrWy(`wpBx{DhJ^uW z0$y;l&eStGPw6BU>1k@d0vIVd8Nj=tbe@93!YP2+bRb79y3Ou^6cUn>DD3jy-hBQP zkF`WcCybR_UalbYYabOLYVFFw8SFG8BKG|S#@ox4gXNV2n+3U67wfyzE#oGfGlb;Z z)=7YD$H&Ltzkd%66%!My)ObBCO@)o(@uj#poZ{2w>S+iLjf#p&dq+o}MJ@}NpWp>) z>F63gRfUw7D>?zaqCn0rD~rm8hGzf&Kv##e?kMtul@-U`$v5zVk)%8|fDJx-7QYYs z$yG&B@i`--e3n9aL4JPz zeP1Ha#Yq>06MHTe!n0HHe}ivr^8_ev4+c1xnO|Tb1N6G=v$y5M?N8yv&CA9X-(w7* zEEf-tBPYpLKY#!J+`ST?m}n#)_6TxuQ3HoIjBb?Y zp6Y4Zd+FN0!kF0eIK5nn(xxfkt+ly}|9n`cT#yh&UKZk-?bo*EfB@?k6cm)5ZD?w0 zYGqZ-D&5o9M?+1WlAK)M(4eNSE^SUlO^rCihUF8Uy%|j@?hTM|iB>J(!48~h8$+4m z;^Hg>=vyb7TU%>uYX;6AWvFkit^$LC@NjYMIMa4_t$chQK(~Sk$9kp)5Q6WuwI^4e z#YgvLEdT-6)SMS&dT(!Te$uI$2E~*Y9ubkAo(=|Y5ugaPv@c$~0F3DL^z@f;Wm(xl zrAZ%{gBjUVNy*85)_R|z(9x9+(J{P)%2e*mHFiCt^Va!JYjD2XQ)^>=eYsNTMnfcl zi)yma;w303DDuMo?)nU<3W*MauzpzNX@^5KvR&qM-0O zCuP7}Y*mmi#E~DIp1LOMyG+B02 zlglVI7;B0Wzly&?$pK$|{D>GTbBTi**n02&!2eKhXv}&Z#s8wDIA{$)3W81nmErWb zYw(_H$PEwAX0zneZ9K=(Bo0J_0HI@P3&3Q0EhSdgxS`A^!5$89j|iC@17p^D#=Ft( zxfy_)wk^p>W^oWKq(BrT*ZtdOn>jA{r_@xhGg-_C^w2*ky^rO zLn1Ed$A1d*LqDLMHMefIX0EX;gEM-6$Fkn_09ID^8JIqF1O$F4xOA^PB_hHlCXS!9 z>ddDW&B9VuTDE*&BV<4X0}Bg_j)Box0Kk**#?i_MnphWQW`okt-FQAbhn zEK!d-E@AxkX5qx&pF8p+JeZE-|Ku0ogKH-zmuVDp11R-Mxr>KOHh1_dE0Ld>ZHe;nL7o71E}aU#MjAhs&ZbV>M&absQeN4Rmy>zI}`N{{3l$ zSl)2B1*_4^mz+0T-vkYaUW1MRy>ov_={m(+K+1Ew*ei)yus6k`2HxPF|n3|W8c9X9aeht z_@9@6TFJ@b?CpNVq1g^yAjF0|h04H%cjNr*oa1z3+KZLX-&-L6nwJ;qnw=Gt-rR*b zdVHcOl=b_U`D?Wh5>i}%4%wT#&~9C ziMa*%ptXAYaPsB;)K=w;n2!Mn7v8>&evN`U>MJQ{YO`?PSWz)3&ri?x=J^t-ncdNq ze|Gl!Vr*Vd4Hd1K-0W;l>lD5SQ-HjNLEoB&!_E`7F(C$8Kv+3yZKh%zmV^d-?CWQ1ZaqQ!pn&#`SDpR+LsgyJ$V9Y@_Gwx(A{;WRvd=TzCKNQDvwa;S?b&4m z-op}US=kc#jJP++of>c6Tdo+Gl~r`GIy%B}dSD>J;Zhee5lpeOi={vL4LTDHZCeYA z%Tamh?ugMJFK2v5*uxwjExQt!;FBcJcLKjeSEk?2mf?rYxD{EJ-Xm$@DLi4 zgz-8M_)EcR3n~$c9FLB_Vn1XwEm}*|NCW zbK`NYJqL#I4}p|8=|5wvydRXPy@@Gzi>hr~&w~9Z^fi2W^KEqMk6B;us%%_{3knX7 zC-mwU$HY>izxQo@D1BGU@QObZ;1>bkxwZg7Y}0)vED@*kX;2wPL4_@RphY`SaPv#q zSnbRPXLZ!OpCZGj>%GMK?Y#4r-Rh7acYbE(sylLSs_`O40lIpEfb1VmUUs!PJV9!T zg8^UfTK1*sHo%VpjE&$kFON1TQm}*0Ov{}sd+Lmdst}e46t}BOxAuEpU7ZZkVJSH; zt!Cr7wx%YAS`1T}-bAZc-}tzi&;4y?)x;Ar+!mjOa18jY(GqvgcPXVHL1ei3k(_Dl04vxoR3iBM%oB2P;dGn&=$zhC+YIrkWm3nPIY~R1|I@lRrm?kn}oNJ8qC`sJ6Gb z3M-Bc4?E2_ZRzT+2RPkCUb_#L>LdZ`to_@DqyC9{d^?`T4J{#(=Grrvu zD~rh3kL7D^Wz53L3TVZy4-dKLDjAu;qtX?$K?xso$MoCJ`% zN2D1}TEy;B{La#H>t_h%YJxmO0x|Ii1Y#_whYA!E4+)7+fF>j-Yd+v;XlkYdh3jDt zJ!ZaZ$Hp58DR`wj>WOygQyUd)qc2r0xcSnF3?^n~RT{-+Lm3!uUtp+Y>3!Xwrv~-0 zkHhGu#(wk;-ol$tY>!J#wY0S@%X%)n!Sj}vSMd#iN67xhrlt&fE!xNaBmFE*D(W2f z$9=p_%BP7|Hb#~crSWg0SW{z5O7_ZH?`h{>*9?CvDjG_9vtpCUp!oElR`{mF3GG1I zz_4mcN=gcjEHCo~C1v0PBOBYZ15V+REWgyW{@c^hj`49lAX+><;Jka8Ix|Vp#y;2E zD@9C9%+KGtz5TukXQ^x=uxDc8qMO|3t@|lJ`oQE6$NJgZOUum-oSZ43)Nc%?pPZeE zD#i&=C=`wXt01IQqoT6%db_9$@Rd&@%ej)VHnVlZStgjlEUx?7zNC`&l_tI9WU#KtPi$whumPh`|{(JgQMi0t3wcGTX}6Cy$NPD_j5 z?eL2uuyXQ${gR-hq?DDF)ze$3tgIwkINt|=P_HHJ=4zugDcS40K?fIgl?Lli+sl|c z>taCoj+Q&Auq8p!P*JS{A7b*9jH6yO43F3Q_VQ$iUtDplZ7Bdo4B*y-`DP%+0uda$ zVbg)`+1X6J*OA2B_o=y?@i`hpC~_wi4UKEkNZ#S$VR<>zu(GstpZ!V~uiK$-_eu!$ zv0GDG8VQhkfBqC1wlZesqN6LSum3PnsspZ0fu;Xw4C$z-Dop#P*NJLbVbDA$CanNd-o17c;K!8 zsX*jK1*l130v{hAM#eJWYOtp^8*~J1jTW3--I6W1{PnUPTJ^lu#)~3|V`XL7qsUvw zf9N-7%)c9MJzAMKntYAe#s9EiB4iUyW2-7ExIP@`LVew;1_lQHx=a;~3=K0< zoi}^GTP~&NI`^61yLw4t{XKrKSd9=QwST;8+j{-q$gxJDX@$n*>DRAN+IS)yoKYjn zxue6&#SCkF25l^tX{m-?9aedJ`-*Sh-s|e>1}8LXDYU;A6BP~7O<^|a9nKN&*p@5j;XkcYv`0IH7Zr@-a0HHvZ#L0NT>j)a7VdR7VHMSqCmt2oYjCHgtPtyMu~g z*xbyjKVbADBxI+~wEi^>&ATH>feZobM*-Z4?v=ATHyN4m`uh6DMh_hwolN2_e(v;) zl$2g$=DFF~wDfc?5;<2#DY;MaWHO-VfF*ZX3CImRY*v20*zEyax*T~p8*xNu~@Apfv-Fbd|wMaBNiIor>6iFjD|^z;Bt2nY`B?CjUq*C;3`BO41%A5OkoP5@7n z$CGYCFi}UMDqhOGRlUOFEQG+0d=?tnrmtTB2`=`a;KdbCZm&Z%LcXiOp z-{QOjtPr4xW--5kuDi>6j)dypD2(cOqp%xoosEAky-?64ReSIZd=-`k4-e;-k-YAqfl2Oi*cQ4uQL zrpw&MM$#-O&`S&rlYk!vb8tPJ6Z7422&6#{ugFQpc|ROS)YM#`Y{bi$N&*rbfD{PK zpQ5i&xzv3596}x*`Rb~iNWvVZ#Sf6j;7G&x@88Up<397Pw)@B8;>hq$ckWSVJG|Vj ztQ6D##shx#j$R(6M3H&T8Prr(zN4<<A~@Kscf_H-|1X z;-3wR2OMMQApM`%Q`f&qAUZlP08L(HeWc0u*$moZ@Wv##)RONlQ%wh^=YIcw;htD- zyE$HV@hRMiyi%)DRi#N?NojLN-H$|WrpoN~t{o#!V{Tqvx`vB zz!#=7ikB}v_NJ>QQ$J>JX7Iwm!#4brR^G~}tHT}mHvd>b0X?`e`@!8^(2G}GR@UO$ ziIONnDu)o*Pf}7$A}GJ$p)$N$)tkRMg3GW(BtRW|Ub4Uof<`egC?F!%!X$mSyvHg_!Z z@@*6p6@OB*vwgRj@2_*(>Zvr5<8irs1^u-|T$x$!xUsc`0IJ4dNo%;?k)|Mo#WV>> z$xi%HFc8>4Nhx%(nuv(#5Xo-oQsuuqpWh^OKAN&ED9G!|Pm@qZXYTUUf=jI+gVzWJ zUg#fc)9z_~^sokynxdclLs-zPX9f=5(qdaD0K5Py!xa}6p7q2sQ&$n(L;^E9*sCpA zhaO>Lu#Ez!Ly(kIEuaoPoX@O0qtnjL_QZWAzW!|{#D&_0y z4Gq_E;`3@4w&Tx0sDuO32{5MtaETBazTYZXe9Awl=CuEow|Q}?BYS$9nt%ij5eqlp zPet*_`)r%#>Z;g!#xs$TT(mWdiijjOLsvoVylpWFNHORmdxk%dft=!dZrFSCg1;dslDks9o|kr+nYz}4bJ8@+cxlHQTO(4y>3eHZcnV$CwdmV@V`Ea zAJMzpHg@6Zq|WR8C@bBT%cNN7z=M927%M-0`Z+zF|8Q$|UywPyOln5pc2W9qE;>*ooW6AjHlt zv6t*x6@`+DP?7k!%UJ3^-->E6^d*=mNJvR1%Jdd8@fMNTgW@VHmj~1D&4z+Z%o6Jw z_GP6#B7xqftf*)Y00kc-10&<*W)2=DWldlw4^r^N`uc&Bb81)k*7d{-NF+0WHO$P{ zQ^=kdesK7SlCJw!A(8jItfz@DrAb=u-AliH!=BFyl8}-@oqzgc@m;yT-~+KAFSRFF z^Z0MeS2r>P%5(=(SvDGriw%L2Od$*;;Sjmn24~Aypvd_n1REKa)_gw#*0`^XZ~Mn8 z`xRDf9QEBBx{h#?*BDVH^a)2Gh7kA6$(6{@TMjx4)M@!3RpJ5fFJh?a%g7iu;#of8aJ7 zYyo9(B=<4u-#PG7dLF)U{dbN)kJ!Ye)zh4_TbE_Y$tgU_S&eV60X6qe+dBD@ZxV_!rezx7x z6-S%uhA7f733xn}qXgBNp0_5DjoTjXY%@}4<~=TSm($H9DyFPn=0*D)iD+m{UY%_0 z?CgjtqoSb!zSn5jiAti}g9(*kMxAj^;hQrb&d%&;m-{o}cqqq;3yfi(+oNva5N1Qc z)CpJ>XbO-D0o1;vwA6clmP=1h4_6eZLh({_-z^i(XZ^vVr>^I1bzHUS1B&+R*TDR%Ygru`!S)qo>GID1H@H)t9UzIe}>S zl~cPwClHS!0|e%^PD6Fy6n8L}>wa29#6V9hO`wp0sVTLefJTew2T#wp>^>lUSg2f3 zK9>htqP@KxDi5+&3k!M_SQ3OrTO)bkdDP2v>0iA95V_v#rsh%!JhXXLpEnvR zD!a|B+j@U8NS7Y8+?1*xsJ0^e^&3@jrLw==*($-nj5Mp5Um-1s0{PFpsdrf_ADN1;Q9Ia z(a}*%$EQ%({K`rtU0psF7G)@I29K+pvT_w5S=rgJf}ersK~aCu(hWiA}a zZz79P$BITND=7i`^Ji>K0XHH%+_*v`J5eIn$2(a}Qm+#>4$*fKd?yaaH8xN&%y)u2xAQ0J#L<3WKDpQfXw}{&k*Gp`@f_ zD!X;%_wPD2R#T$|@;ATT$iYOWwtKom?g&6+Pd&|lF{d?Nj z9w$dfM;DiMyP#z!8r=LP<9>obkRh>Mn7BgcWOK0crAI03?URhgN?e6Z9kdf&ER;{QASmDyzT3$f`jfpoe zFR(A)9&v9jEdlZ1ZmS@Zo15DZKMsfvKzsZB`?tS8EM{)>?*P{yHf-Zm9Y8Mgx!CmY*BkA*8p zv(1M9lTv7^)>cnJ0V`TUyVd&+#2@msLCWQ4cejzxAt35EzdxCm(Q|QW%E}IaVb;|p zrl-gM{JG%uEf~`+E_*4JmCWZ61bDl8|1w+wQ3Ou;`SJ0KXbDS@$-}_d^Sl#reFN4D zBO9Cjr6mI^tJ}*XBX#u&G8T#biT_ALel0ANZ0+?z#aeoQF(DQczGYSdPIm-cVCBHRtu<2Ulq4 zob52}BpB{G#DeM+S}QQK#45Y1aAnvRToYjhcWE zB)0?rAlLWPad#hE?!@GAyvNuORkJf~W96Ycb9 z5{998#(Blto}BbqE>kx;L-)}sVqkcq=egA6QoYfpkXAug^kOhl&-`>=Lv7n@1|E#F;$A*%_nW3AQE z`FRZ%Mh!&31q|2-jp7F3;E|Y^%KiZi0D9BXK%(m(A-ZOeo;kU@m|)Z!{9ctKCVm4< z%72FM8oQ&UT@PAfqK|reES5PI`cs)jr&HY^Om6=Q`+?BTN?EJ!&7}r7H3noH<>1BG zpfZc(uzrWN3uJo>neTMw4zD(l+jYwNd&ls7jAWfSA<2#6!&B{w4S@;CEK)=qtEr$5J)mwjGiVkx@K?;y^}-<@(+MP z1Rslf^X>eKo>4F3Q&lF$!8LAm+Ct~Ng9pf;`ZowjurU+#D;JP~oGQQL`o|$Y$J6tg z&#?iio__ZrPkSv*fyL*h;0DSll|yfH8$0o}{pGD=K@^`-Cl5YB7r1*EWfc{#?XiG3 zTvJQBp^lEX6hB-*SmXG(91g)9WH1Tz0ddTe=0X>HjJTGRu-j&wwFkP4=5MW}qoLC% zB>m9;aMy6(9@q`aBtEVwmD8Ri-G-3B+*bcfpeq9tI!ONpNJDY?ytPw+N*2ZMkec!? zEuCgC-Ewc~jjXUR!hyMf%VVlH7i3IVx=uhcVy^zARsovE<>+5l2IfMpG-{;u|DOA` zoH*8cH(gQ^vFSv|J*V`@PR#|>z@_Re{sxW9iqtdb8_u!;(G_C>m3aw*C%B>P^TQBO z3^2FftE(TbXwNpD;P{>i4e=71w=9(a}k1y^Z7Yo<5wrW)zupo7K~t{ zf{F?*2t6+D^9{^-(UNRN(1O@(I4yliJxDbVq%txy>mIpz!UbFx7srD6U-Ym99ekk} z#GYm489#-E6_zpT*4mKH+l#dT77>8-M92X4iy0c;YXK~(moE_xC@9GT+K|!Ff7UYp z;C$SL^Y0OD&tcwi=2I%KWKR(6$HH{c4RSWa- z5cWcw-tJF(_XhE5BJZBk-~#8S&P z*sq8MCvcGr0vHa=iWIOSTY}(H*VtI~$;#k=f?3AU=NUEMzV%K_BuY@prE>$zu>%?k zGME&|hWh$;C+o6SPw~P6v(3G{z-|s8PDe*a11%YdonXlW`z0pd{tv(kcO>_OdomB6 zvKy>{YJdi<9C_bgnGOHMp^>{ipRoma3(WUnc=SS8ABQ$J*4F5?>wZs8x&aGl(h4k9 zAp8c_ZU8C(LGe0SkJ#LJ3q(%gf>CQgFm8{;xwz`-)JvTvKE;700U!|Ygnb()0GTH+ z=m5I$XV3z~rX;D96crVXj3^VdD*+w_n}7fw4JYLR*Ka+$xbQjM1RoEBjV`teE!IXx zu|VgJi!-*io-3-p#DZlaf&Y7)a%#D`xoK!5ZGyghS))9vsjW@o;>E)Lk67X4Jz7|2 zd%n1+sAAz*Qc@BbakPvR^kVxD9lRj056ZW$uC9PX=6%;7JPp)!c)|G=uQ1+DmuL{A zrNKo#J39lLBFeWw6b#uPY|k=y0#bYxTb_KG5>)GJYtQiULGlZ{ki@}`O-l>+F!2@U zVrq~6hxvhPX=w>Ua=4-ZKWV;B*nEi{@{#wyTOZlkfE)npV+8C^`ka_ppa7jz-u?81 zj&9ikoB;?1G#*%etESTb%jxJIEbHs(VFQt+gaoC+vE1BT*;Mwa>1hV7nqA;oHA{uz zgK+*w9Mb6K|1c%gQeuAtx&P5W+}{WLU%YHY(*6to8G49;XdUSY5di@pSL*8OAfp!+ zCQ1*bqYK;4H%I(047eazFbb^u(XGP5LK*5&;A>4yC3h^H(lUWimEW*`-x?}BEZB@A zD%uJ5noUk>SR}*%mLVg<3Zlr)&VcYG{QeY2(+Yf?|801VyWiB%5ST^%e~Q#wLBhYT zj+2&F>NEy0LcnPNZ|dvq1t8d8mg=7_1OfsA2__8>&&-X<$^zM3;YehV_sl~>`atp^82*JpFtNg#6yKNE@)U2#t2ebkByd%8+9I=)crlSMey4M4sAV>;=GAk(I-Q*An zp2>hf1n|Ke40ao8>!bW&VgkmmqVqVy`QObbs5lUTbuf+pYv&40Yg>7Aa&m~y06e0q zt@r~5B6vhMJ13`~JniNN`uf08^tDB-J0=Eu7#B(Y=h=VvAKpLFGuRD-tZNa0?T!#h MQ8|%PA$|Y<4~}6DAOHXW literal 0 HcmV?d00001 diff --git a/inherit_graph_5.map b/inherit_graph_5.map new file mode 100644 index 00000000..09162f22 --- /dev/null +++ b/inherit_graph_5.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_5.md5 b/inherit_graph_5.md5 new file mode 100644 index 00000000..8e97df25 --- /dev/null +++ b/inherit_graph_5.md5 @@ -0,0 +1 @@ +1fde7f606647fe5a1ef6f08c18fc38cf \ No newline at end of file diff --git a/inherit_graph_5.png b/inherit_graph_5.png new file mode 100644 index 0000000000000000000000000000000000000000..ecbc971a35d934badfd5f26bbac0bd904b7755a5 GIT binary patch literal 1285 zcmV+g1^W7lP)Q5d200006VoOIv0RI60 z0RN!9r;`8x1iDE?K~!jg?VC$TI$Hq7XG(gJN{b{aY$~aQ!i*q$W6;7PK`|riieOo$K|Ll{NQX=eIiN zoAdZQpT{$!2qFjq5a3D_-UbMW4E_ZW8Q>3*0sfFYD|)?tYHA8EE0IHKX{k&m!>a$- z2iMovo12@zZYi=b7z}#7-cup@Hrm+O_$@z?NMmE8mqMHe_(NoXKST!j^OX$V-``tW zTF7K_et!P<9TXN8uB@zlf1Lj=U&&x=Ys+Xf!Z3Vxb{2L+zW|5BSy))W+r{5}C4-Zb zlai7WDwP^`H{Zc%Gzx`68jThg7nhrxE0s#kX0zXx27{rswe^?n1>q|h*lf1g*x0aJ z`3~FL+m)4-5CrLTI;+*H(P%gv&gkeU-o8Qu@nCIj%}ep6zP=voE0@a=1YxmQ0|Nuq z)zyiKiL0xtXaf)gAqW~C9(KFkXh#-{H8?oP<#Nena!yXp&dv^|t5hlkK^zVTpUR~ z+q=8F>2x}kO0BQ2zr4KkJ4KKM6p2J4k;qf|bOs25bar;OwY7P^!jzPh!^11?d@f=*)EqW&?5Ndr!p8B z8S&e4W@bh#7GupOCnwSJ2P+G#U*p#K*@20PyXOG^Vm5Cp;K=;)`Xr_0OB52pxDcrpM%5G~x@-8D5e z4Gj(5-rl<1?&;}ir_=dicZEVxP*6}?TWhsizc2`s$%G&%_(KNf&=+)NQ7jfqdU|>w zJtHF{Dk|#X;lcA=+|bbQ;S|9M^K#N)Crc$XfF);>%VS0KxlwKqfNv&4r=jU^| z-240cAcH6r3I>DWRR%$Dc6N4gaj~zj&tx*ay}jMt-D$Pj5IxV$&1tn-yWKu9F#*G{ zKp+UD)9G|RpD&R}OeWLI%Zt%y6bJ-wZ*QMiAb*580|COePZwg`xV0 zic%_-H8nL=RaGPs>9d3Ics!j>XEvM5%gZSgN?BQ%$z(DZ453Udl}hDud1`8^TCLV- zH0UQ=AbojxIWI4d$K%mxw63l$i9`~H+jP%u72=uve*(KR4pIL;KXoP(d5E00000NkvXXu0mjfW3yb8 literal 0 HcmV?d00001 diff --git a/inherit_graph_6.map b/inherit_graph_6.map new file mode 100644 index 00000000..98deff48 --- /dev/null +++ b/inherit_graph_6.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_6.md5 b/inherit_graph_6.md5 new file mode 100644 index 00000000..81eeb149 --- /dev/null +++ b/inherit_graph_6.md5 @@ -0,0 +1 @@ +6d7150c2026fa6a894ac6d82fb24e9c3 \ No newline at end of file diff --git a/inherit_graph_6.png b/inherit_graph_6.png new file mode 100644 index 0000000000000000000000000000000000000000..518a3aee1cf7ac8ee43b4c05b60559c74ac9f03e GIT binary patch literal 1570 zcmV+-2Hp9IP)2BoZtM;`F+p%?(AH25r$y^L>Z`dTL5I|fMzQQXtsiYW-ACazvFZ|@87?_ zTT&nq$7Zu-W@d8TKhEr#nVIhH?j4r|*%rFHyJu!*_z|@@sjI7Nr}RL!5d=X55qQm3 z5YTJ|0nJtrn=$*>uV2@$UDIl{Nl8gtSCEpD^6J&At1HlC4@@#4jcb%)DL+bEkc+wb@9-@iZNQno^G zZ|~W&X9i8(Ujj%P>rGa`Nrlx6hwHuhD2;zkbaoAP7PbL__%X%;9n8jW_l zojX)hQ*-9b8Ld{EnwmN^G$b8gT3V{As={$xr_<%;=6bzeaft^H9smGFM@I!R3JVLl ztuq>p+-3@vDNYMlR2l$4XJ_Xh5q?LG*$l&2t=6)#GX7Q`K74q1csLjga=~CQI5IL~ zFc=&T2bYH9_~*}`mzS3t8yhhUW7o!-JvTR(k&#heUM@XJNVC6w{R#kZI-TJJ3ls{> zj*gE0`0=CP?Xv9U2^=EH{%3kwUmw0rmNvF-2QzXJd$iemmd zhmIXPMv~;ZlZ52cr%wQY>FH^<+tJY>_}&sI6rb7Lp~S?*wzjr#arW)w?CdNXTw7a1 zQFMHKTwH>pD67?KFc|jk-J6-2`S$HwHXhP!@iO^o5=EsEn;n_wY#hhAc2`$dT3VV$ zqd^el#*G^kMRA8P3}YKnQBeSZKp?<&pFe+o@ZdqK)hcHaF^3KvVz-0sUcGviVVDme zK7>;!;P~<5{5Drh9RK$18vsDB*CPmmAjqCQdw%@*;q`jOCG>jzqeqV>CMFga7mJIF zuUxspej)|PS*CQ+4G|f$x!17s^YcYTMfLUdb8~YvO}DnT27|$Mhm$0E>eQ)AmoE8y zzD-P$n3zZqg!IF@_(d@XyPGUiQ&X|AvEkxJj~-R2REvv?{L>{bFHfQbilSDll^}@W z;b8!PO7;JSODvP0CS7zxMEDI_AP}HwTBp@RJ$;ivZhng9iC4fMzR*5dW#7D8|OdHWdG>foHaYfMzQQ zXtsiYW-EvgH)wC(yxDmjkR2d|+5Eq!LjENX2L3) + + diff --git a/inherit_graph_7.md5 b/inherit_graph_7.md5 new file mode 100644 index 00000000..305c69e2 --- /dev/null +++ b/inherit_graph_7.md5 @@ -0,0 +1 @@ +e5261aacf97f3320b4345b58f597b103 \ No newline at end of file diff --git a/inherit_graph_7.png b/inherit_graph_7.png new file mode 100644 index 0000000000000000000000000000000000000000..a76fe759b2a2d55dcb5dc37d7130addb12213b96 GIT binary patch literal 1403 zcmV->1%&#EP)D1AZ00006VoOIv0RI60 z0RN!9r;`8x1u#iOK~!jg?U_p~V_zJ{&#A^Rt=6jIQLjqK#8hJzi0B{@8W$m@Orq@y zQIAAy1hW!pBr`IJ5FuhZ#9QK#NW{X9sD-dI9y9Kx5A{q-gz5b+PI7a{qbRxlG551N zzu*0xU%vh3m-{${BuN4mM&P`(fPVLPAYV z4Hf=1*Eo)kj*c=e>21SXfw7QxkP&E0f6@8yizoQw0J+WMt&*?CiD9XJ=yS=))IwT~-*Vh-ru;0IbKh~>jJlgB&>1mx#S6W(1l4Mg;6H4~<^fWg& zA0HnV78XuVPm?5hd3iZLKK}jt_kn={YOldy(ChVPvstZH7Z(@PkIv0z^T&@L0|Ejj zCntG4o{J`T{t^zSq@<+1y&VAX{BV0uA8LBYw%$;!&g^71l{ztsNCFKr_=dZyZ(ZtF*G!EEpscB*NB*y z7&Lk}`S$IbN~NO8zI^$D)@Y^(fgsZ>ha^d*QmIrb>6zzwzot*n$jC@+Y%HJ8hY(g*R}%z5 zT@r~zXyNVc4FEVlKSyCtPtV)8Z*@A|Lz=iiBoZkUijtBNhr^Mco=(4n<2aYg4Gj%N zA-ehCI8G1*kH@2gNhA`q*xud-00agGLI@#*9v&X2r>DPu{d%Y)xA8n)LkQ8rVzCqz z6@C8v*<>;~ozB+Q)~l zogEaSaTbfkK|w(dhr?>MqWsp@7FvXagm5?2xNO z3CHoOsw#y-;qUJ+kw_8~6Dukz_V@RQH@faBy~ZwpOcMUtd2vJ2M)Mxw*L) z7Z+~&0swe+uR}vaTUuI*ii!jRK}}6fUS8fqb#ORcU0tcEsdBlT%jLS)#5F@hLwr78 zDwTft@F6fT&|ol7dAr>%kw`EMQ>)cfy}@9Jii%Pw6e5wRva(XE)jsh}7m~D>f#Km{ z^b~qZM-~J+Q>7nJvu97t!FtUctk=xJdd(cH*UZ6s%^a-P%yG;AGQ-2e%M4%Tbt_z!iw`i6?O)9U~L002ov JPDHLkV1gIYt~~$% literal 0 HcmV?d00001 diff --git a/inherit_graph_8.map b/inherit_graph_8.map new file mode 100644 index 00000000..401322fd --- /dev/null +++ b/inherit_graph_8.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_8.md5 b/inherit_graph_8.md5 new file mode 100644 index 00000000..64c8fac2 --- /dev/null +++ b/inherit_graph_8.md5 @@ -0,0 +1 @@ +0fd9e3718636c19d25379f06c5ea984a \ No newline at end of file diff --git a/inherit_graph_8.png b/inherit_graph_8.png new file mode 100644 index 0000000000000000000000000000000000000000..9fe4f3c127aef8687af04c43de22e8c6e1c6f7e6 GIT binary patch literal 1612 zcmV-S2DABzP)x~QxPv1UiZx)8fi z3Bq96f$B#31HqyZloZ{F{Q+~(W?e*HMYmxgMPw1!HvgPsYjY?Q&!pP+doNx*xZJeW zrf=^#A2@KH-|w97d7kIHXU}uCa~L8bD9Djs)k@buVdYTFmobX@GDb09#;AV|^!NAU z=FOWcQ5S^_(%aj+AhuxS^E{8oj~_2fg%mQ6AP7nQTrl$INc2fj`1^3VTxe)$NSIUR zd>NydFJlz*WlUPk|MBAonwy)EmzRgq($aKDCZwXG0zExF8Por-^Y!ajFbsoWFqjs- zqzk@Oc>44y1_lNo2m-mIcEwP^nZf7!0u4Y?%L#az#Z2E?v5W z>gsA}G#YH#vIWndKTmkwa5#)3M~>j|;lmI`aY=2v-HwuylBDJN$ zO7WSQ8E_njqM{-c6cm7ES&WX3O8M#OX>c3|gTa8cYuBQ+wH2Z$0ssPm0FEC&4y{&; z_3PK8xw#pWlaq06|GB?>J|9??g+`;nwr$(+(%6bgmt+_`hKW5*7PMx#VTR99C=d-v|8j~_qM)YKGpc6QRUXU~X;X#f8GR8vz! zDKGHSlfW?S^U zTeogeLqkK{IX7^|ck4v#=G)fwchTgw_Potxw1b{w&{=7ijIc<~~w=4bRiU#HW>m3w=8v2*86d_KftF?4ivAQFkBq-nR?QC3!lg9i^{YHBL2+HU&;`{gS(CKujtE)pxOACgEh7b;iF)%QI`uci&`}Pew zoenI^;>3v)`1I)$LZJ}4y1LNU*N5WbVpLUC!D_X_=ktN*d7L?O1{RA28#iuDczvVM zh&_Au;PmO!n3$M=*Xu=ldwa_LwHV80zFx1#_3PKs*w_e-MuW3w&*JFOqrau4QmN3@ z)rIQnYE)HKL9JG&O?y6VZEXmL!+7xE0RW)8yBk}#ZiU5SfmW+UTU#4iT3V#r+@78u zl$DjiY&N5~xEOEVyn)GN0suIjPUPn1qP)BuyLRnDVPPS?zSHT%%*+goMk833 zMN?DLAGaxv6cz{ye<3Tj;8XZ-qnIya6!T?_V!n(~%$G5W`7%Z^U&bVTlE>w8EoVIx zGDLrWf6`o1^OHU6t?>VWAyVGYmnq8o`Eo`vU&bir%NWIc8S@V$NYUh8$Xss#0000< KMNUMnLSTX{9UWQ# literal 0 HcmV?d00001 diff --git a/inherit_graph_9.map b/inherit_graph_9.map new file mode 100644 index 00000000..0a55956c --- /dev/null +++ b/inherit_graph_9.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_9.md5 b/inherit_graph_9.md5 new file mode 100644 index 00000000..1e1c32c2 --- /dev/null +++ b/inherit_graph_9.md5 @@ -0,0 +1 @@ +ff3a4760b2d575b55047de9c87fc6141 \ No newline at end of file diff --git a/inherit_graph_9.png b/inherit_graph_9.png new file mode 100644 index 0000000000000000000000000000000000000000..a79cda299bd3d4d14818293f772ff888f88d9e97 GIT binary patch literal 1229 zcmV;;1Ty=HP)E!(&-|Fwnvbnk0-{1dRr34vGO-)%@S@`rt zM_VkGg@pyeOA10378WcP%kv2GR%9}nh^i-Ofe^lmkmqQEAdMyn(rAJR#OTMzN2OB9 zU@-W6{?{uI3Wc+?vtQ5ikMH}=#n3N{i;FuuJ1B~>Sgda^C|C)kqxbjsGcq#%DVGZi z3n7FMLOPu;5C{wg!?$lC5{ag!rUG6bh|zYtJtQO~;4Oa$wOZ}XlP_)1VY%>)&>9&3WXYtCO0>i!C=hI&B2#KsmKGNmI~#>R#ZeMLpZ?(S}Nbv1-AGc)sV zO#=V`?=y@>xGW(dVS9Vq z;c#fRS~i>Q@p!QK%*>3{Y88n@_4W0>lXQ1?CnhGo9TyZ7U>)snI0gp?5d=9oIl&I) z&jk zk>`_ujmDbpEdv7sa=9Fr_4V~(W2{Y36vg7Lt*u-xSEtkYP4W>11qFEPP^r|Vr6nwW zc6J5;Fq_TT6l?RVt1En8Jj0(qe?~?|eCWSu^!MCHCnO}`W0T30mX;P88VVs)tJNrq z;)mF5Ha4KqXaE40%Y{uRCMK}2{AZGU1lG|uo2{gzq_ea0>FEgoV6j*b1mSQvmRbO6zQ<_%(f<1STA@&MbaYs)R*%P{*X!MGx8LPDoh~IMB|ks^ z?(Qz&Bp4A95o2RxXJ=>Qp!y!K@fw%z~}Sx^73ppn~x-ZFNOesu&}V^=H{-h zu7`&Q9*-v$i&ZL>)oQg^ERBtgMMXu?(b1T4czAeyef|FazPGm*MbWadG9UWr=;(uk zgU^5DulQ!8IUG(;Pme;OU^1CaO-<$H<)5vCLKz($l}IFFu^2&+z>?rJG&DG!&dJG1 z0D#eG3=Itx2n6Zr>9Mh~)6>(qthTmRqtV2~#25^Q<>lpwhzKA0mX?;4l@%I|M%-No ziC@4ET?|S5LK;mFq|pRH8ch(S(F8#nO%SBf1o6% + + + + + + +Project: Class Hierarchy + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+ + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + + + + + + + + + +
+ + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + +
+
+ + + + diff --git a/joint_impedance_control_8cpp-example.html b/joint_impedance_control_8cpp-example.html new file mode 100644 index 00000000..402b310d --- /dev/null +++ b/joint_impedance_control_8cpp-example.html @@ -0,0 +1,321 @@ + + + + + + + +Project: joint_impedance_control.cpp + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
joint_impedance_control.cpp
+
+
+

An example showing a joint impedance type control that executes a Cartesian motion in the shape of a circle. The example illustrates how to use the internal inverse kinematics to map a Cartesian trajectory to joint space. The joint space target is tracked by an impedance control that additionally compensates coriolis terms using the libfranka model library. This example also serves to compare commanded vs. measured torques. The results are printed from a separate thread to avoid blocking print functions in the real-time loop.

+
// Copyright (c) 2023 Franka Robotics GmbH
+
// Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
#include <array>
+
#include <atomic>
+
#include <cmath>
+
#include <functional>
+
#include <iostream>
+
#include <iterator>
+
#include <mutex>
+
#include <thread>
+
+ + +
#include <franka/model.h>
+ +
#include <franka/robot.h>
+
+ +
+
namespace {
+
template <class T, size_t N>
+
std::ostream& operator<<(std::ostream& ostream, const std::array<T, N>& array) {
+
ostream << "[";
+
std::copy(array.cbegin(), array.cend() - 1, std::ostream_iterator<T>(ostream, ","));
+
std::copy(array.cend() - 1, array.cend(), std::ostream_iterator<T>(ostream));
+
ostream << "]";
+
return ostream;
+
}
+
} // anonymous namespace
+
+
int main(int argc, char** argv) {
+
// Check whether the required arguments were passed.
+
if (argc != 2) {
+
std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
+
return -1;
+
}
+
// Set and initialize trajectory parameters.
+
const double radius = 0.05;
+
const double vel_max = 0.25;
+
const double acceleration_time = 2.0;
+
const double run_time = 20.0;
+
// Set print rate for comparing commanded vs. measured torques.
+
const double print_rate = 10.0;
+
+
double vel_current = 0.0;
+
double angle = 0.0;
+
double time = 0.0;
+
+
// Initialize data fields for the print thread.
+
struct {
+
std::mutex mutex;
+
bool has_data;
+
std::array<double, 7> tau_d_last;
+
franka::RobotState robot_state;
+
std::array<double, 7> gravity;
+
} print_data{};
+
std::atomic_bool running{true};
+
+
// Start print thread.
+
std::thread print_thread([print_rate, &print_data, &running]() {
+
while (running) {
+
// Sleep to achieve the desired print rate.
+
std::this_thread::sleep_for(
+
std::chrono::milliseconds(static_cast<int>((1.0 / print_rate * 1000.0))));
+
+
// Try to lock data to avoid read write collisions.
+
if (print_data.mutex.try_lock()) {
+
if (print_data.has_data) {
+
std::array<double, 7> tau_error{};
+
double error_rms(0.0);
+
std::array<double, 7> tau_d_actual{};
+
for (size_t i = 0; i < 7; ++i) {
+
tau_d_actual[i] = print_data.tau_d_last[i] + print_data.gravity[i];
+
tau_error[i] = tau_d_actual[i] - print_data.robot_state.tau_J[i];
+
error_rms += std::pow(tau_error[i], 2.0) / tau_error.size();
+
}
+
error_rms = std::sqrt(error_rms);
+
+
// Print data to console
+
std::cout << "tau_error [Nm]: " << tau_error << std::endl
+
<< "tau_commanded [Nm]: " << tau_d_actual << std::endl
+
<< "tau_measured [Nm]: " << print_data.robot_state.tau_J << std::endl
+
<< "root mean square of tau_error [Nm]: " << error_rms << std::endl
+
<< "-----------------------" << std::endl;
+
print_data.has_data = false;
+
}
+
print_data.mutex.unlock();
+
}
+
}
+
});
+
+
try {
+
// Connect to robot.
+
franka::Robot robot(argv[1]);
+ +
+
// First move the robot to a suitable joint configuration
+
std::array<double, 7> q_goal = {{0, -M_PI_4, 0, -3 * M_PI_4, 0, M_PI_2, M_PI_4}};
+
MotionGenerator motion_generator(0.5, q_goal);
+
std::cout << "WARNING: This example will move the robot! "
+
<< "Please make sure to have the user stop button at hand!" << std::endl
+
<< "Press Enter to continue..." << std::endl;
+
std::cin.ignore();
+
robot.control(motion_generator);
+
std::cout << "Finished moving to initial joint configuration." << std::endl;
+
+
// Set additional parameters always before the control loop, NEVER in the control loop!
+
// Set collision behavior.
+
robot.setCollisionBehavior(
+
{{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
+
{{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
+
{{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}},
+
{{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}});
+
+
// Load the kinematics and dynamics model.
+
franka::Model model = robot.loadModel();
+
+
std::array<double, 16> initial_pose;
+
+
// Define callback function to send Cartesian pose goals to get inverse kinematics solved.
+
auto cartesian_pose_callback = [=, &time, &vel_current, &running, &angle, &initial_pose](
+
const franka::RobotState& robot_state,
+ +
// Update time.
+
time += period.toSec();
+
+
if (time == 0.0) {
+
// Read the initial pose to start the motion from in the first time step.
+
initial_pose = robot_state.O_T_EE_c;
+
}
+
+
// Compute Cartesian velocity.
+
if (vel_current < vel_max && time < run_time) {
+
vel_current += period.toSec() * std::fabs(vel_max / acceleration_time);
+
}
+
if (vel_current > 0.0 && time > run_time) {
+
vel_current -= period.toSec() * std::fabs(vel_max / acceleration_time);
+
}
+
vel_current = std::fmax(vel_current, 0.0);
+
vel_current = std::fmin(vel_current, vel_max);
+
+
// Compute new angle for our circular trajectory.
+
angle += period.toSec() * vel_current / std::fabs(radius);
+
if (angle > 2 * M_PI) {
+
angle -= 2 * M_PI;
+
}
+
+
// Compute relative y and z positions of desired pose.
+
double delta_y = radius * (1 - std::cos(angle));
+
double delta_z = radius * std::sin(angle);
+
franka::CartesianPose pose_desired = initial_pose;
+
pose_desired.O_T_EE[13] += delta_y;
+
pose_desired.O_T_EE[14] += delta_z;
+
+
// Send desired pose.
+
if (time >= run_time + acceleration_time) {
+
running = false;
+
return franka::MotionFinished(pose_desired);
+
}
+
+
return pose_desired;
+
};
+
+
// Set gains for the joint impedance control.
+
// Stiffness
+
const std::array<double, 7> k_gains = {{600.0, 600.0, 600.0, 600.0, 250.0, 150.0, 50.0}};
+
// Damping
+
const std::array<double, 7> d_gains = {{50.0, 50.0, 50.0, 50.0, 30.0, 25.0, 15.0}};
+
+
// Define callback for the joint torque control loop.
+ +
impedance_control_callback =
+
[&print_data, &model, k_gains, d_gains](
+
const franka::RobotState& state, franka::Duration /*period*/) -> franka::Torques {
+
// Read current coriolis terms from model.
+
std::array<double, 7> coriolis = model.coriolis(state);
+
+
// Compute torque command from joint impedance control law.
+
// Note: The answer to our Cartesian pose inverse kinematics is always in state.q_d with one
+
// time step delay.
+
std::array<double, 7> tau_d_calculated;
+
for (size_t i = 0; i < 7; i++) {
+
tau_d_calculated[i] =
+
k_gains[i] * (state.q_d[i] - state.q[i]) - d_gains[i] * state.dq[i] + coriolis[i];
+
}
+
+
// The following line is only necessary for printing the rate limited torque. As we activated
+
// rate limiting for the control loop (activated by default), the torque would anyway be
+
// adjusted!
+
std::array<double, 7> tau_d_rate_limited =
+
franka::limitRate(franka::kMaxTorqueRate, tau_d_calculated, state.tau_J_d);
+
+
// Update data to print.
+
if (print_data.mutex.try_lock()) {
+
print_data.has_data = true;
+
print_data.robot_state = state;
+
print_data.tau_d_last = tau_d_rate_limited;
+
print_data.gravity = model.gravity(state);
+
print_data.mutex.unlock();
+
}
+
+
// Send torque command.
+
return tau_d_rate_limited;
+
};
+
+
// Start real-time control loop.
+
robot.control(impedance_control_callback, cartesian_pose_callback);
+
+
} catch (const franka::Exception& ex) {
+
running = false;
+
std::cerr << ex.what() << std::endl;
+
}
+
+
if (print_thread.joinable()) {
+
print_thread.join();
+
}
+
return 0;
+
}
+
An example showing how to generate a joint pose motion to a goal position.
Definition: examples_common.h:31
+
Stores values for Cartesian pose motion generation.
Definition: control_types.h:127
+
std::array< double, 16 > O_T_EE
Homogeneous transformation , column major, that transforms from the end effector frame to base frame...
Definition: control_types.h:178
+
Represents a duration with millisecond resolution.
Definition: duration.h:19
+
Calculates poses of joints and dynamic properties of the robot.
Definition: model.h:52
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
Stores joint-level torque commands without gravity and friction.
Definition: control_types.h:45
+
Torques MotionFinished(Torques command) noexcept
Helper method to indicate that a motion should stop after processing the given command.
Definition: control_types.h:294
+
Contains the franka::Duration type.
+
std::ostream & operator<<(std::ostream &ostream, const Errors &errors)
Streams the errors as JSON array.
+
Contains common types and functions for the examples.
+
void setDefaultBehavior(franka::Robot &robot)
Sets a default collision behavior, joint impedance and Cartesian impedance.
Definition: examples_common.cpp:12
+
Contains exception definitions.
+
Contains model library types.
+
Contains functions for limiting the rate of torques, Cartesian pose, Cartesian velocity,...
+
std::array< double, 7 > limitRate(const std::array< double, 7 > &max_derivatives, const std::array< double, 7 > &commanded_values, const std::array< double, 7 > &last_commanded_values)
Limits the rate of an input vector of per-joint commands considering the maximum allowed time derivat...
+
Contains the franka::Robot type.
+
Base class for all exceptions used by libfranka.
Definition: exception.h:20
+
Describes the robot state.
Definition: robot_state.h:34
+
+ + + + diff --git a/joint_point_to_point_motion_8cpp-example.html b/joint_point_to_point_motion_8cpp-example.html new file mode 100644 index 00000000..ec57de05 --- /dev/null +++ b/joint_point_to_point_motion_8cpp-example.html @@ -0,0 +1,144 @@ + + + + + + + +Project: joint_point_to_point_motion.cpp + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
joint_point_to_point_motion.cpp
+
+
+

An example that moves the robot to a target position by commanding joint positions.

Warning
Before executing this example, make sure there is enough space in front of the robot.
+
// Copyright (c) 2023 Franka Robotics GmbH
+
// Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
#include <cmath>
+
#include <iostream>
+
+ +
#include <franka/robot.h>
+
+ +
+
int main(int argc, char** argv) {
+
if (argc != 10) {
+
std::cerr << "Usage: " << argv[0] << " <robot-hostname> "
+
<< "<joint0> <joint1> <joint2> <joint3> <joint4> <joint5> <joint6> "
+
<< "<speed-factor>" << std::endl
+
<< "joint0 to joint6 are joint angles in [rad]." << std::endl
+
<< "speed-factor must be between zero and one." << std::endl;
+
return -1;
+
}
+
try {
+
franka::Robot robot(argv[1]);
+ +
+
std::array<double, 7> q_goal;
+
for (size_t i = 0; i < 7; i++) {
+
q_goal[i] = std::stod(argv[i + 2]);
+
}
+
double speed_factor = std::stod(argv[9]);
+
+
// Set additional parameters always before the control loop, NEVER in the control loop!
+
// Set collision behavior.
+ +
{{20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0}}, {{20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0}},
+
{{10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0}}, {{10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0}},
+
{{20.0, 20.0, 20.0, 20.0, 20.0, 20.0}}, {{20.0, 20.0, 20.0, 20.0, 20.0, 20.0}},
+
{{10.0, 10.0, 10.0, 10.0, 10.0, 10.0}}, {{10.0, 10.0, 10.0, 10.0, 10.0, 10.0}});
+
+
MotionGenerator motion_generator(speed_factor, q_goal);
+
std::cout << "WARNING: This example will move the robot! "
+
<< "Please make sure to have the user stop button at hand!" << std::endl
+
<< "Press Enter to continue..." << std::endl;
+
std::cin.ignore();
+
robot.control(motion_generator);
+
std::cout << "Motion finished" << std::endl;
+
} catch (const franka::Exception& e) {
+
std::cout << e.what() << std::endl;
+
return -1;
+
}
+
+
return 0;
+
}
+
An example showing how to generate a joint pose motion to a goal position.
Definition: examples_common.h:31
+
Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
Definition: robot.h:68
+
void control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
Starts a control loop for sending joint-level torque commands.
+
void setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds_acceleration, const std::array< double, 7 > &upper_torque_thresholds_acceleration, const std::array< double, 7 > &lower_torque_thresholds_nominal, const std::array< double, 7 > &upper_torque_thresholds_nominal, const std::array< double, 6 > &lower_force_thresholds_acceleration, const std::array< double, 6 > &upper_force_thresholds_acceleration, const std::array< double, 6 > &lower_force_thresholds_nominal, const std::array< double, 6 > &upper_force_thresholds_nominal)
Changes the collision behavior.
+
Contains common types and functions for the examples.
+
void setDefaultBehavior(franka::Robot &robot)
Sets a default collision behavior, joint impedance and Cartesian impedance.
Definition: examples_common.cpp:12
+
Contains exception definitions.
+
Contains the franka::Robot type.
+
Base class for all exceptions used by libfranka.
Definition: exception.h:20
+
+ + + + diff --git a/jquery.js b/jquery.js new file mode 100644 index 00000000..103c32d7 --- /dev/null +++ b/jquery.js @@ -0,0 +1,35 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element +},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** + * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/log_8h.html b/log_8h.html new file mode 100644 index 00000000..54cf7839 --- /dev/null +++ b/log_8h.html @@ -0,0 +1,181 @@ + + + + + + + +Project: include/franka/log.h File Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
log.h File Reference
+
+
+ +

Contains helper types for logging sent commands and received robot states. +More...

+
#include <vector>
+#include <franka/control_types.h>
+#include <franka/robot_state.h>
+
+Include dependency graph for log.h:
+
+
+ + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + +

+Classes

struct  franka::RobotCommand
 Command sent to the robot. More...
 
struct  franka::Record
 One row of the log contains a robot command of timestamp n and a corresponding robot state of timestamp n+1. More...
 
+ + + + +

+Functions

std::string franka::logToCSV (const std::vector< Record > &log)
 Writes the log to a string in CSV format. More...
 
+

Detailed Description

+

Contains helper types for logging sent commands and received robot states.

+

Function Documentation

+ +

◆ logToCSV()

+ +
+
+ + + + + + + + +
std::string franka::logToCSV (const std::vector< Record > & log)
+
+ +

Writes the log to a string in CSV format.

+

If the string is not empty, the first row contains the header with names of columns. The following lines contain rows of values separated by commas.

+

If the log is empty, the function returns an empty string.

+
Parameters
+ + +
[in]logLog provided by the ControlException.
+
+
+
Returns
a string in CSV format, or empty string.
+
Examples
motion_with_control.cpp, and motion_with_control_external_control_loop.cpp.
+
+ +
+
+
+ + + + diff --git a/log_8h__dep__incl.map b/log_8h__dep__incl.map new file mode 100644 index 00000000..7a70bf28 --- /dev/null +++ b/log_8h__dep__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/log_8h__dep__incl.md5 b/log_8h__dep__incl.md5 new file mode 100644 index 00000000..a4a6f120 --- /dev/null +++ b/log_8h__dep__incl.md5 @@ -0,0 +1 @@ +125eef755c6361efeae12c631c7f666d \ No newline at end of file diff --git a/log_8h__dep__incl.png b/log_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..1ea0462f0208bc803067a2cefaaff5a08c03bfdc GIT binary patch literal 18098 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 + + + + + + + + + + + + + + diff --git a/log_8h__incl.md5 b/log_8h__incl.md5 new file mode 100644 index 00000000..81e61f17 --- /dev/null +++ b/log_8h__incl.md5 @@ -0,0 +1 @@ +2625f728cdb4360d8d279f47bbc5ed43 \ No newline at end of file diff --git a/log_8h__incl.png b/log_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..6532e0441ab0b89bb97ca35a407d77ef5faf6a35 GIT binary patch literal 28286 zcmZ_01z43)+a-J`38h=QOIkrXq>=6xq#GqAC8R;RTe`cuq`MoWyBlWnel!0!bItt7 z-ajE+Zyu31y78ij$ zzx+vW&W(aVNFkCULdwp`2TLaEm>Rf{)g)hC=sZ$r#dmq6L0$&0Wr9faXwzv6(~H!F zx|db8bqE47GieZU}$Klu%KXe zF;y!2Xt{Y|czC$8GfNuki9}9rWOjCzsj0luzwh+r8VImElmq(GaZD*}M*Y!rN+&3P zs<%hdaWmq&Y~zl!~Gn|A10=Z{63jKp98ryIRAG&JB2U`qyi zdwc)>MIckw)AQV$%*SQcot&OdOh{nVs`)G|oM}V`mQKK7$@2ca2trJBbX{GYh^T1a z-@nl@F}L^ko_80L3JP|27rTRp1aIF8fBJ-pfw8x@cX4r{TB1EyYopgA&8*vm$K!aA zBa@`t;ueS&6cqIB`**E6+l<`Y?b-6LQBhG76B9E<8khtG_h*~Z&_74P$9Q;nI5|0? zf3~fo#U~~vIv&glWsTL?tQ>7`&sdWUvc#j}(=#xH6LLjHNBg3^Wj7u?+Z-@5GC~*5 z&dz>%dP)=UR8>|^=62Xy>-4u-Zla^1nb}j`-r6eBZEnbF0~>z0vWo!Q+wpr{HY0g_?}aP%5A6kL#nyi`|LqB-59_20K^te4(mV08R_rQ77p`hDv&CT7$pf0QxPs;NRX_7#Wc zr$-_l$2SBVArh3D>guGvJN9?r+K&$p%F4>rGKpR5Xn4#qad9^DRc3#GlkxNOi;&xa zdk|rFAY@IgS+2C`2n&_T?7`2^@5B4|RlJ`ahZ%Wt z(ZM4=`)KhlZvOlC-hM~k&hFG~B1c74H8v&&8yC0L`PAU??(*&1w`^=|S65e-#x!tn zaB2MRn$_kpO-)TfLH(Jc!FVHa(a~MKy`?&hHF~Wcii(QCxXi;NBP0F&!U$87lYg?a z9VV+*cXsj$3#BQa)Zha|)>qqoOa|jmA8xSN*H zcs$(LZT81ByI!j*Dr%M+bQh|X_V@Rnou30^Xl`!a+}yms-0%JGC-D;W!ofO3qD*$Hi42>y*e%|7VFMC^%S> zGP0tAZ6l+gfPMonDKU|fiYkHA{_b*rW(;wcmIdstFa!fjS4mYhXJQv@T}bIa$H3rV z_Eu{K1_pdjT6%g84h~gSRkoIRd>6zlLFk{h=UXyt35x~Ez{f&J1X{A1S!@Epxj#H! zuK*i-_3Bk*WaP_{KHQwzpc;;4iUPaUs5E}DLqj7Y4Xkl%JSi!u_iu~q>f$44Hn+Fg z!^<-=zzTyRvRF_tArQfE;N;FSl9FbNb$0hxhXZ|m`Gtjz-?wEA3=9gbULn85A|le! z($Z2^#sXIAtSBmKbaS%ik3v*XRP^rMJ6^kW*vd9UOzMNVN*ZS7()|40{h3m&T5Bt7 z>zpyuQoUB=?I#5#CCp#?Ykl+{JHDRy;{O)&_;EtycHC7Ae78cv!cKV&K z*xA{A(ZXQm%!=^J#AF+s-hUDXLZi2jPj^=rFCQNqcZgc4?%{m({?*|E zA!5(sA}=rRVt2P6MfS^wiA{yjH9>l^3`1S7Wl80AIRhJicXxNZ((3Q)%koPQ?8=Tp zdQ{P9gY6phG8yS)Hp?4iWK?3_o#SI>GBTkIdG(O@ufWz7kqSY%`G2OiS*Srieo2U{ zh}QqfF8`em|F4uaDp`XG>?xJsJ;({GBd3KpDq5rrjTPk3SdjmGCnuE!1O%G0OoK_u zSS7@aKfBx_b2qo_XQPP(iqO3+4)Td8|D-S$DiLjM-fwL=XlZ`;Q@?DB1l&AcQuVh! z9uD^9*vhkqtZYK?K>X$Y;oU{V?l-eq8&CD78*L#WQg{kO@o(Rrvc&UINphMzpM6Bg zL4X|{SL_{E6qlBc=#6-J4wB#L2n9Dc7b!ehii&5spYiKGnwPwwmL9o#8HDr;^75o5 zZg2>aFbI+~Ra8nd#*&1`YAVJ*d>|sHekJ1$3WUlw2fdRfkCb|+YLx*Ja7nO|rzKCKECQC%_4$~I1p zk)g*3(hZ}8JZ$Goso&3^tWHO6@83^qw=P?E_zDrOzPsuc7Wafr{%#5-vOgM!_MTw7hz!}d0&2-G@SScy{r`BXzJIf>?zW* zD9ob`c9Q4wj*gB8))o`PloCcov)$dB+uQXA7$O!fEWB4@4JbP;Qz+QLcS#UbAxV2Rn;)pDtBE;lTfyA!1!K7_t~+sw%5 zP+aWL8%FfEQnnxLf~GePR%%eV+)DYzRU9*%Qcg&dvt2}vF-a2zGy>UVZg@!Lxv9za zm@@t2Qscqw>?E)TrQFoM0ci!=d90wC>PuTHD${k~7Rx_zu!sY}m74F5dc*61wGwd5 zA`|3zJBbuu{=1%S*!bjuQ`CweVSFpVD%F)1=4S+#e^M4k5^`A?q33_*k>a}1I^5PL- zU+Q0&7F*23h7)k29R~=ivD{CQ`;L!$@VmuhU`ACK_PHo1jK{OWeEwWTBR5U(Q6BMS z9|iN;7>P?HkLM}RpRAdK9gc|^ z-Wk*UoeK>S%moh%wYdq7j}H+!bbms8y0_Q-%JQp_b~FkG7K*v)P0a5TMh=e6wa&>j zfkF^uS=kB9!G0NYV8uDS0Y$-T8)K?Kt!`@sVrrr8FxyAJ7r*kJ0p- z65fPftzLrw;AlJQWILKWwj(JyS6-eE0w*prb(mEfUXxT4+sNqp~ z^9s!4*-eVV!&TDw*_`3KSx3FSgGmJXQ~9LBLuFj9-WBHu78Dl`{#6bMse&zx`T&90 z;!x6B>KC2Vx?V3mJOlxMySbCaX+i(`3sVF`^`uh>_jnfmB+W zh=734G!q7LA^1D};ngpFkd}_-z8^2trcLA$fX`2l?u0tYYlGJD`O8J2`_(%>R#uqK z-#>r;s;&m^TT)ZQwwwWiRX8{@DL1#f;S>crx?A90FOj|tBHBc;PA(yTBQGjS^tJAr zrKP!w3SXsOasDnS`d>lNtZhRrR`zEST(6gRCxi z@lz-vzILS}BjdJP|H8nqBpLPVa-SyLDIO#Tmr?KW`9>!$@cH0yxm@`wPV3~%($X*| z5ngas-sGIMyi81t{QQrn8_W(4GB0tRG@4ZCcI3a463ggpnSMVo-jlF^Tv8$QkAoi7 zV`FLO=M3P?Qd#uNKuQc9vSri2cnNIjTBJfk2pRudK2p%FAD?d*A~_DQg&+nA4)oCl zhsp$kGrB$FNeN@Un^L5mrx3g7<#`VZo1oOx^ncrGgxpxJoBf4QFwt)ARzJ?xJ3+$t z|9>T-c~#X0YU)p2-5DeJ5Wz1Oi?G@MuY?3^*FV6*Z>#mwx7 zmZ`YQX-!G=@gzMx{Ts+<7Blmpa$hH+TR}weXmY*gdwckNbOx&RuCAfIy^i`lv>k;1 zEmt~X59c=~3xYcReUzihSLDw-b7Q3JQ zd&vfJX&%M-W|N~kR%ZDYR>c6<5L8gW22nYmYrdi$pHWA8WpnYxh{+i4Fu60{p#JA4<{sQhb?Tr}R z4Qz~*=QR@#2ge6$>f41{au*jmB+-}3wuZRm&!lYBzvbrZFk*LKw8*F^Zb!@Iu0S6b zVm62%9)hFyx1+^#u*q6{bmYS0Q!0FJ&PVA&QgtF!w!NWiaEk zQT4{tD2cA^5l*26#H9X#eX+2`9trsXk&Ze$A9C{8bt0@)3&y*t92{&FI{N;^L=;d> z5pjI(p0t-6kfRC|nVeSTcNupFA(0T~6$F7$NJiekAQG2}S0*>haRV2dYAD$ZR7#f1 z@YLzrI^i^wZdqeHBIIPGU#^NYzMh03AiUxxy1!w)9?P2aM}1Byt*KAwu?+o+hE9ea zXgUy^pPEYT+>Ho9`v{$oPD%M^B;mWaZ0^`Dk@Y8X^i;luylgmu`B@D7TgT0QX?t#J zda1hy7n+1OQC(iL4D@6|Dr%3>X=O$B~g(T+e5Fj zCl+*J(1im;$b$j{(GUW}Iv*ahT!>TB6L~el%dsN-x>^3p3eM2dN@Qn0T3$y5>LYZH zf>tLd#}xy!^_-sr;?;&;7PzdW^jcfz6DVHsexV1#VgyQLkK>05A|WZhee3=US!ry1 zFDrk}1niW|5WjOT1B;Ykh9Vyn3Po1Q8tY>?j6B%?5f_$F(e=ru}5XD0wkPr{%{k_*laD-x#adAp~{NISox{Fq{3r|*4(fB<# zEuE4Q%NBHg6o@^};`(kTK&$NR?3%7pV`Eh{G|Vh5L)0MY@ZQ|0kkxEi8d~u%Li`Wr zSm*kxsyKln{lmjz2vgJ3pyx9+HT^pTj__(6H{K?r_L1AGM zpR1#yVx+%6{7*pu=DriotE+P!PUZsmf&2Ycih!qwiwoCAGr%sAIBhuC*`s1&n!jyI zU8BZR92_13m=*&ALzon;#&XVkzRS$UMvfFMKqM33MZ+mP379+pPqkTUnCj^8{!ERE z&qhg2oukrsd3iYjKw~x|DIFahaX(UD0667*P7tQVSV-0CIy01WRf@(XtCH5EWdm?0f1x=2a!r{dO9g1Bcqv_8Is@G z(Nd%1HQ1}3bxI$m)imxAkH^n4GFDop^GhvDq`??F9HLeI&ocnn{YN0>iUzn=D z23{hU%G<6^&&-UAi|hIP#J8~q@F9So;d%0KbI;Gu8yg#|s;J!F-G#mV5G0nRkH_J# zHyMaYlk?{f!25iCeF227k7sOZ>by0GZ(I(*QAbBd0OAUGJg@*@va<3kufVr|5=KUw zfCx~^SDyY!1x$p7rgHfgk?eoIT9+*6DvWe>bqD9H0sLO7 z+YAnEq5gX=F!U5z6JF1?4nKg6Qcz@d2jf;U!FI9$Wcu%4i6Wox1M7x0jn}Hr!K%IE z3T8b$Jv4HuhIT=kI9f_dpQxh%o{xv>?(PnLI=GnP?cEVYBL^V7tAjc4pTWVwd@VsLi3*Ky=t0w4R?X- zVN3ZTS=D?|R-uu!PF~;I+FEhR9t5ETSSjAGdSG3yu3z!QawhkCSh6u zfwXeuP%(yb5Jlm>@>Ars(WV2mp`^bZb3 z$HqQg>|zE#I@-s-6Z9shbs+xQ=ux9ps&4tb0GplF(7PVWh?=o!Or&zGYI7_s^9vRZ zA*$p;==9_S;q_~Pd(Uk2h64;4favWvgA~5XDk_Mu&_4x9BP6D#rsn?hMTudy+V=Au z(%{e#Hahy)wVYWjs2G~`v$(UTQM10Gs`AMdYeWRqzb7#5D|jojII=3T{mI~uBFH5%;A3=Iu6 zG&Dp+d;1dG)kQe~?#7`qcMn)!& zP}kI)XM41>wH*Zn!H7%9-bz;Eb_iM@JxSm=zDZiQPk_TkJ- zay7LXtA!eD9Gvmpi?%jF`pfHmnB%!halm)=_ZMVldOMIQC@6&3Tsw|1?nlj)#Qw+P z{l>ZJRmH`7XJ>D~5_-c)oSd9+v9XO>y6SY<4ULTp^79>(Q_zG_P*BFk#sC6d1AL5? zHNUjfga)q-xvBKL_-dfRqo!ExU5(8>ooV4x!^~OeI}~uh?+Q2}Uil1&ND&groHn}h z@}uBvao?%8IV+6@7muqTj0F$$^YImmi=@U$fY+O_nCMKrq z?U~V+FQh!j80hGTuU`}JyVcd#yMW{%?kAr=xwB*H>gwt%-?&}#nx=B|IWy+y!D1e# z(SCOv#Peq7(~gOW%FS4?AK}5lh57lX*ViKh1K;iK5AwLXdwQ(rtLQ*1sjp8E%VHhI z5dI4oyz%kKlspLMNzrg^$N$_AlT*4cJ9$UdZWO`iqu(mS3OKzJ-w3|eAv8W%TSLdi z1q|c|<3YTwC=ljIxb5>mii?aK55i_xTw22S!2rZzUT&_**RSk=$ocb!5_q5QXoJH( zFa%~gy1tzWVq#(@3JP|EE(8#GR8*$Uw@1FO@0?`h=hxe;@T;k*v4JM$(!7U}#StyA z3j{7UkL19BfGRBsKo=z@zO4*xSo*#&7d5x%IVKhN{J|>N!QP${BXDbLDH76 z3NSFDqEzqR9e`8;n9Dq$Jww1fF*DnMb|XC<4NwP{dn$m5<=B8)>>S`;K?=T`vj$<# zbvg~&S6T+(N0F)jauv_Y{bBzXk}1)0|tCq3)qIbQ52NJ{o4u$zE74vo@V zYa0r(1ceynB`GIIBH+Qhtnfg?!;>`ntFh5_fie5fpR3~)&$EAhu}fc}ZWxJYT&@b= zL%a&VlnahB0z%fZhQ{f=@L8unDq$#sm$iPY6bz&eNmCxwFJ+K`|D^>0sDu+>CIFlR zS@{VI_wwonkAd~_dXnPE-N#0ah5ivlHAA)p3eje_+elV+SiRfJV09hFv0T)_1C)>9 z0{d=Sc)t=8MJOpf1j6|_-*ZHYh_Ye?E*}-Ds9=bY>!@DghG&`QFJ*f|(Bz-v(j_D$ zSg5tIL|(3m*k5P2(V&N5qM{P`{6MFq%LJODEpxZ?5kYX~RW7eS(xfSPhTx5@3|S>dMMe0E%+R2_Jn??LI{3=t`1$%I-Ttci`QiKazrH%H+9vUkoqD~0 z5N5nzetyjt=Z)DV%M7%pB_$>1xJU{L8V(OP5BW-$jf7$j4xLYrVID!^r?o?SZVo5wzt_jzV`DANKO~*l@gTFnLMt7uZUA84 z)HFC#T#1cMmlaB05Z9XurYXPWPJ$Nu1Oq3G}5T27l53sX~K z0S`dbMx-nun3<_t!F$Pi!TPlVng$=^?4sSrP({V>_MB!gfgM1M1^3(^Jd^cWCd3`*LMg~e7#ucdh%_B8bMr~dW* z(ACWm6Vpsy>IMzv`L_Sv{YWC;Lfw6K3RhH_!~W&@_H$Jk-t^-*#B>Ir^3t)%rTJ#O z&Z7?Fltf|CeW$Q+WWM^d`AVlePGY;e`9%D@YD$%;`-kjoK{iW2oDMY=9Ub#)YASp> zC1`TT0D-`ThXE0W!N6Js$XE(Lk>{SW+jsV%v9Y#+0n1fEs<7ki^z`xh`ISlgzhhaR zwgrPKg-qh&G~(i=zg{z}e(X_uTJc=r;2?IsIZ1AD-~6b;#)*OTtEwuEK~;Njm}#lT zDlv&b>r*Dbdw*zvv+Ma52({dwKFPqtKPIpvV`HT|;XJb-wW0C+?r+vVp+)!#2Qn8f)sA~5v#ACseoQE!bECzGCs z!}XDrm6g$OY;uYYx62t6AljauDnDwm?UV!P`uqwdDjMrGN-C#$GS?k&U{4g-t0Z}1(L z?P`0m)-k}`s_parf(J}l%N=u0H`C+e4N=1|xZ@HlSc&9iBcz8h~+>+@EH>V`15vuddb93<7(slpD6*PTF~JFy0ph zLr8?|biB1*70KdCu+x&5*b~FR+})E?q-RrWIY)VP7{G~$^hu;E37LRgJX8@CB{lcY zWK7`vmtjr_;4Cx2-B(v>aG9Fq6(cXNYJj=NbDopD|Dcd7%O{dGR=*?;Yit9vbg?Pj z-r;BRmLN$kIez5y)S~!=4M5a@Rb$q)uPHC*qBMNk8Pnl?AAgQ~VfZ`UR@B9136L_f zDL5}HR*q3YVFnYux75anAIoa8GI5i01CMn-GdK#-OIxjCK zg@qRzrw2#rcx8bV0j{l3P0!_I_5AMAQ94f3KKB#i;O(m)q!RKUi)w0i|3>&{WQ-UZ zQ8hI)f|{;(U=o(het-HtTbenUch}m4)0@-PcWyz@L?Qp8+4Y!+@9yuA)nbVby9>Li z-!&qVFhXb9>S`}Q_bbcCUca%AiP*IsfPc9I3b?~Bu`IoYi}4kKyBX%h+S+XYUXf+g z_MyRd3A|iw;5s!{6VCN|@y*C(rN9r?I@kd-0R>g*lEAbYna?Uy`GJGT(V3Hu*1FP=7Z|*#>TCD{=79ZaT3UQJB z-G%Tnszf^{INYge4n~b{OsuD_wkIUh)16#eAHk;hqS}}3H3S7UR9lp4svj`W<=5MN z6?MMBAgqiE#>Fhvado}eA*nN@K_Ej!9K)npJU^qav8)f1hIozWv^)S16*DL2696+W z2iGdt*w#&kow<3!b?Z(B0fYTft1geWuV0Fj*7WH9+T;GZ@jV9zv#y&*SAf;>vOZw5 zPCj8Fkf&a)V7z$5yx!nfVuxqubIHFFe-66Z_nDU+87t{p{%Y+wY8gjQ!K7pa?w#rTYEpWm80!9`we7=9>!$c;?qfe+1RDE zwY@htvrDu!IyQC@L6BAmE*#YzwHUTyk*0zd}~z_I#3i zI&eU!ti4p%YsG13_(jVQ)!ET>v&}&Q^dATrO-)F+abF}Q#{vS3>XMnjvQKCvlN}EhmTRF(3=zZqP}1o*TpSkI148E>CwZwmj;$ zdrv6k?xk^Ww%g1hJ}arHAfW0gYHIGU*)`+`27RTp+IG{bfZcL~`RIic{X8*xVsSWM zSZm#^*EsDs$M%|^@F#e;h0&&ff$#iWrmfDhc_g%XQJ7_3rKH=)b@Xtxq-97J1EU2Fj_={#M*Qc1ESfN2OTaTg|17iLg?k$s=Je6)Ya}2p zhWYfZ`3F}#IRs2-yp2FLL&TGFyx?^F^f=<&JB|WKFXKTk_j_%A&t-hV2OvV*N&K+( zIPad1llJ|Jbyt~nEaJ}9DiG`O><^(18lb>JA^fVME^&5Tj zuRtT_bW}7swsuXTc;Gd+;4A3pxLai=G(YdotgTK-%f5)94e}Pym{nH3R#rQ9zdbW( zZ}0(^{du&XfhZ*;lpQspz{(mS9oM9+d}EM-_RHz`+r`DCW=$-6&(5n?4Gnc6J*+G! zd!|=44-ZHn(JVK^ZNwSK0bS_+s;z{sEvJ@C@cGRchL#n5D_tOb9j~*rBnknKI7x_(s8=Gdj)yUcoW~<>6)3QtEx_qB)~+~pE7e3X*FDQ^o9$NQ^e)xUv}^$ zub7%=^8dKVUW!A2eQz8x-QkzRi;{047OE&G!}#$#b$hoFuoJxHHG99hx`2|B0+1F# zjS8w7psn%tA@TQbWunUm`c*G2fpi_dLO7sF8y-7F5Z>tt-E_N&KmcU3$p{~POwWyq zzG>d=rNx>Ld|`E!@AsY_&!_tD>mtb+8C!*FE4%h@$V5odA|sy^RdKvXs`(~Lbex1g zZFF?TA#_1P&(0bmC~B*Dic%yfj~2Gy3C`K7s5JX^dwku1YH#;kC31M;w-F+g4A^4VsM+gCA-Bdf)Zk9KlW!J~wfjpdwit4vO{4A?OK}#O(?&bbF zF-LDS@(2XbG)k4Av9{1v>wa`S>DX$7XQe5vj@R{yFaZV@TkZ_r&Y`%fBu`=$tw z+OXVk`E;a1cI)*9KeNfD(p_=gmp2!^4XMz4!F;le`jU3;+bv z{*09Yd7^Cyl08sOuPoe;XNu-jnhl&=%+sT)M$NMx;ZQnZnECiyR2nkr@oFsdFwx28=fluI8&gyB z!`S!}hfNF9g@q>a+du#Id2RtTG&WX9hjmzKk|q~lW-(utK00cGjqMO(MJ({7s5Ie= z1`6THd=qvPVmb!Q)O$U_8}ZY+#xyC}VOJpgOD25g5b*V*vYtho+Y6!~7k&xSH)RWX z3VY6QJ$#_A$D~OGGD(uoGF5n4QZ(J>`GOqkWC1idX+_215PbhyOS_wMxpusW1=a8D zGHOoWtr#m;sMa1_CNC??-AULP-VZG;Q-fJvO=DxU2H&}x4*h)mE?0rNRP z;>WCg^LuWa~a_&|{{zURI@TriY$*xd#D1-a%3 z$grDSzIUhc4M#?14z8sGEocvN-GEQ)P*UmGuKJhs!gRT7uCG0LTgGpNB}9Dx?U<4V zG|OoMDNRm&g5#Y%@AA)8ug|f`JWh+3`vaUdH8!p=UQ*ed9~7P+&JRGm^fmq>6izjW z*#8q|tkpvS0Epc@zgGeRCG{6gf!Rb#_yY4F;n(K*X6V_pv5pS?b9Ia3Xm$;pZ3QxvjkR}ZkJb9L=hT{ff6)NjoHi>Ek-Jde+hDI`w^@|yY4pz z;X_?R1Jtp)Eha(IxOJR*53gc-d-(PUDp2(NbN}L{SKngSHb8BAcE?MRJ4$hhp4H4+H)@r1h22L)(nJ>0Q$`E zn-ea7QAvrlW!EjdxQ513Dj#ckxt>3YO3Sxyn3XRLl7KJP)^6+BWOM$JDk(ecd1G4~ z^4b5ChMF4C9A|6=M}PbBk>5O6>SwSy6ubg;n>U~ng4JN4Ge3RWh>Co|=n|4#DiR1M z!Ch=gIbRq;fTd)T)hzoGP{ScGJkn>QKEt_;ISiZK(9k|QY6CV-SJ&9GCA+TfcYG!Vpr!t4BES8kz3MqY9K`V|Wf z7|Dx{jy?&?oB&~9ean%Y*A3AxbI5=lOj!WZI#qPaJt*iXCgwUZDfkrS52m_aT4BK+ zcnHuDQwMaqG-!BYVdVq`R^QnMRwwRYyd-M`Sajc=si~2@J$`!^CqCHLO_&ZB1~PEM zDPa!!R4ibqgUPp3s#LeWrKM6-q`{$-k&4Ps>C~2TY?q&%{ogKEb6wq!QPTE%ZxiRc z3%X@8dr_bymq{w&;(l8;EQ^<%oJ>wm?u>>l4n$J#zxLoaWqp|eV_zmiiQPX4xVZ8G zNBLrJU{y;E+(c8m_Gq)rYC15roJe(G=jAwc^xz~ zv9jtkAhU>$1wY#Ky!q7hX|<{Td#}f>;_pOFFDFunZ7Q0_2R3dw#LaF5NJ&2c16|kv zD@|9n*PPDseo|RUDImx@30DvSQQtc<{zgZ{_oIFXX%h^TVB5j0otCt;-O-|*Gd%RH zC@Gqyl{l~S?~wmoRi2s_|L$%tGSYjdI7LWL?|HpD*jfB%B@pZU`t=KGBJ5@*7#E+F zwGU*?jRU@3U`)5?+XMamC?xz%_t}U$xju#ZO0@HUfRL6luT$o4xhZ=B+YCSTiuXw#($(X z0W-@kf~u+ptAg3l(QZvJYe;J)0!vLCNPPOz@?bcLo?%~~OdG;YMN2z9Y~59+pR5N1 zvNlrh+#Z;Y0#i_-p`oWpUYx&B4zD+*$(9vt;U?2kKhI)d_4H$%oh>FV6*e@?_x6HW z7il3OkQ@q2N>IrDl$N#v&JxLw91yHoS?7CGgj`^wT92)&djIK; zRvH{E7EBWss`%PsZEUWS?W-CA7u@medUHZ1oL5r=)aBxUOx4u|#4?!O^T%HR16hEp zG&C|Q)vh1U-#`L0Gl1%ijRj!c@p7}pwVp>WD?l?Bq%F1BsKZoF)^jGn}kJ1Dgylu zpo8_m3XU4*r(JtAH%quD~WS594h^Vy21sVZzN=iz4dZhn|M!&vJ8U3%C@%joSavkEaKwgT3QQ(gM&cPrKh)| zkR>)|`d-WuC|pL;1acMg4+vkMAA?g?P#6PxBH)o-U0q<7t;&_Oh|lHhPhMWYQ0S?V zg=<^qhO)^Dm;nV}7YjqNj9Ocpo84}+M*`Vaa65Urp@dv#9e%IDo{EWy0pXgl4#F>e zYHI3;hzPuem_JjW09DPy)A;c407&Baq@;zpxoWH&-&d{R21&suA+{kBG0w8 zSbDLbEKpNdpEYOauz0N|FexQf zF*St@3L-9b>Xmi($J?hzS2s5|TU(%690$|v*9UW*?H?Dq8;;7A;$Zis|4?+qrURL2 zgoFrFXx+f@Fm;3k3_ObEeI&5y4OHNWU^E!0-L^V^{qmgo6#jpzf?Ql&hzL3j>Cq5ob?9Hq+I>~8h;FEz_Z$C6e6&0h!3$p*ELJA25ygiT0djzuo zTLdJoudBvIyOR;qf&N?Re`x_?j{ZhGy43W>K4alvr)T|exVta|=VLSw`&jcEfc$dF z9~D$pYm{PqZ-EF-O+-XQNh#{ob~IfmghtD%$JlCZ&tFqp8;fjmc9sGIYk4NEsfian znDNg;4>)_SVaM_k*Mmu__B)K-fHEpt0|WBMyFMe6??%22IXTp!V)tMpahJj9>%YCd z2A~uIayaf3Vmv&F>?hX`WEg&jt)o)n@PF5n?f-#P0H)}Hz>9$UVr8rh44R6NmseF) z8Fi-nbhc(G;4zx(tgf!25fK65jRgp_KumXc_X7u>yl#Dce7UJlvwl1=j>qUpsX-nJ zO&G|V#(dEUvwnE@NE{geL*A(36NN%No515)aR6ig2Lz2aKWisOUqgE^JiGH z$xoW{&U&7}nt+}!DEL{&n2r6s6@3XznGPO%Y`r?@og1U_b6DEv@;&qpMjM}09{ju7 z@0|_a4Wi>~oOd^1mL6zgK&&}ltnb`%1>^ZU_6?v)iI1Nhh+~FQ>NQH)l z887-CYEt2|eDMkl>;oz^q}Q*3z6T6{1LwZKwBQ@f&zfJ~-313cw;MH1H8iB``#UcW zO?O0NRpSx=qwT6MB4#YJo-R{|{vm$4cJ+DI40uXE$ci(**Oxz}*1`<7a7!p!8pxwBHj- z0OXpWvMv@oO$OrEozV=S!UE+igKCkj6CgV4fbl8;=K{0VaBzNYZEY_T?tlN5eMEzb ziM?WHJ-uJ=Hg<*^okMC9p~L`k(mvA?G<0;c+TXsuuprqRQ@G5~O9E+6NXTFSIt3W| z1@q4!@~=21g_*x*o|<|TMv#PvZ7LD~;>qgjYT)&tG)UvLA+F2=qxG?|v7m97 zUs!O$5}aXrI+*0k5O13&n57#9Rg=9v?*mwY%#iHo8C7lV4<2wF`#9-is%J`7e?I#6>$o(qbt z8tf>{)`X?v8h20X!SAcsBIU`5OVi89BoBAO63!N%B546-T~Hpa*`2-5_wCekEjEOc z$dnWr)6S(OqT{*~`^!Cx7YHZo6vbC-d}887v*v`w8yTmTkqJFv@?9~!K)_8J0Wc!J z{o$z?3Mt9f2!KASB|SfX&Jl@JUq{7X1`x~fTob=P$F}jHwLyWHK02ZF@{2+~e*TCV zP4+1|G!z~dUZ95u4RWI(Ec`=regue99z2xVuFWly*w})Q-+V!IBDM5o2kc0(mI*Fy z+||E6HBe-G9Vc@|eX->I@&a_jKoOp-eL@Kp<78dVSkRbkDP)-Kc@FN4W2=U!+?Yn=yQ-?FZrurL<5 zK0FrgOp{x}?rM7Yf2w|jWhmRYxVX8AT)pPzP6LB!3CX}m$9rH2-vnq&zLcoW$^cjJ zcExD3F*1sAyNhmg*jEmV#=*xA+;~qP83`sCDt0fd87)Y6GBcN@B?A+ZP&gPik`5IkzY`}5sG>pb zqx-5ym5IQ@|Aq5s_p(6;=ixzh2 z@7E(XpDm3~M~5vPyYuF4*EIGA($&gl_h+(C9_$LbIy&b9&u%+QS{)PLX%hx>593;k zZFs34UKmY4h04l`6A>X_A8(gdqC&!D;!nauLyrJE0)C&%J}?o$plofc0eML(n~`De zvW1POEkLkZpDN920kD-xTmXV*Al?UdlTX{b#;jZKiA0LUx1i-21xG{6cIdL zw|H|40$OTn45GsU565x3#6)-Nl`DJ}!LhN^6EFw0_&@qO?|7{K_mAIJgplk__FiQR zAuB{eb~Z&uM)po+hwPnXWp65*?7jEO-kaa$^ZoyKKhDFWKkm+b-sgSJb`p0C$6 z8W6sA7lz)}Vs-+M!tr+4(Q#Od2oYk(?(%&)aiE`%GKgYpuUi=97|)jJ!)L-6%IUyc$K+xP31x+sfCOwzAUI<(JUc z|F^f)?BsM`R8$!Vr(boHx6x_0=_mSYT^AS_WIQ|yp+K@R^GH!TGn?KVLE~@1|Ni-4 zPyiNGr83#RR=iVA{5lg5c#n~RVJ|^In*tmAiFps>hY#WKlKIJ*#uswPeXT3~jX^Br z0?OLuukmq@m{}EsLC2+2vmL`R!pEn0aq;b5@WrV5SL%aQsMIWOh`v--w%?uK2OTBg zH4$GfE-R@J{*4nAW1zo2I?}s#YE=Z91$0OBt^3>B^!%y{b{>=L~olkRXJV$>xGXPHO6W+g*VZUMtNo zYnh+rRGw>*AhjbsItnT-R@lKoM^FU^%MTB3@V!mNpZ0M?eqys;n)#hsU0Zu*QfWcX zMG*6j#|!m=#W~5}B6vtd_o7~#6Ekyh5mMI0$Bx~O^7HeQZt5Q?ETN#lAtZXSCyuxp zSpW{GceDt_*mwkD!1yRCRBe&A-y&uM&~YO-H)LliWtdD%2vp+mUCxir?=dZ3Usl|I z^8O_=O9T%#8wcTr>=!8g09Tcz*cJW7WH(fXrqANQ+uH(&B*-#<{H!}%Ve8CfvC8}S zao2a|6gVa7-zb!nyIa|?>xb^$gzJwVFUqVt&Aa(u7B61F@}G>%bB^*ZLiYf~hal=K zD+A8;XKq5qJK=Ot(&OPD)QFxRO+`iG8x%JoZ%d$py-8BSL@?Z&r{^^r6Dz)M#Kt7! zjZ(Nz0oQ@|Lx3qLh31Lw?wa*yUV@;zRfG;v$-u~{Eh$MB>$K55fAS_N2CB9gX_5Fy z%BmnLzcEc1V03f()^aO9^Bd9V_^of*#8WV3L(v9j#Erelp`c0)_}$kxJ5~|`mBs|2 z{nhGsn(P1GAC!(sXox&$>6!33k;R|u-2KDMCz3x34}sLh!iO#x;7WO{+naeJ))kzj4*K!k1pfPZpyEF(1|BDkSQAzo*4eBT7R|H@MkjZ20v@!k; z)TdP2m59~SLIW=%;t^G5UG0lJ5f@jTYz9ePuASyjpFs<6J1JC z1csxjjPk4D5ZKO~-T^3esgtShec8L+S0z7xHuYs(LJh91o3mMj6EPYY9xe`;VLh4Q z-}4D!4p4Cp5AtJn-~}(6#mA0lv#{(w4qE=xM(G6lwFj7Y@rnXk7Z>pTw#zm>RQ=LBm%T=1L zp>pHa&7PEfY`u$}9fb}7zq5P9C}nzLUEy}rZiKgySGj}G$P=BdG_JD%z4J>soo{Zuk9{F4F9JXNK&K46)#P4 zO1~STy`j`VRV?HBj`31c=e+*vb$&hT(8pIv@8+bepQU}&z;axMtHC&_JcOsFXSHqs;j1u4Qq*c1G-Y1-KWXlVEW z>7Vx_TF}tSQoKCP=A@1f*JoOVIb34nw2AP3rgU!ByE=GCc#93Ulj_}jV}XmIDy#71 z$pcoaW%&NP3zy2kmdrO31=W=oZWHCXr>76JnC^V-m8PQ?sOabl2{s~o+n+ZOl$=bK zY^`c#HSHfr<>0_KR(F0sZ@||X5ElK?)ej|n3rCwISXiv^BUtyWhN!szYCV*rmy+i~_lV5{yruKJE8fIsyVVQLI zYXlLA;@B7=xORP2+6<^LOA>!ep2{y!!KDucqF*aLg)h`m8l7%E*Bs#m`A3cOr|u*j zLc#|QQZh`h?iu}eHb3R&wr@>QFRg3~dYq|~JvD9(HAqTo(5}D8hA~TKB7gSDR$C@Ry)@J?-AyXLtT5V7E2w`kDIvt#wr7h2ep0 zLgSfwzmz^g`94)0B9L|?IBcA^d9&Z25f+{(`upJOcwSQQ4b*MQx^w;Q> zJMJcuhiXe(raUGsZ2@e0dSaxcS?%qvZpYtjW<00*)n;a9hG%A4rjmqs*jRn~e$AC? zXgsK?3Dd(J+p@Vj+8pUg>4Ai__4$#jV4mRJfuZIRdr=M!NOV(~7FEIk0|QeV;!P+i zYrlSN8XWY6#HX}OSCg=ipfAqmSmmyo%SkY$h;L(Kws8_&91>E87FfCM99JA3R}f;# z2nj{Ex1Y+(t1K*Rlag7ToxMCipMbv$r^`5P0kySOB!NkZpIet5SI31zLMBtZLVvw! z4*ptD@X}eJAwQoS_fk|avAp@yz47tt0zDn$SLuH5?BD)K_bstslE=y3{1Y$)f&JCI zq%LV;?vXbFjZd2HcVpvVW20kh=xJ5eP)-gSY;duIXaf$(S7(&GBdwx2WmNM4EiN@Te>godC zWZ!%~ciznJZz}9YPEKrM;+FC^KBlG{aDu*k@$HN)xs5v7+}t!V(cjuS4hnP4^*SU$ zO;y$PSwq2b^N0+yq-n=@Lo^t#N+y0L8CT?et}~JM{qdu}`O`IW-75wuyv3cl8RyMv zLj3t^^PW}(1(Q5=e`iTaUW&0j&x#<7Ah92MO6-7f)2}k zA|k@WEM($%sk2asQcw+7R}H_1DygB-wYJ6p+oP+mN1GJ_q}Xq`xD;UnF7(}@yjC{B zFG`&3kY+2&Au@t0>*2K!X*vtb97DnIm5Le6`}cd^yJ}Mj6}wXmHiiWj^BzH9shZqc z9~r5xjyFuA5c0#>4E`WUNO7?caX)SE@H|ZbFSQNn*5icVUqKbkFK%#hV7Wx?MexX7 z3o>+Qjp0%E8e3cKI|%qRHE&f8Abr2M0G1eDycr}S1|Vo~Q&__Hs$BP@1F)u!H%`Aw zBX5@DPgbc{I&HdITLTmu@thTHeX%WTm!}jRm3hx!30M`ghi~G?mb)BYz7*!=RiGAU zhjPYRy+=btyEHm_28+5 z^|x6CWEo7&HAP+3o@r^Z;nQ01h1ZBUjPpD6ZhK6!vFEv6U)J4-W4+OkX;CHV@qO9{ z<3z`Pb$m3lDOlO~8(vRR>pGB@#gL}yU#Sh|WY4$a-$h0yZ%rrtnS1Lh>T@E`8wW6@ zDl-9Q#Ny)Wvo{JBwkxn~0E*W&#)-o`Ra4_R0Tz}sE9?AftCzjKzT*MfqetskkKJshI#S?}1_?T+=lu{! z9WDdY-JMT_xCkHq}uNAC6hJ*t^mg8!fT6jQngL}R!F zO|{FegRN~2Bii*+tT|X-cqI8>e59bndnjD2a zGbA}WD6MoqHMsvs#{HsBuf|5N3je{I__&kygM&!W1sR)ULRBIA?ChQg+4=Br_wh6o zgC;mpP(n&eLoAFBxEe$!e$GW^Wc2lAu=PsLy0oldZEiNq+t)DEVK6Zkw5(uCMn^wQ zOKTmUa9!<9j*k~WLOOq`QzK2cI9a8^XQtF5?1S%(FioG`4{&uIQb~R;>h>Z!L1(IW zCq}}XgZ;a*a!YqNgw?>Z2X`FDq6{J;%%h_A{iU9ztQe6f%Lm)N<&IpYnVVw*Dk=CO zese1qE{;>gI^54ce#DE3H4p}$P4Bju^tXgi=jn-9`?qp2e^26LQl`gWTm62y+e!qX z2*bCj^}62ecr%qI+vA+b$7TZ$wYf>R)@k#03KzI^QBi$^Ng1yZcp!c?U2Hn=c495F z0g|!wjAnJK%C)p|h=^ zo(NYfYV#|*lt+cGSG7>yA7@fwovz=cj|z@rBCo9Bqoly5r1&gh9PS<*)=*)t!kWUh zdPyIrlqfbq3-?<5ecie6RKy&->Kh5{k?+a z;a*>u7%c6n|m*X}KbZ)N30Li0b7kr@l;vY6nf37iI%;SBhf8RZ(^IPM|zk!UlkFf;iQnvG~~Zy)Un ziHp@_xZ1>Myotj8eeIX$g)U;yJs10(*(uMy+o+AbTT>Mt z9{Krsi8d22WMr>wj|;L!Ll*WIw?@C9#9lg3KG&X7VpRL~`}oFb?~#wvO$BeN7W?^q01{ zIJHZ9aP|e)B)e1*q;XQ27r{-FaCN=N6Qrf`m1Mjp@ESv_!sdihH9ld&!`-RQV`3=V z84JXp<--l{*ktw3G(P_*<}FW|v9Z$~B@dQP?c?8?zVwxf$QD0`#SXRmPnC;sB}UJy zs+r+@2OgzGz``VRG}k*Y7NKp8fe#P0aNV6Z7B4 zkN<>4+}cdi1JH)LLv1W`Y>kZ#-#kUhAZ*c>YfJn4m-oOHKNyd4ldJ2sVMs{6zJ86c zh%5d!DmOL@8(U_U2d(K->?>M~dAQVyi{&X)K4+p}`qFg9QY)%(MF@Jw$xm>GXbtz;uIPCbg45NtxN$L^tU|gaeE4Ue$r_(COips6vG=Xjrqz*IyluOhz#c7}QzOL&kmd9gX7?i_kZ7r#EYK_@>t#%fj07s= zYUW$66n=r=}r9*It_C)Geq zwV8Cu=@IjmqyHd{aZ`tCfl!2cOE|RT>}N8SPwu)GTx~`q@ejM^{|&XxQD$dm_RV+| zHdWt4Mq

^pR*X`B$JTbUC2%#M#tRbm8szwA*$~clXwGvy!CG;J|$#F>m8I-NCeX zbT*$~(X2UOWlInhYj})jvUn%JIIpsDw<9{+yhr@s>g;ds$r^`>^75Bv%bJ2!LVgG| z5->C2Xl@QE)PInAt)QqanhXa@LTah4r3z20<>mK8L@?^=)EHCxURgVmKnwnm*06^6 z<|9EZEibqVx0`1u=<%P?R2F<+-JcPEDN~%$=g8 zqf=3`FOZZZCSa3Cu7BRyoz(s$bn*!vYM>D^5)q~htZk5xj!MkNloHHBbF;L#9k=!S z_Lf?E$H7snKT!zh_is+fhAwd&sPj12(A5P%D6&ETTsoTi`n=`7)P9PH zxEsJrq&V$RH3>EaJc4&wX=(X{PKQFs(;83iro@i?v>f0-_4y#}o0N3rwoU5hLPAQW zFo9=gZ7nj$r(pS|V`#_G8B6@~;9r73($-cWpLx7WLW`;@iIgtyo-Uam{?OzkXiA&g z+H&?+!iL>GrmHf`%Bppti&aW0e2}2&_?uVnx^HS@Qx{9TpId15`NHw>(25PpA9sWs zH#Su2fzv-d)&7+7+Hy@IR}0P)14ABo7g<^B^p>lMi9JwP7rS?lQe7QRK-;0dMDuGesZU-d>}OfD^UkcOwe{5Ri7O$B(1L=kQB>xssj1bq zmRVgqRLH>^=u8NIUd^maa{f0sQ02f>Q$t=|*&F>O@GbGuu8XeC%vha?#m%4>mxh7@ ztCdo^pFblVr$8<4$l_ssHa^bU-F-`3JVRt61iSMu4THZlol=SouSfOmpn=^9TZY3! zT@=5fli6csos^n87^;Xw05*1axDR(u&ZBx(u)txfvr}kkDY2vD+n&9$tgO7prH-Q` zBIKKq)sIGa;1P0Q2ZDgP{9}jKOpcC@NY;kDv4zF=Y^DVq%%UPzHD!~v4fde}YXG81 zE`A& z>#2A}GrpY7ypixmZo9)9XJPhjBzuH5g)6VnOGj@?S7YdND7k_P zS5A(rpDf3}e^DgZZ}_$DUV~&tNMT?W$VGt)N@|bAyQFJD@>rZ#*<&rya~_4>R}2!i z8I(y%CbLnu+5~vxKFCr5!8Nq!0to~t^_ua&&G})atmyVkV`y@!D~Lu;(#Pa=UbCSE zIr%y_$v8M3I9A_ED#*zf>z8B$mo7-{@R{>=CwuUF)pw4U@o{i0St8qlwa5hm9>6#( ztdZ;-hv(?%>_ipLvj70PojZvqOa(d-YO2w}_0_i)4>zu3^|!P%*ocw}Br`1KgjQ42 z(g=NNA~1Yt7Do&m3iUd7_e(;9Pk#*&ZnJ^)CSn$5&-=E&LY8XIm+8xwsn-wii?s6D ziHPs$YO&iG8R==0)@1kv+1$5b?H|ZkU03hDb)Pj_D(lL4R@T^<4fXe`FxTpZ-r8Do z!}V2vbHH87%}3TTA)?)~XiBI+lmLvTTmG7K_;v)Ou|xRDLK^2*S3gI|(C#2mnSV($ z+0g&H#{blupKA?Dot#`Z9nBFnopVOE+`NLVH;Rhr)kp#9(%IJ7{-4mAqX{&Jx)wY#yz8cN&A>tT>{7Ytw+eX4pHFah8@Cq(mW za5zSm?#}S>LvC(72*f_WOnAXdiY57Ati64$ldIw2@K8fty$1SRqy*s~E6BDq2Ag+E9RZUGECqL2V|y8qc2t83>f%Ey-R8st)${ zV0~yrk}Uj=b&zWvs2X5%NwFcU${HG`3O>HoemXj;#l^)1dnPAO$ji$EkdTy&3|!a> zUzRD*M~1!R;fy7xr0g=`1-u8E0!;PoYPy*MJM)~=6-|k2Ud*}?%Q5}e`0owM z{!TkXiyYE8UQ_gta{Y_2-=h-Qt-TiOZ{9R~{vh~nW3&-o4bxQpX>LrvwAo|$TL~~w zdy>WY1Oy&=U5TE3hJn@BgDZa+DzfA?oH^)wkfF*97DubO&<6$s10#HSqd(hWQHy;T z_ApZw7Z%o&DC7Xk4HztRGFko`=SL%FXU7w#)ZNy$`tRR+Sfl_j)fWObekw`A4AT`V z`e^9r@S8Poip$F0K^GfnG9#6yT3ghVD8R$x3S=OFQ$Rn($B&z*cnnWY>Z+-Mm9ZCi zT50Po{FLAK?1H(1t}_5~Sy)v#_g!Ih`=DBr?Cpme>X2R+4 z>@e}{EaplF=kU`t5SyQfIHazf937>-TIJjYd-VY(1uMD7c$qadFiH^?7Ww%7c@7D9 z&G)1Eo}P~Ep{1&dkW>ZFJ@BK0J}lsBb^dzhk;L5T6 zAxtuA5^T-Q1x-KZ)QAi;`pKs;hwXT4LZ=_-m?JNL`{l~U+8T>zJ9PRuj;W)@Db+MF z$;{1N$9;4W9vLY`7vbycEBjSc38=&FCJsmY4`kd9i3bNWb3VhwLg+E8}BN` z>vTxm;$nJ?e3pvvehn0Z*Qx0yEc48}ib-7^|GX-SVb?B(n>sM?R)ic_^8)Nl9sGk;I9X9!|Xd16matJfM~`aQh63R#^+7=?Qd90S7-| zlXs4ewl+5WX+B7-x_!F0Lg@D!G%8P@KCSaAf^IT*lK1zzo0_DV3DO(vvgo^uBzX?meRvm>n%jGOe`aL(b(v-0c6N3KIZj_O+|#_7E63Zs?lX2tPY~Qj@ZujVO$UF0 zKLqL+`Zh&u6OxivnfD|=y1r2NG`HY>@Zj+1C=?vR;6)-QM;k~-@E5b>2loQ!iZ>HS zfVPUKa1mhkxx);|W(`=SR|iBVfT(cS0!WXFj=t|wJGWF@3r3|l*x0&N z_DcYm!nGX+2sD^DupCn|@0*s1G18lT;BRh+qZt@*=!$H0=_s1Z=U_x-ze}XaOQl^sUu1SU_XtxxaaPC zv)UGK%$iBb80a7B>+6l*a^`(LdhklEz(n~)6~B$bAVByu7{z5}l&5Jsx>9G^cLq}t zzx=&vCLU;$?x_N}twl&Yn z!V{FIw+Z@&z-J3;O#l635((+Q)@6uF6nGZjeBPovMxr5Jzpc{Ei}HRlU)9)}#p5#2 zDp?h|$?(|^zjP_`jXb;;jC!Roegi%PZGN2p%O*E25tN4nV(D(lUCZntu literal 0 HcmV?d00001 diff --git a/log_8h_source.html b/log_8h_source.html new file mode 100644 index 00000000..93514e15 --- /dev/null +++ b/log_8h_source.html @@ -0,0 +1,131 @@ + + + + + + + +Project: include/franka/log.h Source File + + + + + + + + + + + +

+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
log.h
+
+
+Go to the documentation of this file.
1 // Copyright (c) 2023 Franka Robotics GmbH
+
2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
3 #pragma once
+
4 
+
5 #include <vector>
+
6 
+
7 #include <franka/control_types.h>
+
8 #include <franka/robot_state.h>
+
9 
+
15 namespace franka {
+
16 
+
20 struct RobotCommand {
+
24  JointPositions joint_positions{0, 0, 0, 0, 0, 0, 0};
+
28  JointVelocities joint_velocities{0, 0, 0, 0, 0, 0, 0};
+
32  CartesianPose cartesian_pose{1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1};
+ +
40  Torques torques{0, 0, 0, 0, 0, 0, 0};
+
41 };
+
42 
+
48 struct Record {
+ + +
57 };
+
58 
+
69 std::string logToCSV(const std::vector<Record>& log);
+
70 } // namespace franka
+
Stores values for Cartesian pose motion generation.
Definition: control_types.h:127
+
Stores values for Cartesian velocity motion generation.
Definition: control_types.h:211
+
Stores values for joint position motion generation.
Definition: control_types.h:72
+
Stores values for joint velocity motion generation.
Definition: control_types.h:99
+
Stores joint-level torque commands without gravity and friction.
Definition: control_types.h:45
+
Contains helper types for returning motion generation and joint-level torque commands.
+
std::string logToCSV(const std::vector< Record > &log)
Writes the log to a string in CSV format.
+
Contains the franka::RobotState types.
+
One row of the log contains a robot command of timestamp n and a corresponding robot state of timesta...
Definition: log.h:48
+
RobotState state
Robot state of timestamp n+1.
Definition: log.h:52
+
RobotCommand command
Robot command of timestamp n, after rate limiting (if activated).
Definition: log.h:56
+
Command sent to the robot.
Definition: log.h:20
+
JointVelocities joint_velocities
sent to the robot.
Definition: log.h:28
+
CartesianVelocities cartesian_velocities
sent to the robot.
Definition: log.h:36
+
JointPositions joint_positions
sent to the robot.
Definition: log.h:24
+
Torques torques
sent to the robot.
Definition: log.h:40
+
CartesianPose cartesian_pose
sent to the robot.
Definition: log.h:32
+
Describes the robot state.
Definition: robot_state.h:34
+
+ + + + diff --git a/lowpass__filter_8h.html b/lowpass__filter_8h.html new file mode 100644 index 00000000..34437168 --- /dev/null +++ b/lowpass__filter_8h.html @@ -0,0 +1,267 @@ + + + + + + + +Project: include/franka/lowpass_filter.h File Reference + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
lowpass_filter.h File Reference
+
+
+ +

Contains functions for filtering signals with a low-pass filter. +More...

+
#include <array>
+#include <cmath>
+
+Include dependency graph for lowpass_filter.h:
+
+
+ + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + +

+Functions

double franka::lowpassFilter (double sample_time, double y, double y_last, double cutoff_frequency)
 Applies a first-order low-pass filter. More...
 
std::array< double, 16 > franka::cartesianLowpassFilter (double sample_time, std::array< double, 16 > y, std::array< double, 16 > y_last, double cutoff_frequency)
 Applies a first-order low-pass filter to the translation and spherical linear interpolation to the rotation of a transformation matrix which represents a Cartesian Motion. More...
 
+ + + + + + + +

+Variables

+constexpr double franka::kMaxCutoffFrequency = 1000.0
 Maximum cutoff frequency.
 
+constexpr double franka::kDefaultCutoffFrequency = 100.0
 Default cutoff frequency.
 
+

Detailed Description

+

Contains functions for filtering signals with a low-pass filter.

+

Function Documentation

+ +

◆ cartesianLowpassFilter()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::array<double, 16> franka::cartesianLowpassFilter (double sample_time,
std::array< double, 16 > y,
std::array< double, 16 > y_last,
double cutoff_frequency 
)
+
+ +

Applies a first-order low-pass filter to the translation and spherical linear interpolation to the rotation of a transformation matrix which represents a Cartesian Motion.

+
Parameters
+ + + + + +
[in]sample_timeSample time constant
[in]yCurrent Cartesian transformation matrix to be filtered
[in]y_lastCartesian transformation matrix from the previous time step
[in]cutoff_frequencyCutoff frequency of the low-pass filter
+
+
+
Exceptions
+ + + + + +
std::invalid_argumentif elements of y is infinite or NaN.
std::invalid_argumentif elements of y_last is infinite or NaN.
std::invalid_argumentif cutoff_frequency is zero, negative, infinite or NaN.
std::invalid_argumentif sample_time is negative, infinite or NaN.
+
+
+
Returns
Filtered Cartesian transformation matrix.
+ +
+
+ +

◆ lowpassFilter()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
double franka::lowpassFilter (double sample_time,
double y,
double y_last,
double cutoff_frequency 
)
+
+ +

Applies a first-order low-pass filter.

+
Parameters
+ + + + + +
[in]sample_timeSample time constant
[in]yCurrent value of the signal to be filtered
[in]y_lastValue of the signal to be filtered in the previous time step
[in]cutoff_frequencyCutoff frequency of the low-pass filter
+
+
+
Exceptions
+ + + + + +
std::invalid_argumentif y is infinite or NaN.
std::invalid_argumentif y_last is infinite or NaN.
std::invalid_argumentif cutoff_frequency is zero, negative, infinite or NaN.
std::invalid_argumentif sample_time is negative, infinite or NaN.
+
+
+
Returns
Filtered value.
+ +
+
+
+ + + + diff --git a/lowpass__filter_8h__dep__incl.map b/lowpass__filter_8h__dep__incl.map new file mode 100644 index 00000000..38e577c9 --- /dev/null +++ b/lowpass__filter_8h__dep__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/lowpass__filter_8h__dep__incl.md5 b/lowpass__filter_8h__dep__incl.md5 new file mode 100644 index 00000000..e155d1ef --- /dev/null +++ b/lowpass__filter_8h__dep__incl.md5 @@ -0,0 +1 @@ +72bfa0337d03fb215f3e592c6abfcede \ No newline at end of file diff --git a/lowpass__filter_8h__dep__incl.png b/lowpass__filter_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..bafe15d590c51eb5e6452c14bbb8f1e17b7c5536 GIT binary patch literal 21776 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 Cx82nM literal 0 HcmV?d00001 diff --git a/lowpass__filter_8h__incl.map b/lowpass__filter_8h__incl.map new file mode 100644 index 00000000..85ee43b1 --- /dev/null +++ b/lowpass__filter_8h__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/lowpass__filter_8h__incl.md5 b/lowpass__filter_8h__incl.md5 new file mode 100644 index 00000000..c54d3d97 --- /dev/null +++ b/lowpass__filter_8h__incl.md5 @@ -0,0 +1 @@ +81234cca7188375c2e4a16790f69f10e \ No newline at end of file diff --git a/lowpass__filter_8h__incl.png b/lowpass__filter_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..5df81d0d504314f6b30bb7b13bfde7658bd31975 GIT binary patch literal 5987 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 literal 0 HcmV?d00001 diff --git a/lowpass__filter_8h_source.html b/lowpass__filter_8h_source.html new file mode 100644 index 00000000..8eeef19b --- /dev/null +++ b/lowpass__filter_8h_source.html @@ -0,0 +1,108 @@ + + + + + + + +Project: include/franka/lowpass_filter.h Source File + + + + + + + + + + + +
+
+ + + + + + + +
+
Project +
+
FCI C++ API
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
lowpass_filter.h
+
+
+Go to the documentation of this file.
1 // Copyright (c) 2023 Franka Robotics GmbH
+
2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
+
3 #pragma once
+
4 
+
5 #include <array>
+
6 #include <cmath>
+
7 
+
13 namespace franka {
+
17 constexpr double kMaxCutoffFrequency = 1000.0;
+
21 constexpr double kDefaultCutoffFrequency = 100.0;
+
37 double lowpassFilter(double sample_time, double y, double y_last, double cutoff_frequency);
+
38 
+
56 std::array<double, 16> cartesianLowpassFilter(double sample_time,
+
57  std::array<double, 16> y,
+
58  std::array<double, 16> y_last,
+
59  double cutoff_frequency);
+
60 } // namespace franka
+
double lowpassFilter(double sample_time, double y, double y_last, double cutoff_frequency)
Applies a first-order low-pass filter.
+
std::array< double, 16 > cartesianLowpassFilter(double sample_time, std::array< double, 16 > y, std::array< double, 16 > y_last, double cutoff_frequency)
Applies a first-order low-pass filter to the translation and spherical linear interpolation to the ro...
+
constexpr double kDefaultCutoffFrequency
Default cutoff frequency.
Definition: lowpass_filter.h:21
+
constexpr double kMaxCutoffFrequency
Maximum cutoff frequency.
Definition: lowpass_filter.h:17
+
+ + + + diff --git a/menu.js b/menu.js new file mode 100644 index 00000000..2fe2214f --- /dev/null +++ b/menu.js @@ -0,0 +1,51 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/menudata.js b/menudata.js new file mode 100644 index 00000000..8da82039 --- /dev/null +++ b/menudata.js @@ -0,0 +1,107 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"inherits.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"b",url:"functions_b.html#index_b"}, +{text:"c",url:"functions_c.html#index_c"}, +{text:"d",url:"functions_d.html#index_d"}, +{text:"e",url:"functions_e.html#index_e"}, +{text:"f",url:"functions_f.html#index_f"}, +{text:"g",url:"functions_g.html#index_g"}, +{text:"h",url:"functions_h.html#index_h"}, +{text:"i",url:"functions_i.html#index_i"}, +{text:"j",url:"functions_j.html#index_j"}, +{text:"k",url:"functions_k.html#index_k"}, +{text:"l",url:"functions_l.html#index_l"}, +{text:"m",url:"functions_m.html#index_m"}, +{text:"n",url:"functions_n.html#index_n"}, +{text:"o",url:"functions_o.html#index_o"}, +{text:"p",url:"functions_p.html#index_p"}, +{text:"q",url:"functions_q.html#index_q"}, +{text:"r",url:"functions_r.html#index_r"}, +{text:"s",url:"functions_s.html#index_s"}, +{text:"t",url:"functions_t.html#index_t"}, +{text:"v",url:"functions_v.html#index_v"}, +{text:"w",url:"functions_w.html#index_w"}, +{text:"z",url:"functions_z.html#index_z"}, +{text:"~",url:"functions_~.html#index__7E"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"b",url:"functions_func.html#index_b"}, +{text:"c",url:"functions_func.html#index_c"}, +{text:"d",url:"functions_func.html#index_d"}, +{text:"e",url:"functions_func.html#index_e"}, +{text:"g",url:"functions_func.html#index_g"}, +{text:"h",url:"functions_func.html#index_h"}, +{text:"i",url:"functions_func.html#index_i"}, +{text:"j",url:"functions_func.html#index_j"}, +{text:"l",url:"functions_func.html#index_l"}, +{text:"m",url:"functions_func.html#index_m"}, +{text:"o",url:"functions_func.html#index_o"}, +{text:"p",url:"functions_func.html#index_p"}, +{text:"r",url:"functions_func.html#index_r"}, +{text:"s",url:"functions_func.html#index_s"}, +{text:"t",url:"functions_func.html#index_t"}, +{text:"v",url:"functions_func.html#index_v"}, +{text:"w",url:"functions_func.html#index_w"}, +{text:"z",url:"functions_func.html#index_z"}, +{text:"~",url:"functions_func.html#index__7E"}]}, +{text:"Variables",url:"functions_vars.html",children:[ +{text:"a",url:"functions_vars.html#index_a"}, +{text:"b",url:"functions_vars.html#index_b"}, +{text:"c",url:"functions_vars.html#index_c"}, +{text:"d",url:"functions_vars.html#index_d"}, +{text:"e",url:"functions_vars.html#index_e"}, +{text:"f",url:"functions_vars.html#index_f"}, +{text:"i",url:"functions_vars.html#index_i"}, +{text:"j",url:"functions_vars.html#index_j"}, +{text:"k",url:"functions_vars.html#index_k"}, +{text:"l",url:"functions_vars.html#index_l"}, +{text:"m",url:"functions_vars.html#index_m"}, +{text:"n",url:"functions_vars.html#index_n"}, +{text:"o",url:"functions_vars.html#index_o"}, +{text:"p",url:"functions_vars.html#index_p"}, +{text:"q",url:"functions_vars.html#index_q"}, +{text:"r",url:"functions_vars.html#index_r"}, +{text:"s",url:"functions_vars.html#index_s"}, +{text:"t",url:"functions_vars.html#index_t"}, +{text:"v",url:"functions_vars.html#index_v"}, +{text:"w",url:"functions_vars.html#index_w"}]}, +{text:"Typedefs",url:"functions_type.html"}, +{text:"Enumerations",url:"functions_enum.html"}, +{text:"Related Functions",url:"functions_rela.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"File Members",url:"globals.html",children:[ +{text:"All",url:"globals.html"}, +{text:"Functions",url:"globals_func.html"}]}]}, +{text:"Examples",url:"examples.html"}]} diff --git a/model_8h.html b/model_8h.html new file mode 100644 index 00000000..3aee7a41 --- /dev/null +++ b/model_8h.html @@ -0,0 +1,211 @@ + + + + + + + +Project: include/franka/model.h File Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    model.h File Reference
    +
    +
    + +

    Contains model library types. +More...

    +
    #include <array>
    +#include <memory>
    +#include <franka/robot.h>
    +#include <franka/robot_model_base.h>
    +#include <franka/robot_state.h>
    +
    +Include dependency graph for model.h:
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    class  franka::Model
     Calculates poses of joints and dynamic properties of the robot. More...
     
    + + + + +

    +Enumerations

    enum class  franka::Frame {
    +  kJoint1 +, kJoint2 +, kJoint3 +, kJoint4 +,
    +  kJoint5 +, kJoint6 +, kJoint7 +, kFlange +,
    +  kEndEffector +, kStiffness +
    + }
     Enumerates the seven joints, the flange, and the end effector of a robot.
     
    + + + + +

    +Functions

    Frame franka::operator++ (Frame &frame, int) noexcept
     Post-increments the given Frame by one. More...
     
    +

    Detailed Description

    +

    Contains model library types.

    +

    Function Documentation

    + +

    ◆ operator++()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    Frame franka::operator++ (Frameframe,
    int  
    )
    +
    +noexcept
    +
    + +

    Post-increments the given Frame by one.

    +

    For example, Frame::kJoint2++ results in Frame::kJoint3.

    +
    Parameters
    + + +
    [in]frameFrame to increment.
    +
    +
    +
    Returns
    Original Frame.
    + +
    +
    +
    + + + + diff --git a/model_8h__incl.map b/model_8h__incl.map new file mode 100644 index 00000000..8b86fe4b --- /dev/null +++ b/model_8h__incl.map @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/model_8h__incl.md5 b/model_8h__incl.md5 new file mode 100644 index 00000000..6882520d --- /dev/null +++ b/model_8h__incl.md5 @@ -0,0 +1 @@ +959268beaead9c169c5ca1561c6508c0 \ No newline at end of file diff --git a/model_8h__incl.png b/model_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..726487511cbde8234f11059eb4f13854417a020f GIT binary patch literal 100631 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 z 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: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 V;nmlR<;@v@z|+;wWt~$(69640i&6jp literal 0 HcmV?d00001 diff --git a/model_8h_source.html b/model_8h_source.html new file mode 100644 index 00000000..9275ed1e --- /dev/null +++ b/model_8h_source.html @@ -0,0 +1,215 @@ + + + + + + + +Project: include/franka/model.h Source File + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    model.h
    +
    +
    +Go to the documentation of this file.
    1 // Copyright (c) 2023 Franka Robotics GmbH
    +
    2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
    +
    3 #pragma once
    +
    4 
    +
    5 #include <array>
    +
    6 #include <memory>
    +
    7 
    +
    8 #include <franka/robot.h>
    +
    9 #include <franka/robot_model_base.h>
    +
    10 #include <franka/robot_state.h>
    +
    11 
    +
    17 namespace franka {
    +
    18 
    +
    22 enum class Frame {
    +
    23  kJoint1,
    +
    24  kJoint2,
    +
    25  kJoint3,
    +
    26  kJoint4,
    +
    27  kJoint5,
    +
    28  kJoint6,
    +
    29  kJoint7,
    +
    30  kFlange,
    +
    31  kEndEffector,
    +
    32  kStiffness
    +
    33 };
    +
    34 
    +
    44 Frame operator++(Frame& frame, int /* dummy */) noexcept;
    +
    45 
    +
    46 class ModelLibrary;
    +
    47 class Network;
    +
    48 
    +
    52 class Model {
    +
    53  public:
    +
    65  explicit Model(franka::Network& network, const std::string& urdf_model);
    +
    66 
    +
    76  explicit Model(franka::Network& network, std::unique_ptr<RobotModelBase> robot_model);
    +
    77 
    +
    83  Model(Model&& model) noexcept;
    +
    84 
    +
    92  Model& operator=(Model&& model) noexcept;
    +
    93 
    +
    97  ~Model() noexcept;
    +
    98 
    +
    109  std::array<double, 16> pose(Frame frame, const franka::RobotState& robot_state) const;
    +
    110 
    +
    123  std::array<double, 16> pose(
    +
    124  Frame frame,
    +
    125  const std::array<double, 7>& q,
    +
    126  const std::array<double, 16>& F_T_EE, // NOLINT(readability-identifier-naming)
    +
    127  const std::array<double, 16>& EE_T_K) // NOLINT(readability-identifier-naming)
    +
    128  const;
    +
    129 
    +
    140  std::array<double, 42> bodyJacobian(Frame frame, const franka::RobotState& robot_state) const;
    +
    141 
    +
    154  std::array<double, 42> bodyJacobian(
    +
    155  Frame frame,
    +
    156  const std::array<double, 7>& q,
    +
    157  const std::array<double, 16>& F_T_EE, // NOLINT(readability-identifier-naming)
    +
    158  const std::array<double, 16>& EE_T_K) // NOLINT(readability-identifier-naming)
    +
    159  const;
    +
    160 
    +
    171  std::array<double, 42> zeroJacobian(Frame frame, const franka::RobotState& robot_state) const;
    +
    172 
    +
    185  std::array<double, 42> zeroJacobian(
    +
    186  Frame frame,
    +
    187  const std::array<double, 7>& q,
    +
    188  const std::array<double, 16>& F_T_EE, // NOLINT(readability-identifier-naming)
    +
    189  const std::array<double, 16>& EE_T_K) // NOLINT(readability-identifier-naming)
    +
    190  const;
    +
    191 
    +
    199  std::array<double, 49> mass(const franka::RobotState& robot_state) const noexcept;
    +
    200 
    +
    214  std::array<double, 49> mass(
    +
    215  const std::array<double, 7>& q,
    +
    216  const std::array<double, 9>& I_total, // NOLINT(readability-identifier-naming)
    +
    217  double m_total,
    +
    218  const std::array<double, 3>& F_x_Ctotal) // NOLINT(readability-identifier-naming)
    +
    219  const noexcept;
    +
    220 
    +
    229  std::array<double, 7> coriolis(const franka::RobotState& robot_state) const noexcept;
    +
    230 
    +
    246  std::array<double, 7> coriolis(
    +
    247  const std::array<double, 7>& q,
    +
    248  const std::array<double, 7>& dq,
    +
    249  const std::array<double, 9>& I_total, // NOLINT(readability-identifier-naming)
    +
    250  double m_total,
    +
    251  const std::array<double, 3>& F_x_Ctotal) // NOLINT(readability-identifier-naming)
    +
    252  const noexcept;
    +
    253 
    +
    267  std::array<double, 7> gravity(
    +
    268  const std::array<double, 7>& q,
    +
    269  double m_total,
    +
    270  const std::array<double, 3>& F_x_Ctotal, // NOLINT(readability-identifier-naming)
    +
    271  const std::array<double, 3>& gravity_earth = {{0., 0., -9.81}}) const noexcept;
    +
    272 
    +
    281  std::array<double, 7> gravity(const franka::RobotState& robot_state,
    +
    282  const std::array<double, 3>& gravity_earth) const noexcept;
    +
    283 
    +
    291  std::array<double, 7> gravity(const franka::RobotState& robot_state) const noexcept;
    +
    292 
    +
    294  Model(const Model&) = delete;
    +
    295  Model& operator=(const Model&) = delete;
    +
    297 
    +
    298  private:
    +
    299  std::unique_ptr<ModelLibrary> library_;
    +
    300  std::unique_ptr<RobotModelBase> robot_model_;
    +
    301 };
    +
    302 
    +
    303 } // namespace franka
    +
    Calculates poses of joints and dynamic properties of the robot.
    Definition: model.h:52
    +
    ~Model() noexcept
    Unloads the model library.
    +
    std::array< double, 16 > pose(Frame frame, const franka::RobotState &robot_state) const
    Gets the 4x4 pose matrix for the given frame in base frame.
    +
    Model & operator=(Model &&model) noexcept
    Move-assigns this Model from another Model instance.
    +
    std::array< double, 42 > zeroJacobian(Frame frame, const franka::RobotState &robot_state) const
    Gets the 6x7 Jacobian for the given joint relative to the base frame.
    +
    std::array< double, 7 > gravity(const franka::RobotState &robot_state, const std::array< double, 3 > &gravity_earth) const noexcept
    Calculates the gravity vector.
    +
    Model(franka::Network &network, std::unique_ptr< RobotModelBase > robot_model)
    Creates a new Model instance only for the tests.
    +
    Model(Model &&model) noexcept
    Move-constructs a new Model instance.
    +
    Model(franka::Network &network, const std::string &urdf_model)
    Creates a new Model instance.
    +
    std::array< double, 7 > coriolis(const franka::RobotState &robot_state) const noexcept
    Calculates the Coriolis force vector (state-space equation): , in .
    +
    std::array< double, 42 > bodyJacobian(Frame frame, const franka::RobotState &robot_state) const
    Gets the 6x7 Jacobian for the given frame, relative to that frame.
    +
    std::array< double, 7 > gravity(const franka::RobotState &robot_state) const noexcept
    Calculates the gravity vector using the robot state.
    +
    std::array< double, 7 > gravity(const std::array< double, 7 > &q, double m_total, const std::array< double, 3 > &F_x_Ctotal, const std::array< double, 3 > &gravity_earth={{0., 0., -9.81}}) const noexcept
    Calculates the gravity vector.
    +
    std::array< double, 49 > mass(const franka::RobotState &robot_state) const noexcept
    Calculates the 7x7 mass matrix.
    +
    Frame
    Enumerates the seven joints, the flange, and the end effector of a robot.
    Definition: model.h:22
    +
    Frame operator++(Frame &frame, int) noexcept
    Post-increments the given Frame by one.
    +
    Contains the franka::Robot type.
    +
    Contains the franka::RobotState types.
    +
    Describes the robot state.
    Definition: robot_state.h:34
    +
    + + + + diff --git a/motion_with_control_8cpp-example.html b/motion_with_control_8cpp-example.html new file mode 100644 index 00000000..25dd8b8d --- /dev/null +++ b/motion_with_control_8cpp-example.html @@ -0,0 +1,304 @@ + + + + + + + +Project: motion_with_control.cpp + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    motion_with_control.cpp
    +
    +
    +

    An example showing how to use a joint velocity motion generator and torque control.Additionally, this example shows how to capture and write logs in case an exception is thrown during a motion.

    +
    Warning
    Before executing this example, make sure there is enough space in front of the robot.
    +
    // Copyright (c) 2023 Franka Robotics GmbH
    +
    // Use of this source code is governed by the Apache-2.0 license, see LICENSE
    +
    #include <cmath>
    +
    #include <fstream>
    +
    #include <iomanip>
    +
    #include <iostream>
    +
    #include <vector>
    +
    +
    #include <Poco/DateTimeFormatter.h>
    +
    #include <Poco/File.h>
    +
    #include <Poco/Path.h>
    +
    + +
    #include <franka/robot.h>
    +
    + +
    +
    namespace {
    +
    +
    class Controller {
    +
    public:
    +
    Controller(size_t dq_filter_size,
    +
    const std::array<double, 7>& K_P, // NOLINT(readability-identifier-naming)
    +
    const std::array<double, 7>& K_D) // NOLINT(readability-identifier-naming)
    +
    : dq_current_filter_position_(0), dq_filter_size_(dq_filter_size), K_P_(K_P), K_D_(K_D) {
    +
    std::fill(dq_d_.begin(), dq_d_.end(), 0);
    +
    dq_buffer_ = std::make_unique<double[]>(dq_filter_size_ * 7);
    +
    std::fill(&dq_buffer_.get()[0], &dq_buffer_.get()[dq_filter_size_ * 7], 0);
    +
    }
    +
    +
    inline franka::Torques step(const franka::RobotState& state) {
    +
    updateDQFilter(state);
    +
    +
    std::array<double, 7> tau_J_d; // NOLINT(readability-identifier-naming)
    +
    for (size_t i = 0; i < 7; i++) {
    +
    tau_J_d[i] = K_P_[i] * (state.q_d[i] - state.q[i]) + K_D_[i] * (dq_d_[i] - getDQFiltered(i));
    +
    }
    +
    return tau_J_d;
    +
    }
    +
    +
    void updateDQFilter(const franka::RobotState& state) {
    +
    for (size_t i = 0; i < 7; i++) {
    +
    dq_buffer_.get()[dq_current_filter_position_ * 7 + i] = state.dq[i];
    +
    }
    +
    dq_current_filter_position_ = (dq_current_filter_position_ + 1) % dq_filter_size_;
    +
    }
    +
    +
    double getDQFiltered(size_t index) const {
    +
    double value = 0;
    +
    for (size_t i = index; i < 7 * dq_filter_size_; i += 7) {
    +
    value += dq_buffer_.get()[i];
    +
    }
    +
    return value / dq_filter_size_;
    +
    }
    +
    +
    private:
    +
    size_t dq_current_filter_position_;
    +
    size_t dq_filter_size_;
    +
    +
    const std::array<double, 7> K_P_; // NOLINT(readability-identifier-naming)
    +
    const std::array<double, 7> K_D_; // NOLINT(readability-identifier-naming)
    +
    +
    std::array<double, 7> dq_d_;
    +
    std::unique_ptr<double[]> dq_buffer_;
    +
    };
    +
    +
    std::vector<double> generateTrajectory(double a_max) {
    +
    // Generating a motion with smooth velocity and acceleration.
    +
    // Squared sine is used for the acceleration/deceleration phase.
    +
    std::vector<double> trajectory;
    +
    constexpr double kTimeStep = 0.001; // [s]
    +
    constexpr double kAccelerationTime = 1; // time spend accelerating and decelerating [s]
    +
    constexpr double kConstantVelocityTime = 1; // time spend with constant speed [s]
    +
    // obtained during the speed up
    +
    // and slow down [rad/s^2]
    +
    double a = 0; // [rad/s^2]
    +
    double v = 0; // [rad/s]
    +
    double t = 0; // [s]
    +
    while (t < (2 * kAccelerationTime + kConstantVelocityTime)) {
    +
    if (t <= kAccelerationTime) {
    +
    a = pow(sin(t * M_PI / kAccelerationTime), 2) * a_max;
    +
    } else if (t <= (kAccelerationTime + kConstantVelocityTime)) {
    +
    a = 0;
    +
    } else {
    +
    const double deceleration_time =
    +
    (kAccelerationTime + kConstantVelocityTime) - t; // time spent in the deceleration phase
    +
    a = -pow(sin(deceleration_time * M_PI / kAccelerationTime), 2) * a_max;
    +
    }
    +
    v += a * kTimeStep;
    +
    t += kTimeStep;
    +
    trajectory.push_back(v);
    +
    }
    +
    return trajectory;
    +
    }
    +
    +
    } // anonymous namespace
    +
    +
    void writeLogToFile(const std::vector<franka::Record>& log);
    +
    +
    int main(int argc, char** argv) {
    +
    if (argc != 2) {
    +
    std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
    +
    return -1;
    +
    }
    +
    +
    // Parameters
    +
    const size_t joint_number{3};
    +
    const size_t filter_size{5};
    +
    +
    // NOLINTNEXTLINE(readability-identifier-naming)
    +
    const std::array<double, 7> K_P{{200.0, 200.0, 200.0, 200.0, 200.0, 200.0, 200.0}};
    +
    // NOLINTNEXTLINE(readability-identifier-naming)
    +
    const std::array<double, 7> K_D{{10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0}};
    +
    const double max_acceleration{1.0};
    +
    +
    Controller controller(filter_size, K_P, K_D);
    +
    +
    try {
    +
    franka::Robot robot(argv[1]);
    + +
    +
    // First move the robot to a suitable joint configuration
    +
    std::array<double, 7> q_goal = {{0, -M_PI_4, 0, -3 * M_PI_4, 0, M_PI_2, M_PI_4}};
    +
    MotionGenerator motion_generator(0.5, q_goal);
    +
    std::cout << "WARNING: This example will move the robot! "
    +
    << "Please make sure to have the user stop button at hand!" << std::endl
    +
    << "Press Enter to continue..." << std::endl;
    +
    std::cin.ignore();
    +
    robot.control(motion_generator);
    +
    std::cout << "Finished moving to initial joint configuration." << std::endl;
    +
    +
    // Set additional parameters always before the control loop, NEVER in the control loop!
    +
    // Set collision behavior.
    +
    robot.setCollisionBehavior(
    +
    {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
    +
    {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
    +
    {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}},
    +
    {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}});
    +
    +
    size_t index = 0;
    +
    std::vector<double> trajectory = generateTrajectory(max_acceleration);
    +
    +
    robot.control(
    +
    [&](const franka::RobotState& robot_state, franka::Duration) -> franka::Torques {
    +
    return controller.step(robot_state);
    +
    },
    + +
    index += period.toMSec();
    +
    +
    if (index >= trajectory.size()) {
    +
    index = trajectory.size() - 1;
    +
    }
    +
    +
    franka::JointVelocities velocities{{0, 0, 0, 0, 0, 0, 0}};
    +
    velocities.dq[joint_number] = trajectory[index];
    +
    +
    if (index >= trajectory.size() - 1) {
    +
    return franka::MotionFinished(velocities);
    +
    }
    +
    return velocities;
    +
    });
    +
    } catch (const franka::ControlException& e) {
    +
    std::cout << e.what() << std::endl;
    +
    writeLogToFile(e.log);
    +
    return -1;
    +
    } catch (const franka::Exception& e) {
    +
    std::cout << e.what() << std::endl;
    +
    return -1;
    +
    }
    +
    +
    return 0;
    +
    }
    +
    +
    void writeLogToFile(const std::vector<franka::Record>& log) {
    +
    if (log.empty()) {
    +
    return;
    +
    }
    +
    try {
    +
    Poco::Path temp_dir_path(Poco::Path::temp());
    +
    temp_dir_path.pushDirectory("libfranka-logs");
    +
    +
    Poco::File temp_dir(temp_dir_path);
    +
    temp_dir.createDirectories();
    +
    +
    std::string now_string =
    +
    Poco::DateTimeFormatter::format(Poco::Timestamp{}, "%Y-%m-%d-%h-%m-%S-%i");
    +
    std::string filename = std::string{"log-" + now_string + ".csv"};
    +
    Poco::File log_file(Poco::Path(temp_dir_path, filename));
    +
    if (!log_file.createFile()) {
    +
    std::cout << "Failed to write log file." << std::endl;
    +
    return;
    +
    }
    +
    std::ofstream log_stream(log_file.path().c_str());
    +
    log_stream << franka::logToCSV(log);
    +
    +
    std::cout << "Log file written to: " << log_file.path() << std::endl;
    +
    } catch (...) {
    +
    std::cout << "Failed to write log file." << std::endl;
    +
    }
    +
    }
    +
    An example showing how to generate a joint pose motion to a goal position.
    Definition: examples_common.h:31
    +
    Represents a duration with millisecond resolution.
    Definition: duration.h:19
    +
    Stores values for joint velocity motion generation.
    Definition: control_types.h:99
    +
    std::array< double, 7 > dq
    Desired joint velocities in .
    Definition: control_types.h:121
    +
    Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
    Definition: robot.h:68
    +
    Stores joint-level torque commands without gravity and friction.
    Definition: control_types.h:45
    +
    Torques MotionFinished(Torques command) noexcept
    Helper method to indicate that a motion should stop after processing the given command.
    Definition: control_types.h:294
    +
    Contains common types and functions for the examples.
    +
    void setDefaultBehavior(franka::Robot &robot)
    Sets a default collision behavior, joint impedance and Cartesian impedance.
    Definition: examples_common.cpp:12
    +
    Contains exception definitions.
    +
    std::string logToCSV(const std::vector< Record > &log)
    Writes the log to a string in CSV format.
    +
    Contains the franka::Robot type.
    +
    ControlException is thrown if an error occurs during motion generation or torque control.
    Definition: exception.h:73
    +
    const std::vector< franka::Record > log
    Vector of states and commands logged just before the exception occurred.
    Definition: exception.h:85
    +
    Base class for all exceptions used by libfranka.
    Definition: exception.h:20
    +
    Describes the robot state.
    Definition: robot_state.h:34
    +
    std::array< double, 7 > q_d
    Desired joint position.
    Definition: robot_state.h:239
    +
    std::array< double, 7 > q
    Measured joint position.
    Definition: robot_state.h:233
    +
    std::array< double, 7 > dq
    Measured joint velocity.
    Definition: robot_state.h:245
    +
    + + + + diff --git a/motion_with_control_external_control_loop_8cpp-example.html b/motion_with_control_external_control_loop_8cpp-example.html new file mode 100644 index 00000000..e2c334f1 --- /dev/null +++ b/motion_with_control_external_control_loop_8cpp-example.html @@ -0,0 +1,325 @@ + + + + + + + +Project: motion_with_control_external_control_loop.cpp + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    motion_with_control_external_control_loop.cpp
    +
    +
    +

    An example showing how to use a joint velocity motion generator and torque control with an external control loop.Additionally, this example shows how to capture and write logs in case an exception is thrown during a motion.

    +
    Warning
    Before executing this example, make sure there is enough space in front of the robot.
    +
    // Copyright (c) 2023 Franka Robotics GmbH
    +
    // Use of this source code is governed by the Apache-2.0 license, see LICENSE
    +
    #include <cmath>
    +
    #include <fstream>
    +
    #include <iomanip>
    +
    #include <iostream>
    +
    #include <vector>
    +
    +
    #include <Poco/DateTimeFormatter.h>
    +
    #include <Poco/File.h>
    +
    #include <Poco/Path.h>
    +
    + + + +
    #include <franka/robot.h>
    +
    + +
    +
    namespace {
    +
    +
    class Controller {
    +
    public:
    +
    Controller(size_t dq_filter_size,
    +
    const std::array<double, 7>& K_P, // NOLINT(readability-identifier-naming)
    +
    const std::array<double, 7>& K_D) // NOLINT(readability-identifier-naming)
    +
    : dq_current_filter_position_(0), dq_filter_size_(dq_filter_size), K_P_(K_P), K_D_(K_D) {
    +
    std::fill(dq_d_.begin(), dq_d_.end(), 0);
    +
    dq_buffer_ = std::make_unique<double[]>(dq_filter_size_ * 7);
    +
    std::fill(&dq_buffer_.get()[0], &dq_buffer_.get()[dq_filter_size_ * 7], 0);
    +
    }
    +
    +
    inline franka::Torques step(const franka::RobotState& state) {
    +
    updateDQFilter(state);
    +
    +
    std::array<double, 7> tau_J_d; // NOLINT(readability-identifier-naming)
    +
    for (size_t i = 0; i < 7; i++) {
    +
    tau_J_d[i] = K_P_[i] * (state.q_d[i] - state.q[i]) + K_D_[i] * (dq_d_[i] - getDQFiltered(i));
    +
    }
    +
    return tau_J_d;
    +
    }
    +
    +
    void updateDQFilter(const franka::RobotState& state) {
    +
    for (size_t i = 0; i < 7; i++) {
    +
    dq_buffer_.get()[dq_current_filter_position_ * 7 + i] = state.dq[i];
    +
    }
    +
    dq_current_filter_position_ = (dq_current_filter_position_ + 1) % dq_filter_size_;
    +
    }
    +
    +
    double getDQFiltered(size_t index) const {
    +
    double value = 0;
    +
    for (size_t i = index; i < 7 * dq_filter_size_; i += 7) {
    +
    value += dq_buffer_.get()[i];
    +
    }
    +
    return value / dq_filter_size_;
    +
    }
    +
    +
    private:
    +
    size_t dq_current_filter_position_;
    +
    size_t dq_filter_size_;
    +
    +
    const std::array<double, 7> K_P_; // NOLINT(readability-identifier-naming)
    +
    const std::array<double, 7> K_D_; // NOLINT(readability-identifier-naming)
    +
    +
    std::array<double, 7> dq_d_;
    +
    std::unique_ptr<double[]> dq_buffer_;
    +
    };
    +
    +
    std::vector<double> generateTrajectory(double a_max) {
    +
    // Generating a motion with smooth velocity and acceleration.
    +
    // Squared sine is used for the acceleration/deceleration phase.
    +
    std::vector<double> trajectory;
    +
    constexpr double kTimeStep = 0.001; // [s]
    +
    constexpr double kAccelerationTime = 1; // time spend accelerating and decelerating [s]
    +
    constexpr double kConstantVelocityTime = 1; // time spend with constant speed [s]
    +
    // obtained during the speed up
    +
    // and slow down [rad/s^2]
    +
    double a = 0; // [rad/s^2]
    +
    double v = 0; // [rad/s]
    +
    double t = 0; // [s]
    +
    while (t < (2 * kAccelerationTime + kConstantVelocityTime)) {
    +
    if (t <= kAccelerationTime) {
    +
    a = pow(sin(t * M_PI / kAccelerationTime), 2) * a_max;
    +
    } else if (t <= (kAccelerationTime + kConstantVelocityTime)) {
    +
    a = 0;
    +
    } else {
    +
    const double deceleration_time =
    +
    (kAccelerationTime + kConstantVelocityTime) - t; // time spent in the deceleration phase
    +
    a = -pow(sin(deceleration_time * M_PI / kAccelerationTime), 2) * a_max;
    +
    }
    +
    v += a * kTimeStep;
    +
    t += kTimeStep;
    +
    trajectory.push_back(v);
    +
    }
    +
    return trajectory;
    +
    }
    +
    +
    } // anonymous namespace
    +
    +
    void writeLogToFile(const std::vector<franka::Record>& log);
    +
    +
    int main(int argc, char** argv) {
    +
    // Check whether the required arguments were passed
    +
    if (argc != 2) {
    +
    std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
    +
    return -1;
    +
    }
    +
    +
    // Parameters
    +
    const size_t joint_number{3};
    +
    const size_t filter_size{5};
    +
    +
    // NOLINTNEXTLINE(readability-identifier-naming)
    +
    const std::array<double, 7> K_P{{200.0, 200.0, 200.0, 200.0, 200.0, 200.0, 200.0}};
    +
    // NOLINTNEXTLINE(readability-identifier-naming)
    +
    const std::array<double, 7> K_D{{10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0}};
    +
    const double max_acceleration{1.0};
    +
    +
    Controller controller(filter_size, K_P, K_D);
    +
    +
    try {
    +
    franka::Robot robot(argv[1]);
    + +
    +
    // First move the robot to a suitable joint configuration
    +
    std::array<double, 7> q_goal = {{0, -M_PI_4, 0, -3 * M_PI_4, 0, M_PI_2, M_PI_4}};
    +
    MotionGenerator motion_generator(0.5, q_goal);
    +
    std::cout << "WARNING: This example will move the robot! "
    +
    << "Please make sure to have the user stop button at hand!" << std::endl
    +
    << "Press Enter to continue..." << std::endl;
    +
    std::cin.ignore();
    +
    robot.control(motion_generator);
    +
    std::cout << "Finished moving to initial joint configuration." << std::endl;
    +
    +
    // Set additional parameters always before the control loop, NEVER in the control loop!
    +
    // Set collision behavior.
    +
    robot.setCollisionBehavior(
    +
    {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
    +
    {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}}, {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
    +
    {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}},
    +
    {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}}, {{20.0, 20.0, 20.0, 25.0, 25.0, 25.0}});
    +
    +
    size_t index = 0;
    +
    std::vector<double> trajectory = generateTrajectory(max_acceleration);
    +
    +
    auto callback_control = [&](const franka::RobotState& robot_state,
    + +
    return controller.step(robot_state);
    +
    };
    +
    +
    auto callback_motion_generator = [&](const franka::RobotState&,
    + +
    index += period.toMSec();
    +
    +
    if (index >= trajectory.size()) {
    +
    index = trajectory.size() - 1;
    +
    }
    +
    +
    franka::JointVelocities velocities{{0, 0, 0, 0, 0, 0, 0}};
    +
    velocities.dq[joint_number] = trajectory[index];
    +
    +
    if (index >= trajectory.size() - 1) {
    +
    return franka::MotionFinished(velocities);
    +
    }
    +
    return velocities;
    +
    };
    +
    +
    bool motion_finished = false;
    +
    auto active_control = robot.startJointVelocityControl(
    +
    research_interface::robot::Move::ControllerMode::kExternalController);
    +
    while (!motion_finished) {
    +
    auto read_once_return = active_control->readOnce();
    +
    auto robot_state = read_once_return.first;
    +
    auto duration = read_once_return.second;
    +
    auto cartesian_velocities = callback_motion_generator(robot_state, duration);
    +
    auto torques = callback_control(robot_state, duration);
    +
    motion_finished = cartesian_velocities.motion_finished;
    +
    active_control->writeOnce(cartesian_velocities, torques);
    +
    }
    +
    +
    } catch (const franka::ControlException& e) {
    +
    std::cout << e.what() << std::endl;
    +
    writeLogToFile(e.log);
    +
    return -1;
    +
    } catch (const franka::Exception& e) {
    +
    std::cout << e.what() << std::endl;
    +
    return -1;
    +
    }
    +
    +
    return 0;
    +
    }
    +
    +
    void writeLogToFile(const std::vector<franka::Record>& log) {
    +
    if (log.empty()) {
    +
    return;
    +
    }
    +
    try {
    +
    Poco::Path temp_dir_path(Poco::Path::temp());
    +
    temp_dir_path.pushDirectory("libfranka-logs");
    +
    +
    Poco::File temp_dir(temp_dir_path);
    +
    temp_dir.createDirectories();
    +
    +
    std::string now_string =
    +
    Poco::DateTimeFormatter::format(Poco::Timestamp{}, "%Y-%m-%d-%h-%m-%S-%i");
    +
    std::string filename = std::string{"log-" + now_string + ".csv"};
    +
    Poco::File log_file(Poco::Path(temp_dir_path, filename));
    +
    if (!log_file.createFile()) {
    +
    std::cout << "Failed to write log file." << std::endl;
    +
    return;
    +
    }
    +
    std::ofstream log_stream(log_file.path().c_str());
    +
    log_stream << franka::logToCSV(log);
    +
    +
    std::cout << "Log file written to: " << log_file.path() << std::endl;
    +
    } catch (...) {
    +
    std::cout << "Failed to write log file." << std::endl;
    +
    }
    +
    }
    +
    Implements the ActiveControlBase abstract class.
    +
    Contains the franka::ActiveMotionGenerator type.
    +
    An example showing how to generate a joint pose motion to a goal position.
    Definition: examples_common.h:31
    +
    Represents a duration with millisecond resolution.
    Definition: duration.h:19
    +
    Stores values for joint velocity motion generation.
    Definition: control_types.h:99
    +
    std::array< double, 7 > dq
    Desired joint velocities in .
    Definition: control_types.h:121
    +
    Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
    Definition: robot.h:68
    +
    Stores joint-level torque commands without gravity and friction.
    Definition: control_types.h:45
    +
    Torques MotionFinished(Torques command) noexcept
    Helper method to indicate that a motion should stop after processing the given command.
    Definition: control_types.h:294
    +
    Contains common types and functions for the examples.
    +
    void setDefaultBehavior(franka::Robot &robot)
    Sets a default collision behavior, joint impedance and Cartesian impedance.
    Definition: examples_common.cpp:12
    +
    Contains exception definitions.
    +
    std::string logToCSV(const std::vector< Record > &log)
    Writes the log to a string in CSV format.
    +
    Contains the franka::Robot type.
    +
    ControlException is thrown if an error occurs during motion generation or torque control.
    Definition: exception.h:73
    +
    const std::vector< franka::Record > log
    Vector of states and commands logged just before the exception occurred.
    Definition: exception.h:85
    +
    Base class for all exceptions used by libfranka.
    Definition: exception.h:20
    +
    Describes the robot state.
    Definition: robot_state.h:34
    +
    std::array< double, 7 > q_d
    Desired joint position.
    Definition: robot_state.h:239
    +
    std::array< double, 7 > q
    Measured joint position.
    Definition: robot_state.h:233
    +
    std::array< double, 7 > dq
    Measured joint velocity.
    Definition: robot_state.h:245
    +
    + + + + diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + +Project: print_joint_poses.cpp + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    print_joint_poses.cpp
    +
    +
    +

    An example showing how to use the model library that prints the transformation matrix of each joint with respect to the base frame.

    +
    // Copyright (c) 2023 Franka Robotics GmbH
    +
    // Use of this source code is governed by the Apache-2.0 license, see LICENSE
    +
    #include <iostream>
    +
    #include <iterator>
    +
    + +
    #include <franka/model.h>
    +
    +
    template <class T, size_t N>
    +
    std::ostream& operator<<(std::ostream& ostream, const std::array<T, N>& array) {
    +
    ostream << "[";
    +
    std::copy(array.cbegin(), array.cend() - 1, std::ostream_iterator<T>(ostream, ","));
    +
    std::copy(array.cend() - 1, array.cend(), std::ostream_iterator<T>(ostream));
    +
    ostream << "]";
    +
    return ostream;
    +
    }
    +
    +
    int main(int argc, char** argv) {
    +
    if (argc != 2) {
    +
    std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
    +
    return -1;
    +
    }
    +
    +
    try {
    +
    franka::Robot robot(argv[1]);
    +
    +
    franka::RobotState state = robot.readOnce();
    +
    +
    franka::Model model(robot.loadModel());
    +
    for (franka::Frame frame = franka::Frame::kJoint1; frame <= franka::Frame::kEndEffector;
    +
    frame++) {
    +
    std::cout << model.pose(frame, state) << std::endl;
    +
    }
    +
    } catch (franka::Exception const& e) {
    +
    std::cout << e.what() << std::endl;
    +
    return -1;
    +
    }
    +
    +
    return 0;
    +
    }
    +
    Calculates poses of joints and dynamic properties of the robot.
    Definition: model.h:52
    +
    Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
    Definition: robot.h:68
    +
    std::ostream & operator<<(std::ostream &ostream, const Errors &errors)
    Streams the errors as JSON array.
    +
    Contains exception definitions.
    +
    Contains model library types.
    +
    Frame
    Enumerates the seven joints, the flange, and the end effector of a robot.
    Definition: model.h:22
    +
    Base class for all exceptions used by libfranka.
    Definition: exception.h:20
    +
    Describes the robot state.
    Definition: robot_state.h:34
    +
    + + + + diff --git a/rate__limiting_8h.html b/rate__limiting_8h.html new file mode 100644 index 00000000..a8da670e --- /dev/null +++ b/rate__limiting_8h.html @@ -0,0 +1,1094 @@ + + + + + + + +Project: include/franka/rate_limiting.h File Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    rate_limiting.h File Reference
    +
    +
    + +

    Contains functions for limiting the rate of torques, Cartesian pose, Cartesian velocity, joint position and joint velocity. +More...

    +
    #include <algorithm>
    +#include <array>
    +#include <cmath>
    +#include <limits>
    +
    +Include dependency graph for rate_limiting.h:
    +
    +
    + + + + + + + +
    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    std::array< double, 7 > franka::computeUpperLimitsJointVelocity (const std::array< double, 7 > &q)
     Computes the maximum joint velocity based on joint position. More...
     
    std::array< double, 7 > franka::computeLowerLimitsJointVelocity (const std::array< double, 7 > &q)
     Computes the minimum joint velocity based on joint position. More...
     
    std::array< double, 7 > franka::limitRate (const std::array< double, 7 > &max_derivatives, const std::array< double, 7 > &commanded_values, const std::array< double, 7 > &last_commanded_values)
     Limits the rate of an input vector of per-joint commands considering the maximum allowed time derivatives. More...
     
    double franka::limitRate (double upper_limits_velocity, double lower_limits_velocity, double max_acceleration, double max_jerk, double commanded_velocity, double last_commanded_velocity, double last_commanded_acceleration)
     Limits the rate of a desired joint velocity considering the limits provided. More...
     
    double franka::limitRate (double upper_limits_velocity, double lower_limits_velocity, double max_acceleration, double max_jerk, double commanded_position, double last_commanded_position, double last_commanded_velocity, double last_commanded_acceleration)
     Limits the rate of a desired joint position considering the limits provided. More...
     
    std::array< double, 7 > franka::limitRate (const std::array< double, 7 > &upper_limits_velocity, const std::array< double, 7 > &lower_limits_velocity, const std::array< double, 7 > &max_acceleration, const std::array< double, 7 > &max_jerk, const std::array< double, 7 > &commanded_velocities, const std::array< double, 7 > &last_commanded_velocities, const std::array< double, 7 > &last_commanded_accelerations)
     Limits the rate of a desired joint velocity considering the limits provided. More...
     
    std::array< double, 7 > franka::limitRate (const std::array< double, 7 > &upper_limits_velocity, const std::array< double, 7 > &lower_limits_velocity, const std::array< double, 7 > &max_acceleration, const std::array< double, 7 > &max_jerk, const std::array< double, 7 > &commanded_positions, const std::array< double, 7 > &last_commanded_positions, const std::array< double, 7 > &last_commanded_velocities, const std::array< double, 7 > &last_commanded_accelerations)
     Limits the rate of a desired joint position considering the limits provided. More...
     
    std::array< double, 6 > franka::limitRate (double max_translational_velocity, double max_translational_acceleration, double max_translational_jerk, double max_rotational_velocity, double max_rotational_acceleration, double max_rotational_jerk, const std::array< double, 6 > &O_dP_EE_c, const std::array< double, 6 > &last_O_dP_EE_c, const std::array< double, 6 > &last_O_ddP_EE_c)
     Limits the rate of a desired Cartesian velocity considering the limits provided. More...
     
    std::array< double, 16 > franka::limitRate (double max_translational_velocity, double max_translational_acceleration, double max_translational_jerk, double max_rotational_velocity, double max_rotational_acceleration, double max_rotational_jerk, const std::array< double, 16 > &O_T_EE_c, const std::array< double, 16 > &last_O_T_EE_c, const std::array< double, 6 > &last_O_dP_EE_c, const std::array< double, 6 > &last_O_ddP_EE_c)
     Limits the rate of a desired Cartesian pose considering the limits provided. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

    +constexpr double franka::kDeltaT = 1e-3
     Sample time constant.
     
    +constexpr double franka::kLimitEps = 1e-3
     Epsilon value for checking limits.
     
    +constexpr double franka::kNormEps = std::numeric_limits<double>::epsilon()
     Epsilon value for limiting Cartesian accelerations/jerks or not.
     
    constexpr double franka::kTolNumberPacketsLost = 0.0
     Number of packets lost considered for the definition of velocity limits. More...
     
    +constexpr double franka::kFactorCartesianRotationPoseInterface = 0.99
     Factor for the definition of rotational limits using the Cartesian Pose interface.
     
    constexpr std::array< double, 7 > franka::kMaxTorqueRate
     Maximum torque rate. More...
     
    constexpr std::array< double, 7 > franka::kMaxJointJerk
     Maximum joint jerk. More...
     
    constexpr std::array< double, 7 > franka::kMaxJointAcceleration
     Maximum joint acceleration. More...
     
    constexpr std::array< double, 7 > franka::kJointVelocityLimitsTolerance
     Tolerance value for joint velocity limits to deal with numerical errors and data losses. More...
     
    +constexpr double franka::kMaxTranslationalJerk = 4500.0 - kLimitEps
     Maximum translational jerk.
     
    +constexpr double franka::kMaxTranslationalAcceleration = 9.0000 - kLimitEps
     Maximum translational acceleration.
     
    constexpr double franka::kMaxTranslationalVelocity
     Maximum translational velocity. More...
     
    +constexpr double franka::kMaxRotationalJerk = 8500.0 - kLimitEps
     Maximum rotational jerk.
     
    +constexpr double franka::kMaxRotationalAcceleration = 17.0000 - kLimitEps
     Maximum rotational acceleration.
     
    constexpr double franka::kMaxRotationalVelocity
     Maximum rotational velocity. More...
     
    +constexpr double franka::kMaxElbowJerk = 5000 - kLimitEps
     Maximum elbow jerk.
     
    +constexpr double franka::kMaxElbowAcceleration = 10.0000 - kLimitEps
     Maximum elbow acceleration.
     
    constexpr double franka::kMaxElbowVelocity
     Maximum elbow velocity. More...
     
    +

    Detailed Description

    +

    Contains functions for limiting the rate of torques, Cartesian pose, Cartesian velocity, joint position and joint velocity.

    +

    Function Documentation

    + +

    ◆ computeLowerLimitsJointVelocity()

    + +
    +
    + + + + + +
    + + + + + + + + +
    std::array<double, 7> franka::computeLowerLimitsJointVelocity (const std::array< double, 7 > & q)
    +
    +inline
    +
    + +

    Computes the minimum joint velocity based on joint position.

    +
    Note
    The implementation is based on https://frankaemika.github.io/docs/control_parameters.html#limits-for-franka-research-3.
    +
    Parameters
    + + +
    [in]qjoint position.
    +
    +
    +
    Returns
    Lower limits of joint velocity at the given joint position.
    + +
    +
    + +

    ◆ computeUpperLimitsJointVelocity()

    + +
    +
    + + + + + +
    + + + + + + + + +
    std::array<double, 7> franka::computeUpperLimitsJointVelocity (const std::array< double, 7 > & q)
    +
    +inline
    +
    + +

    Computes the maximum joint velocity based on joint position.

    +
    Note
    The implementation is based on https://frankaemika.github.io/docs/control_parameters.html#limits-for-franka-research-3.
    +
    Parameters
    + + +
    [in]qjoint position.
    +
    +
    +
    Returns
    Upper limits of joint velocity at the given joint position.
    + +
    +
    + +

    ◆ limitRate() [1/7]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    std::array<double, 7> franka::limitRate (const std::array< double, 7 > & max_derivatives,
    const std::array< double, 7 > & commanded_values,
    const std::array< double, 7 > & last_commanded_values 
    )
    +
    + +

    Limits the rate of an input vector of per-joint commands considering the maximum allowed time derivatives.

    +
    Note
    FCI filters must be deactivated to work properly.
    +
    Parameters
    + + + + +
    [in]max_derivativesPer-joint maximum allowed time derivative.
    [in]commanded_valuesCommanded values of the current time step.
    [in]last_commanded_valuesCommanded values of the previous time step.
    +
    +
    +
    Exceptions
    + + +
    std::invalid_argumentif commanded_values are infinite or NaN.
    +
    +
    +
    Returns
    Rate-limited vector of desired values.
    +
    Examples
    joint_impedance_control.cpp.
    +
    + +
    +
    + +

    ◆ limitRate() [2/7]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    std::array<double, 7> franka::limitRate (const std::array< double, 7 > & upper_limits_velocity,
    const std::array< double, 7 > & lower_limits_velocity,
    const std::array< double, 7 > & max_acceleration,
    const std::array< double, 7 > & max_jerk,
    const std::array< double, 7 > & commanded_positions,
    const std::array< double, 7 > & last_commanded_positions,
    const std::array< double, 7 > & last_commanded_velocities,
    const std::array< double, 7 > & last_commanded_accelerations 
    )
    +
    + +

    Limits the rate of a desired joint position considering the limits provided.

    +
    Note
    FCI filters must be deactivated to work properly.
    +
    Parameters
    + + + + + + + + + +
    [in]upper_limits_velocityPer-joint upper limits of allowed velocity.
    [in]lower_limits_velocityPer-joint lower limits of allowed velocity.
    [in]max_accelerationPer-joint maximum allowed acceleration.
    [in]max_jerkPer-joint maximum allowed jerk.
    [in]commanded_positionsCommanded joint positions of the current time step.
    [in]last_commanded_positionsCommanded joint positions of the previous time step.
    [in]last_commanded_velocitiesCommanded joint velocities of the previous time step.
    [in]last_commanded_accelerationsCommanded joint accelerations of the previous time step.
    +
    +
    +
    Exceptions
    + + +
    std::invalid_argumentif commanded_positions are infinite or NaN.
    +
    +
    +
    Returns
    Rate-limited vector of desired joint positions.
    + +
    +
    + +

    ◆ limitRate() [3/7]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    std::array<double, 7> franka::limitRate (const std::array< double, 7 > & upper_limits_velocity,
    const std::array< double, 7 > & lower_limits_velocity,
    const std::array< double, 7 > & max_acceleration,
    const std::array< double, 7 > & max_jerk,
    const std::array< double, 7 > & commanded_velocities,
    const std::array< double, 7 > & last_commanded_velocities,
    const std::array< double, 7 > & last_commanded_accelerations 
    )
    +
    + +

    Limits the rate of a desired joint velocity considering the limits provided.

    +
    Note
    FCI filters must be deactivated to work properly.
    +
    Parameters
    + + + + + + + + +
    [in]upper_limits_velocityPer-joint upper limits of allowed velocity.
    [in]lower_limits_velocityPer-joint lower limits of allowed velocity.
    [in]max_accelerationPer-joint maximum allowed acceleration.
    [in]max_jerkPer-joint maximum allowed jerk.
    [in]commanded_velocitiesCommanded joint velocity of the current time step.
    [in]last_commanded_velocitiesCommanded joint velocities of the previous time step.
    [in]last_commanded_accelerationsCommanded joint accelerations of the previous time step.
    +
    +
    +
    Exceptions
    + + +
    std::invalid_argumentif commanded_velocities are infinite or NaN.
    +
    +
    +
    Returns
    Rate-limited vector of desired joint velocities.
    + +
    +
    + +

    ◆ limitRate() [4/7]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    std::array<double, 16> franka::limitRate (double max_translational_velocity,
    double max_translational_acceleration,
    double max_translational_jerk,
    double max_rotational_velocity,
    double max_rotational_acceleration,
    double max_rotational_jerk,
    const std::array< double, 16 > & O_T_EE_c,
    const std::array< double, 16 > & last_O_T_EE_c,
    const std::array< double, 6 > & last_O_dP_EE_c,
    const std::array< double, 6 > & last_O_ddP_EE_c 
    )
    +
    + +

    Limits the rate of a desired Cartesian pose considering the limits provided.

    +
    Note
    FCI filters must be deactivated to work properly.
    +
    Parameters
    + + + + + + + + + + + +
    [in]max_translational_velocityMaximum translational velocity.
    [in]max_translational_accelerationMaximum translational acceleration.
    [in]max_translational_jerkMaximum translational jerk.
    [in]max_rotational_velocityMaximum rotational velocity.
    [in]max_rotational_accelerationMaximum rotational acceleration.
    [in]max_rotational_jerkMaximum rotational jerk.
    [in]O_T_EE_cCommanded pose of the current time step.
    [in]last_O_T_EE_cCommanded pose of the previous time step.
    [in]last_O_dP_EE_cCommanded end effector twist of the previous time step.
    [in]last_O_ddP_EE_cCommanded end effector acceleration of the previous time step.
    +
    +
    +
    Exceptions
    + + +
    std::invalid_argumentif an element of O_T_EE_c is infinite or NaN.
    +
    +
    +
    Returns
    Rate-limited desired pose.
    + +
    +
    + +

    ◆ limitRate() [5/7]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    std::array<double, 6> franka::limitRate (double max_translational_velocity,
    double max_translational_acceleration,
    double max_translational_jerk,
    double max_rotational_velocity,
    double max_rotational_acceleration,
    double max_rotational_jerk,
    const std::array< double, 6 > & O_dP_EE_c,
    const std::array< double, 6 > & last_O_dP_EE_c,
    const std::array< double, 6 > & last_O_ddP_EE_c 
    )
    +
    + +

    Limits the rate of a desired Cartesian velocity considering the limits provided.

    +
    Note
    FCI filters must be deactivated to work properly.
    +
    Parameters
    + + + + + + + + + + +
    [in]max_translational_velocityMaximum translational velocity.
    [in]max_translational_accelerationMaximum translational acceleration.
    [in]max_translational_jerkMaximum translational jerk.
    [in]max_rotational_velocityMaximum rotational velocity.
    [in]max_rotational_accelerationMaximum rotational acceleration.
    [in]max_rotational_jerkMaximum rotational jerk.
    [in]O_dP_EE_cCommanded end effector twist of the current time step.
    [in]last_O_dP_EE_cCommanded end effector twist of the previous time step.
    [in]last_O_ddP_EE_cCommanded end effector acceleration of the previous time step.
    +
    +
    +
    Exceptions
    + + +
    std::invalid_argumentif an element of O_dP_EE_c is infinite or NaN.
    +
    +
    +
    Returns
    Rate-limited desired end effector twist.
    + +
    +
    + +

    ◆ limitRate() [6/7]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    double franka::limitRate (double upper_limits_velocity,
    double lower_limits_velocity,
    double max_acceleration,
    double max_jerk,
    double commanded_position,
    double last_commanded_position,
    double last_commanded_velocity,
    double last_commanded_acceleration 
    )
    +
    + +

    Limits the rate of a desired joint position considering the limits provided.

    +
    Note
    FCI filters must be deactivated to work properly.
    +
    Parameters
    + + + + + + + + + +
    [in]upper_limits_velocityUpper limits of allowed velocity.
    [in]lower_limits_velocityLower limits of allowed velocity.
    [in]max_accelerationMaximum allowed acceleration.
    [in]max_jerkMaximum allowed jerk.
    [in]commanded_positionCommanded joint position of the current time step.
    [in]last_commanded_positionCommanded joint position of the previous time step.
    [in]last_commanded_velocityCommanded joint velocity of the previous time step.
    [in]last_commanded_accelerationCommanded joint acceleration of the previous time step.
    +
    +
    +
    Exceptions
    + + +
    std::invalid_argumentif commanded_position is infinite or NaN.
    +
    +
    +
    Returns
    Rate-limited desired joint position.
    + +
    +
    + +

    ◆ limitRate() [7/7]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    double franka::limitRate (double upper_limits_velocity,
    double lower_limits_velocity,
    double max_acceleration,
    double max_jerk,
    double commanded_velocity,
    double last_commanded_velocity,
    double last_commanded_acceleration 
    )
    +
    + +

    Limits the rate of a desired joint velocity considering the limits provided.

    +
    Note
    FCI filters must be deactivated to work properly.
    +
    Parameters
    + + + + + + + + +
    [in]upper_limits_velocityUpper limits of allowed velocity.
    [in]lower_limits_velocityLower limits of allowed velocity.
    [in]max_accelerationMaximum allowed acceleration.
    [in]max_jerkMaximum allowed jerk.
    [in]commanded_velocityCommanded joint velocity of the current time step.
    [in]last_commanded_velocityCommanded joint velocity of the previous time step.
    [in]last_commanded_accelerationCommanded joint acceleration of the previous time step.
    +
    +
    +
    Exceptions
    + + +
    std::invalid_argumentif commanded_velocity is infinite or NaN.
    +
    +
    +
    Returns
    Rate-limited desired joint velocity.
    + +
    +
    +

    Variable Documentation

    + +

    ◆ kJointVelocityLimitsTolerance

    + +
    +
    + + + + + +
    + + + + +
    constexpr std::array<double, 7> franka::kJointVelocityLimitsTolerance
    +
    +constexpr
    +
    +Initial value:
    {
    + + + + + + + +
    }
    +
    constexpr double kDeltaT
    Sample time constant.
    Definition: rate_limiting.h:20
    +
    constexpr double kTolNumberPacketsLost
    Number of packets lost considered for the definition of velocity limits.
    Definition: rate_limiting.h:35
    +
    constexpr std::array< double, 7 > kMaxJointAcceleration
    Maximum joint acceleration.
    Definition: rate_limiting.h:55
    +
    constexpr double kLimitEps
    Epsilon value for checking limits.
    Definition: rate_limiting.h:24
    +
    +

    Tolerance value for joint velocity limits to deal with numerical errors and data losses.

    + +
    +
    + +

    ◆ kMaxElbowVelocity

    + +
    +
    + + + + + +
    + + + + +
    constexpr double franka::kMaxElbowVelocity
    +
    +constexpr
    +
    +Initial value:
    =
    + +
    constexpr double kMaxElbowAcceleration
    Maximum elbow acceleration.
    Definition: rate_limiting.h:103
    +
    +

    Maximum elbow velocity.

    + +
    +
    + +

    ◆ kMaxJointAcceleration

    + +
    +
    + + + + + +
    + + + + +
    constexpr std::array<double, 7> franka::kMaxJointAcceleration
    +
    +constexpr
    +
    +Initial value:
    {
    +
    {10.0000 - kLimitEps, 10.0000 - kLimitEps, 10.0000 - kLimitEps, 10.0000 - kLimitEps,
    +
    10.0000 - kLimitEps, 10.0000 - kLimitEps, 10.0000 - kLimitEps}}
    +
    +

    Maximum joint acceleration.

    + +
    +
    + +

    ◆ kMaxJointJerk

    + +
    +
    + + + + + +
    + + + + +
    constexpr std::array<double, 7> franka::kMaxJointJerk
    +
    +constexpr
    +
    +Initial value:
    {
    +
    {5000.0 - kLimitEps, 5000.0 - kLimitEps, 5000.0 - kLimitEps, 5000.0 - kLimitEps,
    +
    5000.0 - kLimitEps, 5000.0 - kLimitEps, 5000.0 - kLimitEps}}
    +
    +

    Maximum joint jerk.

    + +
    +
    + +

    ◆ kMaxRotationalVelocity

    + +
    +
    + + + + + +
    + + + + +
    constexpr double franka::kMaxRotationalVelocity
    +
    +constexpr
    +
    +Initial value:
    =
    + +
    constexpr double kMaxRotationalAcceleration
    Maximum rotational acceleration.
    Definition: rate_limiting.h:90
    +
    +

    Maximum rotational velocity.

    + +
    +
    + +

    ◆ kMaxTorqueRate

    + +
    +
    + + + + + +
    + + + + +
    constexpr std::array<double, 7> franka::kMaxTorqueRate
    +
    +constexpr
    +
    +Initial value:
    {
    +
    {1000 - kLimitEps, 1000 - kLimitEps, 1000 - kLimitEps, 1000 - kLimitEps, 1000 - kLimitEps,
    +
    1000 - kLimitEps, 1000 - kLimitEps}}
    +
    +

    Maximum torque rate.

    +
    Examples
    joint_impedance_control.cpp.
    +
    + +
    +
    + +

    ◆ kMaxTranslationalVelocity

    + +
    +
    + + + + + +
    + + + + +
    constexpr double franka::kMaxTranslationalVelocity
    +
    +constexpr
    +
    +Initial value:
    =
    + +
    constexpr double kMaxTranslationalAcceleration
    Maximum translational acceleration.
    Definition: rate_limiting.h:77
    +
    +

    Maximum translational velocity.

    + +
    +
    + +

    ◆ kTolNumberPacketsLost

    + +
    +
    + + + + + +
    + + + + +
    constexpr double franka::kTolNumberPacketsLost = 0.0
    +
    +constexpr
    +
    + +

    Number of packets lost considered for the definition of velocity limits.

    +

    When a packet is lost, FCI assumes a constant acceleration model. For FR3 there are no expected package loses. Therefore this number is set to 0. If you encounter package loses with your setup you can increase this number

    + +
    +
    +
    + + + + diff --git a/rate__limiting_8h__incl.map b/rate__limiting_8h__incl.map new file mode 100644 index 00000000..5d754c94 --- /dev/null +++ b/rate__limiting_8h__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/rate__limiting_8h__incl.md5 b/rate__limiting_8h__incl.md5 new file mode 100644 index 00000000..d8bb1bc3 --- /dev/null +++ b/rate__limiting_8h__incl.md5 @@ -0,0 +1 @@ +57c627e80ba2707574cf3a9c16db283a \ No newline at end of file diff --git a/rate__limiting_8h__incl.png b/rate__limiting_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..3737d46e04743b245d2ff0eb1c8ad7c7854f01f2 GIT binary patch literal 8972 zcmZ8{1yog0xAmow?(UH8kX8w40ZHj@Bm|W1F6r*>2I;tz3IYPsozmU$HsAaHG5+xe zW56Bfa`xGK?YY)md(IQ4{9YOzg#-lxfuPIENPd7oV06G|A7n)E`)!bs8~B50EH5ny zd3yfI=_rneK&T+Hl5f?%W*jVjd84X%hjeU@!%yVEN!Iv=9ABDz5oZ^o? zAO9?DWQ4@0GrZc)y3@sga-tzq2g<18B_ALoQx~x1n93tlbHDkKge7k38^=Z+IOK~m z4}*2$_4IHhBO_xdjF#8^E|LgFNlB>*YKhA@%Ulx}2(R1z72Dk0+%`lUPubdx zDnjh(>8WXK?Dt1N?TgN*fB*h{XjoXR_FaKp4z8(PWO+Hu{{Ft9g~gyN3u& zc?mT&yoSccS&Wcx=Hsz;q_`9mRmWkjOYLqlva)a8-Gy$?|K($aT`CT*IXF7@%+_1b zlVQj5$u&vlnwpvAHZu%O%}GXVOmgF zm@5&2aeRF2+tMNk$!TvVdwMwX!KS2)`Sa&PBry--r%#{8#>T#u+aVz#UEkgs4}GJC z_}<@pdS1?22sp06J3BioD=Yh=lk%@z9?XwTPY)JndutzE;N#=ZG};id8+1n2)p4I6 zEmJOgo}r_mquXTTg3(u@A<*Sz%CN97h%YX~d&9$pmh0W}>XnU+K=2ixxj%Tq}70R33{pDCXa|0n+;q%eEi&; z9Eh8nTWCy7NK6dolFyUZ&dyHv(vp6K^Y3y; zi!QtS<$l<|iQ;vDTbigI(ijTS-nIS+BQvw0LiyzI1y>WU2wVfbyh!}m*UqN$ImN}A zclItWE|6*;c0xQn-(Q<~U@Auo(%#-;yu7@-7wXN685v}d>Ue#L(Jaw`(o&|lxVW({ zA0JCAE57+;KfkvfPlNsas{m)>8X5%p9qtH_o#|?Wj%{8(MEeXeFOt^QR(nOShROf` z(FwM)@sW{{&mji^a6Xu8?B6agFQ1lImXeZceEJK3TdrBHtfr=xKC?s@^~%dpfb9Nu zuX^R|CaQ@NAU2j(x`{}7F?*atzr8z+&jtX_8jV7PC@n2bz;&O9UHAK#v9ODvu<&|y z*P}l`uDH1PSe2e|?A#~Tt-k})$H-a<0DvJy*fQ~GXlR_qeaL}9L965W(jZHrKjInE zS@&l0r7<%^JqQX53x`HV`lHE(t(#r`{XuxRy?}y^0kaDPq1j((sn<8ie-|Y#BZHhJ z;^zPJr`-M7=xePOC;GDTa%wE(ZwU#LyG)VbIwu;Oot<4tSs4uERg#O2jxMwj#a}U; zh$ogp=dDW zzb)GrdtkEkOTiHlzjQ9(>Bcds*Yap}#F1lRf!Sdc<`&uNEEPL9sQ!}Ha{gO-H_ z6+CPJfCvk~H-eCZ|8~yT7jnKkg(@Z{78(_0=X$$xwd@m8U(W*uG%_&>$jQl>qw55~ zwzRQXAIp_M#=s!>x1ss@|2<@)SV_8Czayu#G%O64Aulfv7SMy`bQO84%U*C#0Mh#7 z!`;z>l4>D-eSLjwMh4oKFJE^4{mcEl{rf^rys1f4oN*SXMXh-wH!Y21a%yUCkz8C+ zu~I*XOZHr~xnb>Wdo;JS^o5?@;@m-|@E3x%|J+bGS;J~%?WD}=h=9SCt> zp7*!9@QgLuc!XWXrd&fNil2P*r58D!Ofkb6KI*ag7MgLsi#ZIs*n1r>lP)E-snvW) zhe0macYR`xjFRT}X^~EtKr&ZSrH=lnqM!hFzA1C?cc$ac;ykj=^!vfF+@cTvYf!b}Sf1}T3=P-!VlZ!a0AX=ttF9hDPDxCSj&?ft`*iRbALg0F7m zeo>0Abz9aj85rbC>9vE6un1fc;~B1!zvdx8*puNXDRlq~kxo~c$u-!it5Ym23{dm` zMG6k~RLE?_KRgUMUXx0dyrVviinf(4-`FCcW!#~QCU1*Y$#@YYwVZt1A{UVv#Vc#`3MMjvc`8Jz*1LKN^m(Cez9E?k}mUFY`-D8yiBjP z&&C~yc@?kynw}nCtLu^V@~|T^S3(hs zw@HodEL}{SlqVr)hK(k~(^9-AQad-Q$ia z3OH<#>$`bST686)4U*jr;1JtGa2Yy#ekQ7duFEWv7&rX&lR~_Em*gemY+Q3ff*KWw zCs=4~x{kkrkDkBRU53_2hE|^^d=P6W)Wm=ImX~j8a620ldV67^tgcRb@u;Tu-NC7@ zFWcuf*PyE^g^vZ6o&E0k-mP@xqCv3z?*3-;Z{CMMb`^Zi>CBJXu&MK`8=`a2i$j2xex9 z+%Z8ih+y2ZR&8Isw#UFADbBU^iCVXMS{hnCvpRDPJZ$V*EEHk^;d;%)@X_hMwf^-Q z6KOIhr*N&Xp5Y4AXv(YZfv9>caxZcMf*t{vT>_TcZ(k&SG@*xw$@+o%;2)sW({F}W zrTdY(p07TSk(Cu%rAJt6`a@u6*SePES8ou(&Ws9D`m4bj0=N*UUjTG4H0q*fXI!+_ za$Mi@W|Q62qRWu&YwDf|$emoXw8yUHf zrOECjn^va?4u?Ufu`ur+c%eG=4?a&1L@b)`*8f(r4yW;^b;BAX3z9>tvq@Vm-y(?( z>eFJYOZRZ3hu8*=1$qJ%Ufxr%moITT+Bvu;y2Jt$O^Q)=t)8`}$bnl3B9Nu;b&nSN1&cFe$}C z(&x2UKXPY<&)3A1c{9N^l{?AyY8o62Kto11g~DLE!RR$j82v?x(J5Tej013TP1X_~7-&CUm5DgN8d}iaj*`xwDIqDzIy@4EjkD&v z)ItA+!RQaGTvK@7>IZf(d*>ahCl)kqZj%8_&`yL#-lrWXYZn3rgoacDT_C^KcGk2B zYL%FfV0(Qnx%xYk;d(7X<@l^VASsDt-iS#!tv>OKBHQMNU`dbFUOhTG5#N{?V|tbx z@7T2V_GH_T31+W5*Zz}rif5V~8lsCNB@CXK@tMJp|2H06nepMgP?yb!2oco#-0IQ6 zr4EBy@@Oq)78_1$HLREK_aj{P%Ud;2LmX;;Gzie>Wb+s@=MeSzh?Tgm_G0d2}D3dX1722gm)Cd;C&tBq*nV`#A|LT#STN5R#9NaAEq-I4+?& zGkGW}tA6M3BRYW@IFRDRW!s)iB41k96Wa|(snf=D77oNxS zY{ck4Ma&Gpjy$aw92kgyjj+8_9+M>#b|ue$ck#w>g}0^UD7ishGMM3MR3tROQdT(x}P^_qfVhZC?KL*F%J!o)iYAs|GL86phq8JcY>qnQNaO zISArk+VwTsq}qlQD(?(wASUE8Yuc!3{Oz7}7K9j{ZaivrdUChA+Qneg{_P!i6u7_N z*NRqlPhuC1yuNnUZQTg57!Ak9aU$t@aK#m&AWTg)lH*c5-%)|Ne~6)BXGiBTN9!q5 z&t~qI;{Wh2c~4GN=i|?*vGj{HNKRgFfHGsBG^NYn!`ILKGZnnZYVderK$rsK|uU^G1znzxpK7 z8$~+8abop7VK3Pr!GlRtA~p2}qVKa~Z4D3TY@sDSC_LO69wD>4-lBgWk&%9LQ~mm4 znsnvl`*+V9F?d)byF3JeisekrKQ9$_B4)HGhf|C&UU%gKrN^V*$3$Hn{qZdOfsvy+ z&M4tDAkL0O#O)OJZ0iB}br&OYko^;tZG3yR($`@IPr8tOVe z8T5PRft#Cfb=4fEsVP`8krdxt3ApD7;^R-b#O>RZm5CI}H$l3$Z45`!tOUH=ne;o# z2Ch%`u<@L65)Z`Y-z6GFp&xV*;y@1NUqT0&MfesrDqJQ4oVD5xX6F(?R*n z32&$Zm60p-A6Vq%^qE}L*&P?Vp3wOC6d6?T@!1hE_M^S-IzL=<(6T27u<4jXXTF=% z%jd$w!W=G*#2T5_73cK^#mCbFnhI!X;R5v>hA`P{=ogD$jFRcWS)e%L+qVpkkDkmC z<3A}fsc`+ep1AgxDKT@8m*Mlkt%>UP&(*TiTiEkzks*b*^mT;F&zQ#tO@6mKaG+!d zCA-$Ai^th{(u^$i91lOyXU99^ zpC?Cnb=i^9(sn`1h5Pd5?LGpNu(N*!z3>5YxP~e`pS#r)w6d> z-k{A>Nae=zxD;SI_-bWUy4nq60qTgQ(+f5C*3(QnoA+8XAA#7#*Qx}L6tS6lf&CGf zyzadpXO-*h#GRb@3E1W$wqAa;whjbZ`5>iFLuE_x7JzNOQP!%HAZXg@yswSe)zlI^ zl2z3=L7_$!5Z38PbWm6OF4sbn%OopH92%)$?fTeR^v)NR@X&aoXxWU2SUACBlyCxM zSc<4H?9@~*L2`+MK=rnBdRnoK4L8po$K9HPZ*><%#L7yloF+#O6B!25ve(s%`-eRP zrom08M0Y81J&+#Y6o&n;MVva|sOxn|y~UA?AhWAVon1~v1x~$%bWTYLEbQBf7YWeS zH;M-rqpJ)`D79aX%svJ&PIGggQe(A0`mZ?%Twl(YYSs2;ZI;ZeZt-KJ^9%a_+Vq9G zb(FkjQ*6Nqg)FmDF5e;zhoYFBS7fI{;rGB z+bag$pM}n1gt;&%ErI4A1{of9XRjH$?1NNC9;YDcuI5`%fVR;20Dp4w?|M6%45)d0 zd=y|$8qXS;nRSVXjvWs(nz`9CJ=^%j!I3>YBJs@WXOivAF%kyFJt`SSvFmM)mj~PV z!94N9t;;|NCCMrj6Wz$PkFeZJPfxF;Tz;F?Q$Ne|UWA;-99O@yqOa8@yL+H0MshxB z>sr>MOG(Zh`O6ifng$9M<&nBa9|H%_XuG!~nhhfI4j(^$_~19+oW1rtv-rCk59*H} zN-FyLQPV60M1V{pkB>+3-O-zXU<(addfx=}Xcvih)nQ|euwd@KC=Z3Zw zs3se3vg}Bz1K&)aLA>!ox{CA1*!u!W<+L7*k$5kpFydTDxpvPC(7e z3)9(2Yh+u&GS#UqZ(u+P6re=yyOD!zfQe!y`PeM|(1r%_g5s|3m7aGF&b;y3B7gYJ zhf{(vrTAJ9i(?sB8gnJeYg{YSCg+l+xD(8|ar!}zdU7^e^q~}ix|{>o>hKE4L>e0T z;4Bv&^O`?a`*mevTpUfjw|2cxQbN0bbaZR4;t1bWVPys?MSo5qeTU?{1`+9(4`n$1 ze+;e5FjXh`9s4IiW6C#!@pcXG%ZETLaXe)D{|JPsbo0RIFqy8>tJ^922#18x2lTU9 zi~y`KmA_uv`cA=gOe3+C+?|4f-=^tKZp?+H85Qdk6%+#F<5dryMn*;ep7k$bX(W5+ zPQ@0F&)CBFO+~Zh;-7V-ELpnQx%v43=qgaxdx6biGhJoZrA`5dCWPbWsm}ph_EBT846T-QxrW1vOSv3OG<{RA~7DwJb-k%~il@L#87e zx!!yP^io?`A-hfzT7o3fdnn7{?<*Vy>DAMnnq z^gF_%NMGgYG=CbKnhL6~KhtTn!&i|%`e>(h>MNw_xP|kebeFdBnIlz@s7&b zs}VJLdV2b2b1E$C#ay#JCLtkVLSjeNCd=>6$px+OHYJvbU{%OkWHqDUv$hPBYQLr? zepXgihxGyU9}n0Ha4jt@3bwYk&=9E)s;bb1?~Vcg#`BRr?~LWn4ThkT4%}a_$22}s z@>%2Y*!*RE$-xohcDw?^JGZ0^*TxG4c z#hICu7S{ukGhjBE_xK|yw7DLnNJS8EAs`?OcX(V8(bCes~AgBo=k&jgO1# zZU1`WKU-^p^m(oCMX=G5oq_ePD7Hm5fs~UIcYH?1LRnWwqxRh+-@VAI`!0d?`47>+ zcr*d({PV~>fEyLW#bMVE4i?M0>Qf&WKjcjyi%?(&Afori(aSsBUjtn#J}WDlMYGCq zzR3=Fe<8rE@ec^FX|^ymT>)zJOsAJHFqr(WmOL=Q*7pOOC^r7gzQ3S9g3x4RD0bx} zt@B9LL_|b{6GR;NJ3UiV_@GXFy*;-&a0TKq8ZkG#kdP2K3UMfFYlkbQ^FP~_JG1o+ zKsjfawHHp}yUOC@A5e_)FgXAgmmv_$LqkI$$E}auz(50f0S(iW`kyPXZ)C5%$viIi zpV4@Je!jB5kLGdb!;%r!#u0WZSXN%>rTtO%w!W;a426%6@A$^k($doK`gm2V%e$j* zEm5WpRHNRNo`Br^d^liBU}9o|_O4)j+uXuJLRuOrQ|Q5?Ft+qxSMnF2oxYWlLKqkr zXpFho8P9i}Ck03#Wck~gj0#`^3t?tvwx*nze!AMFKu1RhtA4Aa)3#*dl3iUQ={8D2 zx*iVt-T8OMs3FK4uV#MCm!U@maf#qjBrAnx_0+ zLtWgt#S}>P5KPK}IV$JZz8bAx{-CTyBJ#wYEhmsXtqEf}au zdOgpvH74v&G>By|I%zP#EDa3}EKu)5%E~;|+i^f?=K}p3g~(T`*h|R_!?hy_1h(<{ zT>xVFxnlbA+LH`!GnC(1q7elJbkA03Qc@Bl2S>7k&(Yi)u+%_tYT&8n78M2e^+|$x zmj2kj+8KwVeHYmckoPS+J0>y`?fT|s>eDMezM#TF`h|ssZ}IT~6&0-C+uBS{H-78@ zk8H@%<#2(x*?##G_rGSdO0UtSMsncL1J{jOOzbf;`DiHOaIp=#v_yeQ$leF`NJUpS zlG5iMn?WfHuUu4RAnwxYhqXW!7Z=y@)s-~x-2c~IvtA~Y{km;xV{02(Q^P4BBn0Gq zC@6Qp9kIXUd;N6J15O}7si5rs{Tui^7!U{_U*p^Xz%dc0AtV@$*uP4z&G_l@p)%a& z=5$j47{k1Le0!NK^lKd!M}K}dSWR?qIvLs7=?T*ppkYvmgaTUy3e2veqN4BK4?-1{ zmHpQ83AF`Y+I1w+#fgdd0MMLnr=|_|%M|JScH*X{bikIUn=oSeT_ihFs#=@^todIJ zN+08=r;zK8cc)m2Ko$)H{^|cDL7_>@i0Y;rl~aF8+rONKI9vb_LrW&oq+zpmN; z@j`f8NT}J_-vf}R>B+{O3Vj8ajl{abe50!o_m(F!oS`+Gq3l`bixjN@|J)@hb2zO9u8c*|Kq$U l!(jEhVg+L5ZQwjn!XS*-ORkB22d}q4WToCqR*4(>{||C@HP8S6 literal 0 HcmV?d00001 diff --git a/rate__limiting_8h_source.html b/rate__limiting_8h_source.html new file mode 100644 index 00000000..e8ebbbf0 --- /dev/null +++ b/rate__limiting_8h_source.html @@ -0,0 +1,254 @@ + + + + + + + +Project: include/franka/rate_limiting.h Source File + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    rate_limiting.h
    +
    +
    +Go to the documentation of this file.
    1 // Copyright (c) 2023 Franka Robotics GmbH
    +
    2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
    +
    3 #pragma once
    +
    4 
    +
    5 #include <algorithm>
    +
    6 #include <array>
    +
    7 #include <cmath>
    +
    8 #include <limits>
    +
    9 
    +
    16 namespace franka {
    +
    20 constexpr double kDeltaT = 1e-3;
    +
    24 constexpr double kLimitEps = 1e-3;
    +
    28 constexpr double kNormEps = std::numeric_limits<double>::epsilon();
    +
    35 constexpr double kTolNumberPacketsLost = 0.0;
    +
    39 constexpr double kFactorCartesianRotationPoseInterface = 0.99;
    +
    43 constexpr std::array<double, 7> kMaxTorqueRate{
    +
    44  {1000 - kLimitEps, 1000 - kLimitEps, 1000 - kLimitEps, 1000 - kLimitEps, 1000 - kLimitEps,
    +
    45  1000 - kLimitEps, 1000 - kLimitEps}};
    +
    49 constexpr std::array<double, 7> kMaxJointJerk{
    +
    50  {5000.0 - kLimitEps, 5000.0 - kLimitEps, 5000.0 - kLimitEps, 5000.0 - kLimitEps,
    +
    51  5000.0 - kLimitEps, 5000.0 - kLimitEps, 5000.0 - kLimitEps}};
    +
    55 constexpr std::array<double, 7> kMaxJointAcceleration{
    +
    56  {10.0000 - kLimitEps, 10.0000 - kLimitEps, 10.0000 - kLimitEps, 10.0000 - kLimitEps,
    +
    57  10.0000 - kLimitEps, 10.0000 - kLimitEps, 10.0000 - kLimitEps}};
    +
    61 constexpr std::array<double, 7> kJointVelocityLimitsTolerance{
    + + + + + + + +
    69 };
    +
    73 constexpr double kMaxTranslationalJerk = 4500.0 - kLimitEps;
    +
    77 constexpr double kMaxTranslationalAcceleration = 9.0000 - kLimitEps;
    +
    81 constexpr double kMaxTranslationalVelocity =
    + +
    86 constexpr double kMaxRotationalJerk = 8500.0 - kLimitEps;
    +
    90 constexpr double kMaxRotationalAcceleration = 17.0000 - kLimitEps;
    +
    94 constexpr double kMaxRotationalVelocity =
    + +
    99 constexpr double kMaxElbowJerk = 5000 - kLimitEps;
    +
    103 constexpr double kMaxElbowAcceleration = 10.0000 - kLimitEps;
    +
    107 constexpr double kMaxElbowVelocity =
    + +
    109 
    +
    120 inline std::array<double, 7> computeUpperLimitsJointVelocity(const std::array<double, 7>& q) {
    +
    121  return std::array<double, 7>{
    +
    122  std::min(2.62, std::max(0.0, -0.30 + std::sqrt(std::max(0.0, 12.0 * (2.75010 - q[0]))))) -
    + +
    124  std::min(2.62, std::max(0.0, -0.20 + std::sqrt(std::max(0.0, 5.17 * (1.79180 - q[1]))))) -
    + +
    126  std::min(2.62, std::max(0.0, -0.20 + std::sqrt(std::max(0.0, 7.00 * (2.90650 - q[2]))))) -
    + +
    128  std::min(2.62, std::max(0.0, -0.30 + std::sqrt(std::max(0.0, 8.00 * (-0.1458 - q[3]))))) -
    + +
    130  std::min(5.26, std::max(0.0, -0.35 + std::sqrt(std::max(0.0, 34.0 * (2.81010 - q[4]))))) -
    + +
    132  std::min(4.18, std::max(0.0, -0.35 + std::sqrt(std::max(0.0, 11.0 * (4.52050 - q[5]))))) -
    + +
    134  std::min(5.26, std::max(0.0, -0.35 + std::sqrt(std::max(0.0, 34.0 * (3.01960 - q[6]))))) -
    + +
    136  };
    +
    137 }
    +
    138 
    +
    149 inline std::array<double, 7> computeLowerLimitsJointVelocity(const std::array<double, 7>& q) {
    +
    150  return std::array<double, 7>{
    +
    151  std::max(-2.62, std::min(0.0, 0.30 - std::sqrt(std::max(0.0, 12.0 * (2.750100 + q[0]))))) +
    + +
    153  std::max(-2.62, std::min(0.0, 0.20 - std::sqrt(std::max(0.0, 5.17 * (1.791800 + q[1]))))) +
    + +
    155  std::max(-2.62, std::min(0.0, 0.20 - std::sqrt(std::max(0.0, 7.00 * (2.906500 + q[2]))))) +
    + +
    157  std::max(-2.62, std::min(0.0, 0.30 - std::sqrt(std::max(0.0, 8.00 * (3.048100 + q[3]))))) +
    + +
    159  std::max(-5.26, std::min(0.0, 0.35 - std::sqrt(std::max(0.0, 34.0 * (2.810100 + q[4]))))) +
    + +
    161  std::max(-4.18, std::min(0.0, 0.35 - std::sqrt(std::max(0.0, 11.0 * (-0.54092 + q[5]))))) +
    + +
    163  std::max(-5.26, std::min(0.0, 0.35 - std::sqrt(std::max(0.0, 34.0 * (3.019600 + q[6]))))) +
    + +
    165  };
    +
    166 }
    +
    167 
    +
    183 std::array<double, 7> limitRate(const std::array<double, 7>& max_derivatives,
    +
    184  const std::array<double, 7>& commanded_values,
    +
    185  const std::array<double, 7>& last_commanded_values);
    +
    186 
    +
    205 double limitRate(double upper_limits_velocity,
    +
    206  double lower_limits_velocity,
    +
    207  double max_acceleration,
    +
    208  double max_jerk,
    +
    209  double commanded_velocity,
    +
    210  double last_commanded_velocity,
    +
    211  double last_commanded_acceleration);
    +
    212 
    +
    232 double limitRate(double upper_limits_velocity,
    +
    233  double lower_limits_velocity,
    +
    234  double max_acceleration,
    +
    235  double max_jerk,
    +
    236  double commanded_position,
    +
    237  double last_commanded_position,
    +
    238  double last_commanded_velocity,
    +
    239  double last_commanded_acceleration);
    +
    240 
    +
    259 std::array<double, 7> limitRate(const std::array<double, 7>& upper_limits_velocity,
    +
    260  const std::array<double, 7>& lower_limits_velocity,
    +
    261  const std::array<double, 7>& max_acceleration,
    +
    262  const std::array<double, 7>& max_jerk,
    +
    263  const std::array<double, 7>& commanded_velocities,
    +
    264  const std::array<double, 7>& last_commanded_velocities,
    +
    265  const std::array<double, 7>& last_commanded_accelerations);
    +
    266 
    +
    286 std::array<double, 7> limitRate(const std::array<double, 7>& upper_limits_velocity,
    +
    287  const std::array<double, 7>& lower_limits_velocity,
    +
    288  const std::array<double, 7>& max_acceleration,
    +
    289  const std::array<double, 7>& max_jerk,
    +
    290  const std::array<double, 7>& commanded_positions,
    +
    291  const std::array<double, 7>& last_commanded_positions,
    +
    292  const std::array<double, 7>& last_commanded_velocities,
    +
    293  const std::array<double, 7>& last_commanded_accelerations);
    +
    294 
    +
    315 std::array<double, 6> limitRate(
    +
    316  double max_translational_velocity,
    +
    317  double max_translational_acceleration,
    +
    318  double max_translational_jerk,
    +
    319  double max_rotational_velocity,
    +
    320  double max_rotational_acceleration,
    +
    321  double max_rotational_jerk,
    +
    322  const std::array<double, 6>& O_dP_EE_c, // NOLINT(readability-identifier-naming)
    +
    323  const std::array<double, 6>& last_O_dP_EE_c, // NOLINT(readability-identifier-naming)
    +
    324  const std::array<double, 6>& last_O_ddP_EE_c); // NOLINT(readability-identifier-naming)
    +
    325 
    +
    347 std::array<double, 16> limitRate(
    +
    348  double max_translational_velocity,
    +
    349  double max_translational_acceleration,
    +
    350  double max_translational_jerk,
    +
    351  double max_rotational_velocity,
    +
    352  double max_rotational_acceleration,
    +
    353  double max_rotational_jerk,
    +
    354  const std::array<double, 16>& O_T_EE_c, // NOLINT(readability-identifier-naming)
    +
    355  const std::array<double, 16>& last_O_T_EE_c, // NOLINT(readability-identifier-naming)
    +
    356  const std::array<double, 6>& last_O_dP_EE_c, // NOLINT(readability-identifier-naming)
    +
    357  const std::array<double, 6>& last_O_ddP_EE_c); // NOLINT(readability-identifier-naming)
    +
    358 
    +
    359 } // namespace franka
    +
    constexpr double kFactorCartesianRotationPoseInterface
    Factor for the definition of rotational limits using the Cartesian Pose interface.
    Definition: rate_limiting.h:39
    +
    constexpr double kDeltaT
    Sample time constant.
    Definition: rate_limiting.h:20
    +
    constexpr double kMaxRotationalJerk
    Maximum rotational jerk.
    Definition: rate_limiting.h:86
    +
    constexpr double kMaxElbowVelocity
    Maximum elbow velocity.
    Definition: rate_limiting.h:107
    +
    constexpr double kMaxTranslationalAcceleration
    Maximum translational acceleration.
    Definition: rate_limiting.h:77
    +
    constexpr std::array< double, 7 > kJointVelocityLimitsTolerance
    Tolerance value for joint velocity limits to deal with numerical errors and data losses.
    Definition: rate_limiting.h:61
    +
    std::array< double, 7 > computeUpperLimitsJointVelocity(const std::array< double, 7 > &q)
    Computes the maximum joint velocity based on joint position.
    Definition: rate_limiting.h:120
    +
    constexpr double kNormEps
    Epsilon value for limiting Cartesian accelerations/jerks or not.
    Definition: rate_limiting.h:28
    +
    constexpr double kMaxTranslationalJerk
    Maximum translational jerk.
    Definition: rate_limiting.h:73
    +
    constexpr double kMaxRotationalAcceleration
    Maximum rotational acceleration.
    Definition: rate_limiting.h:90
    +
    constexpr std::array< double, 7 > kMaxJointJerk
    Maximum joint jerk.
    Definition: rate_limiting.h:49
    +
    constexpr double kTolNumberPacketsLost
    Number of packets lost considered for the definition of velocity limits.
    Definition: rate_limiting.h:35
    +
    constexpr std::array< double, 7 > kMaxTorqueRate
    Maximum torque rate.
    Definition: rate_limiting.h:43
    +
    std::array< double, 7 > computeLowerLimitsJointVelocity(const std::array< double, 7 > &q)
    Computes the minimum joint velocity based on joint position.
    Definition: rate_limiting.h:149
    +
    constexpr std::array< double, 7 > kMaxJointAcceleration
    Maximum joint acceleration.
    Definition: rate_limiting.h:55
    +
    constexpr double kMaxTranslationalVelocity
    Maximum translational velocity.
    Definition: rate_limiting.h:81
    +
    constexpr double kLimitEps
    Epsilon value for checking limits.
    Definition: rate_limiting.h:24
    +
    constexpr double kMaxRotationalVelocity
    Maximum rotational velocity.
    Definition: rate_limiting.h:94
    +
    constexpr double kMaxElbowJerk
    Maximum elbow jerk.
    Definition: rate_limiting.h:99
    +
    std::array< double, 7 > limitRate(const std::array< double, 7 > &max_derivatives, const std::array< double, 7 > &commanded_values, const std::array< double, 7 > &last_commanded_values)
    Limits the rate of an input vector of per-joint commands considering the maximum allowed time derivat...
    +
    constexpr double kMaxElbowAcceleration
    Maximum elbow acceleration.
    Definition: rate_limiting.h:103
    +
    + + + + diff --git a/robot_8h.html b/robot_8h.html new file mode 100644 index 00000000..7796a1c9 --- /dev/null +++ b/robot_8h.html @@ -0,0 +1,154 @@ + + + + + + + +Project: include/franka/robot.h File Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    robot.h File Reference
    +
    +
    + +

    Contains the franka::Robot type. +More...

    +
    #include <functional>
    +#include <memory>
    +#include <mutex>
    +#include <string>
    +#include <franka/control_types.h>
    +#include <franka/duration.h>
    +#include <franka/lowpass_filter.h>
    +#include <franka/robot_model_base.h>
    +#include <franka/robot_state.h>
    +#include <research_interface/robot/service_types.h>
    +#include <franka/commands/get_robot_model_command.hpp>
    +
    +Include dependency graph for robot.h:
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    +
    +This graph shows which files directly or indirectly include this file:
    +
    +
    + + + + + + + + +
    +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    class  franka::Robot
     Maintains a network connection to the robot, provides the current robot state, gives access to the model library and allows to control the robot. More...
     
    +

    Detailed Description

    +

    Contains the franka::Robot type.

    +
    + + + + diff --git a/robot_8h__dep__incl.map b/robot_8h__dep__incl.map new file mode 100644 index 00000000..c0c7a777 --- /dev/null +++ b/robot_8h__dep__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/robot_8h__dep__incl.md5 b/robot_8h__dep__incl.md5 new file mode 100644 index 00000000..edf1ab76 --- /dev/null +++ b/robot_8h__dep__incl.md5 @@ -0,0 +1 @@ +593b8bcdeee6aad6acb905fdb2260cdb \ No newline at end of file diff --git a/robot_8h__dep__incl.png b/robot_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..decc00c162668966e37cd6c1c848d87d34ee8cd3 GIT binary patch literal 17905 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 literal 0 HcmV?d00001 diff --git a/robot_8h__incl.map b/robot_8h__incl.map new file mode 100644 index 00000000..48f1474d --- /dev/null +++ b/robot_8h__incl.map @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/robot_8h__incl.md5 b/robot_8h__incl.md5 new file mode 100644 index 00000000..6c2962c0 --- /dev/null +++ b/robot_8h__incl.md5 @@ -0,0 +1 @@ +a6644437af3a66f09ecd13125262b89a \ No newline at end of file diff --git a/robot_8h__incl.png b/robot_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..ac389ba55aa3e4c522a87970bac1cf39a5148a26 GIT binary patch literal 73652 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

    j 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±25;MK#-O@R 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Ⓢ=_I=VKhT>jMox05j%qr9wE*~rN8%H(H!=5hUs&h6@MLq~?v0ZoRj-(Pq* zmd#C1ip)7qFMGEXH6|t!91b#Fox>A2FZ;R^Jb%Y%)9vr}V#V_wvWM0uG`{WwqpLEH zbC)Cm_i7a^@T;KPv1uGUFr$4FUtXJPFX=)}x zJ&+24sinF3`D!)$gg#qNPL2c_85wL>$_9NKfa6>+PJ_uJZl;M1?jAxSBKy@LT7I{q zzHI_9;sQs$0WfGZV2gXWWy_Ha1KaR8A4zm{b}Cp~7k3$!f*TneN*YG6Cj+6|(eJ?V zFG0OXQUnALuv;hVyeznCB=PYzor!C4Yiide|~uizYBkai-ThfwvZ4H z!+wMi)8{xAPIW72Tc|Tcdv%pA@Qv>8?~`=19&SzzwglquFSKJ51dGAn8)K#7fq0BI zgzxjr(2lN(TA-kye7o_Utj)T$oKs2Z$?v?Pi}{_}kC^Xyc=F*Q`bM>T`yy$>*y1k8 zBHGX2IjE_{ff-K$n1Gd+*-ep6yK~xCR9042Odl?>s%+rk;DGy_1kBG5!*RfU_%Oe# zOS)qI`pr^b-= zxD(vHNl8U@;2hF_bm%**qoXNnu)nUyZ@Xccd}0c_GW@Q@8MQkXQcK7F>VG)+^Jg}A znQA%PIiS~6RY!X81?nwm7&2KtO?+d##3v-*Ibi zmuO$^GF0`HQ`XeSh7Ew)!5^Mt9||P_xgIBoW3L3>7cCm zZ}53p8P&eb(Wr1(X(cV)Ta3Xzt>ZQTRBFzVAQtrC6S#D)Lds!F=+-jJN=+4lH@@2K zxI}NB_8&~}b)})C6a|x6B?W~DLPA1Vu9pp=S`=!b$tv6NdiNSrGqd6TezLsb)d!s6 zIK;#S;0=~_<9B5x7o%E<$no)UZcdJznOR;T_@#pPuNp)2AxH8yhojBfDq;01#RVM` zlMJBhlY`{f>D*m(a6Jos$#w>ESBy<+a(@+@0vUEMT@yXBTsJpAq_is1JJD*-0F z=4_2fuGPLxgT5jx`?0gSPAgGdoW6H{m_x@rlMTTnlbDwcmO>smPV;Z%fS(t*j+%hQ zOF&T25ICenB_(Z?JCu}^z`LF?G^E%%|4S&9hLKT8M8q4Yc;E&e1rzfsQ&LifX8>j} zS!fHBl$BM1Z3b}aLr4V+{ryoT2EfF|?qFRFZ2Gu0Z&hSuh(u7mkauyZ4iZZrDbhw> z5_BSt^}1lA+U}&uYFqTAeJoFhg*L1>X(~poT2-*|toAss2D69LscE5IoWHTx-g7B- zU_c&>X(c~=_y9g0@X}6u>DoGyT$`>SbEuixT>A&E8RdDy<#hJW&P-GotERRa*8IUK zc;hij#KX8-g)k9jU`rZ6I0#;{kTggdJimAfUJqGXGE`DgF}r{vQH&PmyGw32#%s69 z>SZAVQOPDxnw>9%hE<&Izb4@%RZk68aC>QBj)Mk&*4_J53i;BXRki)LwZ=9akWU43 z7Im1nD{6vcCWMljjSfHd&CK^6X<-m}A2K>2>(-?-N2PGBGpTwMT^?LS^~) zGvT)=e~56(kz9jvwAsn^Y6bzK{-MX82|6LC=FQaYkz-#cM@D&l;q@Q z*H~%|!4IV#;|gh*5Q!9Ngir#$U^Abpre?wFs%eoYMyyfw_G!okp>D;*Mm@$=_`iiN zVZpaBY(J{UXvzcoC|m&IYb=<*81Mp<1wA*{Sk6NFjrZ(Pt;HQ(*QMxo?J@uTArzF#*^WyTjWLZf5l^mY Q + + + + + + +Project: include/franka/robot.h Source File + + + + + + + + + + + +

    +
    +
    +
    robot.h
    +
    +
    +Go to the documentation of this file.
    1 // Copyright (c) 2023 Franka Robotics GmbH
    +
    2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
    +
    3 #pragma once
    +
    4 
    +
    5 #include <functional>
    +
    6 #include <memory>
    +
    7 #include <mutex>
    +
    8 #include <string>
    +
    9 
    +
    10 #include <franka/control_types.h>
    +
    11 #include <franka/duration.h>
    +
    12 #include <franka/lowpass_filter.h>
    +
    13 #include <franka/robot_model_base.h>
    +
    14 #include <franka/robot_state.h>
    +
    15 #include <research_interface/robot/service_types.h>
    +
    16 #include <franka/commands/get_robot_model_command.hpp>
    +
    17 
    +
    22 namespace franka {
    +
    23 
    +
    24 class Model;
    +
    25 
    +
    26 class ActiveControlBase;
    +
    27 
    +
    68 class Robot {
    +
    69  public:
    +
    73  using ServerVersion = uint16_t;
    +
    74 
    +
    87  explicit Robot(const std::string& franka_address,
    +
    88  RealtimeConfig realtime_config = RealtimeConfig::kEnforce,
    +
    89  size_t log_size = 50);
    +
    90 
    +
    96  Robot(Robot&& other) noexcept;
    +
    97 
    +
    105  Robot& operator=(Robot&& other) noexcept;
    +
    106 
    +
    110  virtual ~Robot() noexcept;
    +
    111 
    +
    175  void control(std::function<Torques(const RobotState&, franka::Duration)> control_callback,
    +
    176  bool limit_rate = false,
    +
    177  double cutoff_frequency = kDefaultCutoffFrequency);
    +
    178 
    +
    203  void control(
    +
    204  std::function<Torques(const RobotState&, franka::Duration)> control_callback,
    +
    205  std::function<JointPositions(const RobotState&, franka::Duration)> motion_generator_callback,
    +
    206  bool limit_rate = false,
    +
    207  double cutoff_frequency = kDefaultCutoffFrequency);
    +
    208 
    +
    233  void control(
    +
    234  std::function<Torques(const RobotState&, franka::Duration)> control_callback,
    +
    235  std::function<JointVelocities(const RobotState&, franka::Duration)> motion_generator_callback,
    +
    236  bool limit_rate = false,
    +
    237  double cutoff_frequency = kDefaultCutoffFrequency);
    +
    238 
    +
    263  void control(
    +
    264  std::function<Torques(const RobotState&, franka::Duration)> control_callback,
    +
    265  std::function<CartesianPose(const RobotState&, franka::Duration)> motion_generator_callback,
    +
    266  bool limit_rate = false,
    +
    267  double cutoff_frequency = kDefaultCutoffFrequency);
    +
    268 
    +
    293  void control(std::function<Torques(const RobotState&, franka::Duration)> control_callback,
    +
    294  std::function<CartesianVelocities(const RobotState&, franka::Duration)>
    +
    295  motion_generator_callback,
    +
    296  bool limit_rate = false,
    +
    297  double cutoff_frequency = kDefaultCutoffFrequency);
    +
    298 
    +
    321  void control(
    +
    322  std::function<JointPositions(const RobotState&, franka::Duration)> motion_generator_callback,
    +
    323  ControllerMode controller_mode = ControllerMode::kJointImpedance,
    +
    324  bool limit_rate = false,
    +
    325  double cutoff_frequency = kDefaultCutoffFrequency);
    +
    326 
    +
    349  void control(
    +
    350  std::function<JointVelocities(const RobotState&, franka::Duration)> motion_generator_callback,
    +
    351  ControllerMode controller_mode = ControllerMode::kJointImpedance,
    +
    352  bool limit_rate = false,
    +
    353  double cutoff_frequency = kDefaultCutoffFrequency);
    +
    354 
    +
    377  void control(
    +
    378  std::function<CartesianPose(const RobotState&, franka::Duration)> motion_generator_callback,
    +
    379  ControllerMode controller_mode = ControllerMode::kJointImpedance,
    +
    380  bool limit_rate = false,
    +
    381  double cutoff_frequency = kDefaultCutoffFrequency);
    +
    382 
    +
    405  void control(std::function<CartesianVelocities(const RobotState&, franka::Duration)>
    +
    406  motion_generator_callback,
    +
    407  ControllerMode controller_mode = ControllerMode::kJointImpedance,
    +
    408  bool limit_rate = false,
    +
    409  double cutoff_frequency = kDefaultCutoffFrequency);
    +
    410 
    +
    435  void read(std::function<bool(const RobotState&)> read_callback);
    +
    436 
    +
    449  virtual RobotState readOnce();
    +
    450 
    +
    465  auto getRobotModel() -> std::string;
    +
    466 
    +
    503  void setCollisionBehavior(const std::array<double, 7>& lower_torque_thresholds_acceleration,
    +
    504  const std::array<double, 7>& upper_torque_thresholds_acceleration,
    +
    505  const std::array<double, 7>& lower_torque_thresholds_nominal,
    +
    506  const std::array<double, 7>& upper_torque_thresholds_nominal,
    +
    507  const std::array<double, 6>& lower_force_thresholds_acceleration,
    +
    508  const std::array<double, 6>& upper_force_thresholds_acceleration,
    +
    509  const std::array<double, 6>& lower_force_thresholds_nominal,
    +
    510  const std::array<double, 6>& upper_force_thresholds_nominal);
    +
    511 
    +
    538  void setCollisionBehavior(const std::array<double, 7>& lower_torque_thresholds,
    +
    539  const std::array<double, 7>& upper_torque_thresholds,
    +
    540  const std::array<double, 6>& lower_force_thresholds,
    +
    541  const std::array<double, 6>& upper_force_thresholds);
    +
    542 
    + +
    555  const std::array<double, 7>& K_theta); // NOLINT(readability-identifier-naming)
    +
    556 
    + +
    572  const std::array<double, 6>& K_x); // NOLINT(readability-identifier-naming)
    +
    573 
    +
    588  void setGuidingMode(const std::array<bool, 6>& guiding_mode, bool elbow);
    +
    589 
    +
    602  void setK(const std::array<double, 16>& EE_T_K); // NOLINT(readability-identifier-naming)
    +
    603 
    +
    619  void setEE(const std::array<double, 16>& NE_T_EE); // NOLINT(readability-identifier-naming)
    +
    620 
    +
    637  void setLoad(double load_mass,
    +
    638  const std::array<double, 3>& F_x_Cload, // NOLINT(readability-identifier-naming)
    +
    639  const std::array<double, 9>& load_inertia);
    +
    640 
    + +
    650 
    +
    662  virtual std::unique_ptr<ActiveControlBase> startTorqueControl();
    +
    663 
    + +
    678  const research_interface::robot::Move::ControllerMode& control_type);
    +
    679 
    + +
    693  const research_interface::robot::Move::ControllerMode& control_type);
    +
    694 
    + +
    708  const research_interface::robot::Move::ControllerMode& control_type);
    +
    709 
    + +
    724  const research_interface::robot::Move::ControllerMode& control_type);
    +
    725 
    +
    735  void stop();
    +
    736 
    + +
    750 
    +
    751  // Loads the model library for the unittests mockRobotModel
    +
    752  Model loadModel(std::unique_ptr<RobotModelBase> robot_model);
    +
    753 
    +
    759  ServerVersion serverVersion() const noexcept;
    +
    760 
    +
    762  Robot(const Robot&) = delete;
    +
    763  Robot& operator=(const Robot&) = delete;
    +
    765 
    +
    766  class Impl;
    +
    767 
    +
    768  protected:
    +
    774  Robot(std::shared_ptr<Impl> robot_impl);
    +
    775 
    +
    779  Robot() = default;
    +
    780 
    +
    781  private:
    +
    796  template <typename T>
    +
    797  std::unique_ptr<ActiveControlBase> startControl(
    +
    798  const research_interface::robot::Move::ControllerMode& controller_type);
    +
    799 
    +
    800  std::shared_ptr<Impl> impl_;
    +
    801  std::mutex control_mutex_;
    +
    802 };
    +
    803 
    +
    804 } // namespace franka
    +
    Robot dynamic parameters computed from the URDF model with Pinocchio.
    Definition: robot_model_base.h:10
    +
    Allows the user to read the state of a Robot and to send new control commands after starting a contro...
    Definition: active_control_base.h:27
    +
    Stores values for Cartesian pose motion generation.
    Definition: control_types.h:127
    +
    Stores values for Cartesian velocity motion generation.
    Definition: control_types.h:211
    +
    Represents a duration with millisecond resolution.
    Definition: duration.h:19
    +
    Stores values for joint position motion generation.
    Definition: control_types.h:72
    +
    Stores values for joint velocity motion generation.
    Definition: control_types.h:99
    +
    Calculates poses of joints and dynamic properties of the robot.
    Definition: model.h:52
    +
    Maintains a network connection to the robot, provides the current robot state, gives access to the mo...
    Definition: robot.h:68
    +
    void control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)
    Starts a control loop for sending joint-level torque commands.
    +
    void setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds_acceleration, const std::array< double, 7 > &upper_torque_thresholds_acceleration, const std::array< double, 7 > &lower_torque_thresholds_nominal, const std::array< double, 7 > &upper_torque_thresholds_nominal, const std::array< double, 6 > &lower_force_thresholds_acceleration, const std::array< double, 6 > &upper_force_thresholds_acceleration, const std::array< double, 6 > &lower_force_thresholds_nominal, const std::array< double, 6 > &upper_force_thresholds_nominal)
    Changes the collision behavior.
    +
    Model loadModel()
    Loads the model library from the robot.
    +
    Robot & operator=(Robot &&other) noexcept
    Move-assigns this Robot from another Robot instance.
    +
    Robot(Robot &&other) noexcept
    Move-constructs a new Robot instance.
    +
    virtual std::unique_ptr< ActiveControlBase > startCartesianPoseControl(const research_interface::robot::Move::ControllerMode &control_type)
    Starts a new cartesian position motion generator.
    +
    ServerVersion serverVersion() const noexcept
    Returns the software version reported by the connected server.
    +
    auto getRobotModel() -> std::string
    +
    void stop()
    Stops all currently running motions.
    +
    void setGuidingMode(const std::array< bool, 6 > &guiding_mode, bool elbow)
    Locks or unlocks guiding mode movement in (x, y, z, roll, pitch, yaw).
    +
    virtual std::unique_ptr< ActiveControlBase > startTorqueControl()
    Starts a new torque controller.
    +
    void read(std::function< bool(const RobotState &)> read_callback)
    Starts a loop for reading the current robot state.
    +
    virtual std::unique_ptr< ActiveControlBase > startCartesianVelocityControl(const research_interface::robot::Move::ControllerMode &control_type)
    Starts a new cartesian velocity motion generator.
    +
    void setJointImpedance(const std::array< double, 7 > &K_theta)
    Sets the impedance for each joint in the internal controller.
    +
    virtual ~Robot() noexcept
    Closes the connection.
    +
    void setCartesianImpedance(const std::array< double, 6 > &K_x)
    Sets the Cartesian stiffness/compliance (for x, y, z, roll, pitch, yaw) in the internal controller.
    +
    virtual std::unique_ptr< ActiveControlBase > startJointPositionControl(const research_interface::robot::Move::ControllerMode &control_type)
    Starts a new joint position motion generator.
    +
    void setK(const std::array< double, 16 > &EE_T_K)
    Sets the transformation from end effector frame to stiffness frame.
    +
    uint16_t ServerVersion
    Version of the robot server.
    Definition: robot.h:73
    +
    virtual RobotState readOnce()
    Waits for a robot state update and returns it.
    +
    Robot(const std::string &franka_address, RealtimeConfig realtime_config=RealtimeConfig::kEnforce, size_t log_size=50)
    Establishes a connection with the robot.
    +
    virtual std::unique_ptr< ActiveControlBase > startJointVelocityControl(const research_interface::robot::Move::ControllerMode &control_type)
    Starts a new joint velocity motion generator.
    +
    void setEE(const std::array< double, 16 > &NE_T_EE)
    Sets the transformation from nominal end effector to end effector frame.
    +
    void automaticErrorRecovery()
    Runs automatic error recovery on the robot.
    +
    void setLoad(double load_mass, const std::array< double, 3 > &F_x_Cload, const std::array< double, 9 > &load_inertia)
    Sets dynamic parameters of a payload.
    +
    Stores joint-level torque commands without gravity and friction.
    Definition: control_types.h:45
    +
    Contains helper types for returning motion generation and joint-level torque commands.
    +
    ControllerMode
    Available controller modes for a franka::Robot.
    Definition: control_types.h:19
    +
    RealtimeConfig
    Used to decide whether to enforce realtime mode for a control loop thread.
    Definition: control_types.h:26
    +
    Contains the franka::Duration type.
    +
    Contains functions for filtering signals with a low-pass filter.
    +
    Contains the franka::RobotState types.
    +
    Describes the robot state.
    Definition: robot_state.h:34
    +
    + + + + diff --git a/robot__model_8h_source.html b/robot__model_8h_source.html new file mode 100644 index 00000000..3d27a9dd --- /dev/null +++ b/robot__model_8h_source.html @@ -0,0 +1,145 @@ + + + + + + + +Project: include/franka/robot_model.h Source File + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    robot_model.h
    +
    +
    +
    1 // Copyright (c) 2024 Franka Robotics GmbH
    +
    2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
    +
    3 #pragma once
    +
    4 
    +
    5 #include <pinocchio/algorithm/centroidal.hpp>
    +
    6 #include <pinocchio/algorithm/crba.hpp>
    +
    7 #include <pinocchio/algorithm/rnea.hpp>
    +
    8 #include <pinocchio/multibody/model.hpp>
    +
    9 #include <pinocchio/parsers/urdf.hpp>
    +
    10 #include <string>
    +
    11 
    +
    12 #include "franka/robot_model_base.h"
    +
    13 
    +
    14 namespace franka {
    +
    15 
    +
    19 class RobotModel : public RobotModelBase {
    +
    20  public:
    +
    21  RobotModel(const std::string& urdf);
    +
    22  void coriolis(const std::array<double, 7>& q,
    +
    23  const std::array<double, 7>& dq,
    +
    24  const std::array<double, 9>& i_total,
    +
    25  double m_total,
    +
    26  const std::array<double, 3>& f_x_ctotal,
    +
    27  std::array<double, 7>& c_ne) override;
    +
    28  void gravity(const std::array<double, 7>& q,
    +
    29  const std::array<double, 3>& g_earth,
    +
    30  double m_total,
    +
    31  const std::array<double, 3>& f_x_ctotal,
    +
    32  std::array<double, 7>& g_ne) override;
    +
    33  void mass(const std::array<double, 7>& q,
    +
    34  const std::array<double, 9>& i_total,
    +
    35  double m_total,
    +
    36  const std::array<double, 3>& f_x_ctotal,
    +
    37  std::array<double, 49>& m_ne) override;
    +
    38 
    +
    39  private:
    +
    44  void addInertiaToLastLink(const std::array<double, 9>& i_total,
    +
    45  double m_total,
    +
    46  const std::array<double, 3>& f_x_ctotal);
    +
    51  void computeDynamics(
    +
    52  const std::array<double, 9>& i_total,
    +
    53  double m_total,
    +
    54  const std::array<double, 3>& f_x_ctotal,
    +
    55  pinocchio::Data& data,
    +
    56  const std::function<void(pinocchio::Model&, pinocchio::Data&)>& compute_func);
    +
    57 
    +
    58  pinocchio::Model pinocchio_model_;
    +
    59  pinocchio::Inertia initial_last_link_inertia_;
    +
    60  pinocchio::FrameIndex last_link_frame_index_;
    +
    61  pinocchio::JointIndex last_joint_index_;
    +
    62 };
    +
    63 
    +
    64 } // namespace franka
    +
    Robot dynamic parameters computed from the URDF model with Pinocchio.
    Definition: robot_model_base.h:10
    +
    Implements RobotModelBase using Pinocchio.
    Definition: robot_model.h:19
    +
    void gravity(const std::array< double, 7 > &q, const std::array< double, 3 > &g_earth, double m_total, const std::array< double, 3 > &f_x_ctotal, std::array< double, 7 > &g_ne) override
    Calculates the gravity vector.
    +
    void mass(const std::array< double, 7 > &q, const std::array< double, 9 > &i_total, double m_total, const std::array< double, 3 > &f_x_ctotal, std::array< double, 49 > &m_ne) override
    Calculates the 7x7 mass matrix.
    +
    void coriolis(const std::array< double, 7 > &q, const std::array< double, 7 > &dq, const std::array< double, 9 > &i_total, double m_total, const std::array< double, 3 > &f_x_ctotal, std::array< double, 7 > &c_ne) override
    Calculates the Coriolis force vector (state-space equation): , in .
    +
    + + + + diff --git a/robot__model__base_8h_source.html b/robot__model__base_8h_source.html new file mode 100644 index 00000000..70cddff7 --- /dev/null +++ b/robot__model__base_8h_source.html @@ -0,0 +1,118 @@ + + + + + + + +Project: include/franka/robot_model_base.h Source File + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    robot_model_base.h
    +
    +
    +
    1 // Copyright (c) 2024 Franka Robotics GmbH
    +
    2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
    +
    3 #pragma once
    +
    4 
    +
    5 #include <array>
    +
    6 
    + +
    11  public:
    +
    12  virtual ~RobotModelBase() = default;
    +
    27  virtual void coriolis(const std::array<double, 7>& q,
    +
    28  const std::array<double, 7>& dq,
    +
    29  const std::array<double, 9>& i_total,
    +
    30  double m_total,
    +
    31  const std::array<double, 3>& f_x_ctotal,
    +
    32  std::array<double, 7>& c_ne) = 0;
    +
    43  virtual void gravity(const std::array<double, 7>& q,
    +
    44  const std::array<double, 3>& g_earth,
    +
    45  double m_total,
    +
    46  const std::array<double, 3>& f_x_ctotal,
    +
    47  std::array<double, 7>& g_ne) = 0;
    +
    48 
    +
    61  virtual void mass(const std::array<double, 7>& q,
    +
    62  const std::array<double, 9>& i_total,
    +
    63  double m_total,
    +
    64  const std::array<double, 3>& f_x_ctotal,
    +
    65  std::array<double, 49>& m_ne) = 0;
    +
    66 };
    +
    Robot dynamic parameters computed from the URDF model with Pinocchio.
    Definition: robot_model_base.h:10
    +
    virtual void coriolis(const std::array< double, 7 > &q, const std::array< double, 7 > &dq, const std::array< double, 9 > &i_total, double m_total, const std::array< double, 3 > &f_x_ctotal, std::array< double, 7 > &c_ne)=0
    Calculates the Coriolis force vector (state-space equation): , in .
    +
    virtual void gravity(const std::array< double, 7 > &q, const std::array< double, 3 > &g_earth, double m_total, const std::array< double, 3 > &f_x_ctotal, std::array< double, 7 > &g_ne)=0
    Calculates the gravity vector.
    +
    virtual void mass(const std::array< double, 7 > &q, const std::array< double, 9 > &i_total, double m_total, const std::array< double, 3 > &f_x_ctotal, std::array< double, 49 > &m_ne)=0
    Calculates the 7x7 mass matrix.
    +
    + + + + diff --git a/robot__state_8h.html b/robot__state_8h.html new file mode 100644 index 00000000..5c548535 --- /dev/null +++ b/robot__state_8h.html @@ -0,0 +1,243 @@ + + + + + + + +Project: include/franka/robot_state.h File Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    robot_state.h File Reference
    +
    +
    + +

    Contains the franka::RobotState types. +More...

    +
    #include <array>
    +#include <ostream>
    +#include <franka/duration.h>
    +#include <franka/errors.h>
    +
    +Include dependency graph for robot_state.h:
    +
    +
    + + + + + + + + + + +
    +
    +This graph shows which files directly or indirectly include this file:
    +
    +
    + + + + + + + + + + + + +
    +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    struct  franka::RobotState
     Describes the robot state. More...
     
    + + + + +

    +Enumerations

    enum class  franka::RobotMode {
    +  kOther +, kIdle +, kMove +, kGuiding +,
    +  kReflex +, kUserStopped +, kAutomaticErrorRecovery +
    + }
     Describes the robot's current mode.
     
    + + + + + + + +

    +Functions

    std::ostream & franka::operator<< (std::ostream &ostream, const franka::RobotState &robot_state)
     Streams the robot state as JSON object: {"field_name_1": [0,0,0,0,0,0,0], "field_name_2": [0,0,0,0,0,0], ...}. More...
     
    std::ostream & franka::operator<< (std::ostream &ostream, RobotMode robot_mode)
     Streams RobotMode in human-readable form. More...
     
    +

    Detailed Description

    +

    Contains the franka::RobotState types.

    +

    Function Documentation

    + +

    ◆ operator<<() [1/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    std::ostream& franka::operator<< (std::ostream & ostream,
    const franka::RobotStaterobot_state 
    )
    +
    + +

    Streams the robot state as JSON object: {"field_name_1": [0,0,0,0,0,0,0], "field_name_2": [0,0,0,0,0,0], ...}.

    +
    Parameters
    + + + +
    [in]ostreamOstream instance
    [in]robot_stateRobotState instance to stream
    +
    +
    +
    Returns
    Ostream instance
    + +
    +
    + +

    ◆ operator<<() [2/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    std::ostream& franka::operator<< (std::ostream & ostream,
    RobotMode robot_mode 
    )
    +
    + +

    Streams RobotMode in human-readable form.

    +
    Parameters
    + + + +
    [in]ostreamOstream instance
    [in]robot_modeRobotMode to stream
    +
    +
    +
    Returns
    Ostream instance
    + +
    +
    +
    + + + + diff --git a/robot__state_8h__dep__incl.map b/robot__state_8h__dep__incl.map new file mode 100644 index 00000000..0fad4be3 --- /dev/null +++ b/robot__state_8h__dep__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/robot__state_8h__dep__incl.md5 b/robot__state_8h__dep__incl.md5 new file mode 100644 index 00000000..8fa8f224 --- /dev/null +++ b/robot__state_8h__dep__incl.md5 @@ -0,0 +1 @@ +973a36e4032513bb7f4d07a325676715 \ No newline at end of file diff --git a/robot__state_8h__dep__incl.png b/robot__state_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..b05ab8d22a3faccc2772ea839a4be6f4033e9168 GIT binary patch literal 46603 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 I#?edv1*s)#1poj5 literal 0 HcmV?d00001 diff --git a/robot__state_8h__incl.map b/robot__state_8h__incl.map new file mode 100644 index 00000000..09049e04 --- /dev/null +++ b/robot__state_8h__incl.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/robot__state_8h__incl.md5 b/robot__state_8h__incl.md5 new file mode 100644 index 00000000..f027b933 --- /dev/null +++ b/robot__state_8h__incl.md5 @@ -0,0 +1 @@ +aeacef374b3e8fe87bf91bcf6657c6de \ No newline at end of file diff --git a/robot__state_8h__incl.png b/robot__state_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..fbae517d7d2a84992076520b42cf500740b68749 GIT binary patch literal 16165 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 + + + + + + +Project: include/franka/robot_state.h Source File + + + + + + + + + + + + +
    +
    +
    robot_state.h
    +
    +
    +Go to the documentation of this file.
    1 // Copyright (c) 2024 Franka Robotics GmbH
    +
    2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
    +
    3 #pragma once
    +
    4 
    +
    5 #include <array>
    +
    6 #include <ostream>
    +
    7 
    +
    8 #include <franka/duration.h>
    +
    9 #include <franka/errors.h>
    +
    10 
    +
    16 namespace franka {
    +
    17 
    +
    21 enum class RobotMode {
    +
    22  kOther,
    +
    23  kIdle,
    +
    24  kMove,
    +
    25  kGuiding,
    +
    26  kReflex,
    +
    27  kUserStopped,
    +
    28  kAutomaticErrorRecovery
    +
    29 };
    +
    30 
    +
    34 struct RobotState {
    +
    40  std::array<double, 16> O_T_EE{}; // NOLINT(readability-identifier-naming)
    +
    41 
    +
    47  std::array<double, 16> O_T_EE_d{}; // NOLINT(readability-identifier-naming)
    +
    48 
    +
    58  std::array<double, 16> F_T_EE{}; // NOLINT(readability-identifier-naming)
    +
    59 
    +
    69  std::array<double, 16> F_T_NE{}; // NOLINT(readability-identifier-naming)
    +
    70 
    +
    81  std::array<double, 16> NE_T_EE{}; // NOLINT(readability-identifier-naming)
    +
    82 
    +
    90  std::array<double, 16> EE_T_K{}; // NOLINT(readability-identifier-naming)
    +
    91 
    +
    96  double m_ee{};
    +
    97 
    +
    102  std::array<double, 9> I_ee{}; // NOLINT(readability-identifier-naming)
    +
    103 
    +
    108  std::array<double, 3> F_x_Cee{}; // NOLINT(readability-identifier-naming)
    +
    109 
    +
    114  double m_load{};
    +
    115 
    +
    120  std::array<double, 9> I_load{}; // NOLINT(readability-identifier-naming)
    +
    121 
    +
    126  std::array<double, 3> F_x_Cload{}; // NOLINT(readability-identifier-naming)
    +
    127 
    +
    132  double m_total{};
    +
    133 
    +
    139  std::array<double, 9> I_total{}; // NOLINT(readability-identifier-naming)
    +
    140 
    +
    146  std::array<double, 3> F_x_Ctotal{}; // NOLINT(readability-identifier-naming)
    +
    147 
    +
    161  std::array<double, 2> elbow{};
    +
    162 
    +
    176  std::array<double, 2> elbow_d{};
    +
    177 
    +
    191  std::array<double, 2> elbow_c{};
    +
    192 
    +
    200  std::array<double, 2> delbow_c{};
    +
    201 
    +
    209  std::array<double, 2> ddelbow_c{};
    +
    210 
    +
    215  std::array<double, 7> tau_J{}; // NOLINT(readability-identifier-naming)
    +
    216 
    +
    221  std::array<double, 7> tau_J_d{}; // NOLINT(readability-identifier-naming)
    +
    222 
    +
    227  std::array<double, 7> dtau_J{}; // NOLINT(readability-identifier-naming)
    +
    228 
    +
    233  std::array<double, 7> q{};
    +
    234 
    +
    239  std::array<double, 7> q_d{};
    +
    240 
    +
    245  std::array<double, 7> dq{};
    +
    246 
    +
    251  std::array<double, 7> dq_d{};
    +
    252 
    +
    257  std::array<double, 7> ddq_d{};
    +
    258 
    +
    265  std::array<double, 7> joint_contact{};
    +
    266 
    +
    273  std::array<double, 6> cartesian_contact{};
    +
    274 
    +
    282  std::array<double, 7> joint_collision{};
    +
    283 
    +
    291  std::array<double, 6> cartesian_collision{};
    +
    292 
    +
    299  std::array<double, 7> tau_ext_hat_filtered{};
    +
    300 
    +
    309  std::array<double, 6> O_F_ext_hat_K{}; // NOLINT(readability-identifier-naming)
    +
    310 
    +
    319  std::array<double, 6> K_F_ext_hat_K{}; // NOLINT(readability-identifier-naming)
    +
    320 
    +
    326  std::array<double, 6> O_dP_EE_d{}; // NOLINT(readability-identifier-naming)
    +
    327 
    +
    335  std::array<double, 3> O_ddP_O{}; // NOLINT(readability-identifier-naming)
    +
    336 
    +
    342  std::array<double, 16> O_T_EE_c{}; // NOLINT(readability-identifier-naming)
    +
    343 
    +
    349  std::array<double, 6> O_dP_EE_c{}; // NOLINT(readability-identifier-naming)
    +
    350 
    +
    357  std::array<double, 6> O_ddP_EE_c{}; // NOLINT(readability-identifier-naming)
    +
    358 
    +
    363  std::array<double, 7> theta{};
    +
    364 
    +
    369  std::array<double, 7> dtheta{};
    +
    370 
    + +
    375 
    + +
    380 
    + +
    389 
    +
    393  RobotMode robot_mode = RobotMode::kUserStopped;
    +
    394 
    + +
    402 };
    +
    403 
    +
    413 std::ostream& operator<<(std::ostream& ostream, const franka::RobotState& robot_state);
    +
    414 
    +
    423 std::ostream& operator<<(std::ostream& ostream, RobotMode robot_mode);
    +
    424 
    +
    425 } // namespace franka
    +
    Represents a duration with millisecond resolution.
    Definition: duration.h:19
    +
    Contains the franka::Duration type.
    +
    Contains the franka::Errors type.
    +
    std::ostream & operator<<(std::ostream &ostream, const Errors &errors)
    Streams the errors as JSON array.
    +
    RobotMode
    Describes the robot's current mode.
    Definition: robot_state.h:21
    +
    Enumerates errors that can occur while controlling a franka::Robot.
    Definition: errors.h:18
    +
    Describes the robot state.
    Definition: robot_state.h:34
    +
    Errors last_motion_errors
    Contains the errors that aborted the previous motion.
    Definition: robot_state.h:379
    +
    std::array< double, 2 > elbow_c
    Commanded elbow configuration.
    Definition: robot_state.h:191
    +
    std::array< double, 16 > O_T_EE
    Measured end effector pose in base frame.
    Definition: robot_state.h:40
    +
    std::array< double, 6 > O_dP_EE_d
    Desired end effector twist in base frame.
    Definition: robot_state.h:326
    +
    std::array< double, 2 > ddelbow_c
    Commanded elbow acceleration.
    Definition: robot_state.h:209
    +
    std::array< double, 7 > dtheta
    Motor velocity.
    Definition: robot_state.h:369
    +
    std::array< double, 2 > elbow_d
    Desired elbow configuration.
    Definition: robot_state.h:176
    +
    std::array< double, 7 > joint_collision
    Indicates which contact level is activated in which joint.
    Definition: robot_state.h:282
    +
    std::array< double, 16 > O_T_EE_c
    Last commanded end effector pose of motion generation in base frame.
    Definition: robot_state.h:342
    +
    std::array< double, 16 > O_T_EE_d
    Last desired end effector pose of motion generation in base frame.
    Definition: robot_state.h:47
    +
    std::array< double, 2 > elbow
    Elbow configuration.
    Definition: robot_state.h:161
    +
    std::array< double, 3 > F_x_Cload
    Configured center of mass of the external load with respect to flange frame.
    Definition: robot_state.h:126
    +
    RobotMode robot_mode
    Current robot mode.
    Definition: robot_state.h:393
    +
    std::array< double, 6 > O_dP_EE_c
    Last commanded end effector twist in base frame.
    Definition: robot_state.h:349
    +
    std::array< double, 6 > cartesian_collision
    Indicates which contact level is activated in which Cartesian dimension .
    Definition: robot_state.h:291
    +
    std::array< double, 2 > delbow_c
    Commanded elbow velocity.
    Definition: robot_state.h:200
    +
    std::array< double, 6 > O_F_ext_hat_K
    Estimated external wrench (force, torque) acting on stiffness frame, expressed relative to the base f...
    Definition: robot_state.h:309
    +
    std::array< double, 9 > I_load
    Configured rotational inertia matrix of the external load with respect to center of mass.
    Definition: robot_state.h:120
    +
    std::array< double, 7 > ddq_d
    Desired joint acceleration.
    Definition: robot_state.h:257
    +
    std::array< double, 16 > F_T_EE
    End effector frame pose in flange frame.
    Definition: robot_state.h:58
    +
    std::array< double, 7 > q_d
    Desired joint position.
    Definition: robot_state.h:239
    +
    std::array< double, 7 > tau_J_d
    Desired link-side joint torque sensor signals without gravity.
    Definition: robot_state.h:221
    +
    std::array< double, 7 > joint_contact
    Indicates which contact level is activated in which joint.
    Definition: robot_state.h:265
    +
    std::array< double, 3 > F_x_Ctotal
    Combined center of mass of the end effector load and the external load with respect to flange frame.
    Definition: robot_state.h:146
    +
    std::array< double, 9 > I_ee
    Configured rotational inertia matrix of the end effector load with respect to center of mass.
    Definition: robot_state.h:102
    +
    std::array< double, 6 > cartesian_contact
    Indicates which contact level is activated in which Cartesian dimension .
    Definition: robot_state.h:273
    +
    double m_total
    Sum of the mass of the end effector and the external load.
    Definition: robot_state.h:132
    +
    std::array< double, 16 > F_T_NE
    Nominal end effector frame pose in flange frame.
    Definition: robot_state.h:69
    +
    std::array< double, 3 > F_x_Cee
    Configured center of mass of the end effector load with respect to flange frame.
    Definition: robot_state.h:108
    +
    std::array< double, 6 > K_F_ext_hat_K
    Estimated external wrench (force, torque) acting on stiffness frame, expressed relative to the stiffn...
    Definition: robot_state.h:319
    +
    double m_load
    Configured mass of the external load.
    Definition: robot_state.h:114
    +
    std::array< double, 7 > theta
    Motor position.
    Definition: robot_state.h:363
    +
    Duration time
    Strictly monotonically increasing timestamp since robot start.
    Definition: robot_state.h:401
    +
    std::array< double, 3 > O_ddP_O
    Linear component of the acceleration of the robot's base, expressed in frame parallel to the base fra...
    Definition: robot_state.h:335
    +
    Errors current_errors
    Current error state.
    Definition: robot_state.h:374
    +
    std::array< double, 16 > NE_T_EE
    End effector frame pose in nominal end effector frame.
    Definition: robot_state.h:81
    +
    std::array< double, 6 > O_ddP_EE_c
    Last commanded end effector acceleration in base frame.
    Definition: robot_state.h:357
    +
    std::array< double, 7 > tau_ext_hat_filtered
    Low-pass filtered torques generated by external forces on the joints.
    Definition: robot_state.h:299
    +
    std::array< double, 7 > tau_J
    Measured link-side joint torque sensor signals.
    Definition: robot_state.h:215
    +
    std::array< double, 9 > I_total
    Combined rotational inertia matrix of the end effector load and the external load with respect to the...
    Definition: robot_state.h:139
    +
    std::array< double, 7 > q
    Measured joint position.
    Definition: robot_state.h:233
    +
    std::array< double, 7 > dtau_J
    Derivative of measured link-side joint torque sensor signals.
    Definition: robot_state.h:227
    +
    std::array< double, 16 > EE_T_K
    Stiffness frame pose in end effector frame.
    Definition: robot_state.h:90
    +
    std::array< double, 7 > dq_d
    Desired joint velocity.
    Definition: robot_state.h:251
    +
    double control_command_success_rate
    Percentage of the last 100 control commands that were successfully received by the robot.
    Definition: robot_state.h:388
    +
    std::array< double, 7 > dq
    Measured joint velocity.
    Definition: robot_state.h:245
    +
    double m_ee
    Configured mass of the end effector.
    Definition: robot_state.h:96
    +
    + + + + diff --git a/search/all_0.html b/search/all_0.html new file mode 100644 index 00000000..1ec5b2d5 --- /dev/null +++ b/search/all_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_0.js b/search/all_0.js new file mode 100644 index 00000000..5c0a85b1 --- /dev/null +++ b/search/all_0.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['active_5fcontrol_2eh_0',['active_control.h',['../active__control_8h.html',1,'']]], + ['active_5fcontrol_5fbase_2eh_1',['active_control_base.h',['../active__control__base_8h.html',1,'']]], + ['active_5fmotion_5fgenerator_2eh_2',['active_motion_generator.h',['../active__motion__generator_8h.html',1,'']]], + ['active_5ftorque_5fcontrol_2eh_3',['active_torque_control.h',['../active__torque__control_8h.html',1,'']]], + ['activecontrol_4',['ActiveControl',['../classfranka_1_1ActiveControl.html#a4aa09537fddbec6cf1eed05fdc147b30',1,'franka::ActiveControl::ActiveControl()'],['../classfranka_1_1ActiveControl.html',1,'franka::ActiveControl']]], + ['activecontrolbase_5',['ActiveControlBase',['../classfranka_1_1ActiveControlBase.html',1,'franka']]], + ['activemotiongenerator_6',['ActiveMotionGenerator',['../classfranka_1_1ActiveMotionGenerator.html',1,'franka']]], + ['activetorquecontrol_7',['ActiveTorqueControl',['../classfranka_1_1ActiveTorqueControl.html',1,'franka']]], + ['actual_5fpower_8',['actual_power',['../structfranka_1_1VacuumGripperState.html#a4230c68698cdbf6c1c560e181133bdc3',1,'franka::VacuumGripperState']]], + ['automaticerrorrecovery_9',['automaticErrorRecovery',['../classfranka_1_1Robot.html#af682aa673415718715bd859116bc2fed',1,'franka::Robot']]] +]; diff --git a/search/all_1.html b/search/all_1.html new file mode 100644 index 00000000..9f80e904 --- /dev/null +++ b/search/all_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_1.js b/search/all_1.js new file mode 100644 index 00000000..65296956 --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['base_5facceleration_5finitialization_5ftimeout_10',['base_acceleration_initialization_timeout',['../structfranka_1_1Errors.html#a4dc331a7ae3242ea43e6fbf7e21c695a',1,'franka::Errors']]], + ['base_5facceleration_5finvalid_5freading_11',['base_acceleration_invalid_reading',['../structfranka_1_1Errors.html#a8467b7b8a3a68c3e0be7adc39933cb0e',1,'franka::Errors']]], + ['bodyjacobian_12',['bodyJacobian',['../classfranka_1_1Model.html#a914a197a900a275799cf8d7461bb9d8a',1,'franka::Model::bodyJacobian(Frame frame, const franka::RobotState &robot_state) const'],['../classfranka_1_1Model.html#a9ceca00546fa221f15ddaa7c0d27c40e',1,'franka::Model::bodyJacobian(Frame frame, const std::array< double, 7 > &q, const std::array< double, 16 > &F_T_EE, const std::array< double, 16 > &EE_T_K) const']]] +]; diff --git a/search/all_10.html b/search/all_10.html new file mode 100644 index 00000000..3bf11961 --- /dev/null +++ b/search/all_10.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_10.js b/search/all_10.js new file mode 100644 index 00000000..c78c24a9 --- /dev/null +++ b/search/all_10.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['q_213',['q',['../classfranka_1_1JointPositions.html#a40e9098abe1c51cd48e17e41fbf78337',1,'franka::JointPositions::q()'],['../structfranka_1_1RobotState.html#ade3335d1ac2f6c44741a916d565f7091',1,'franka::RobotState::q()']]], + ['q_5fd_214',['q_d',['../structfranka_1_1RobotState.html#a706045af1b176049e9e56df755325bd2',1,'franka::RobotState']]] +]; diff --git a/search/all_11.html b/search/all_11.html new file mode 100644 index 00000000..c9f79d28 --- /dev/null +++ b/search/all_11.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_11.js b/search/all_11.js new file mode 100644 index 00000000..49a9fe70 --- /dev/null +++ b/search/all_11.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['rate_5flimiting_2eh_215',['rate_limiting.h',['../rate__limiting_8h.html',1,'']]], + ['read_216',['read',['../classfranka_1_1Robot.html#a82f85eed20426901a7e77b66c041664b',1,'franka::Robot']]], + ['readonce_217',['readOnce',['../classfranka_1_1VacuumGripper.html#aaa61bfd1027cf5dc2eb9e96536a9fabf',1,'franka::VacuumGripper::readOnce()'],['../classfranka_1_1Robot.html#ae3c3d7c5c4491a1e96a0a543931e899a',1,'franka::Robot::readOnce()'],['../classfranka_1_1Gripper.html#ab0afc8a41c9c5fff808e76851dcf23ce',1,'franka::Gripper::readOnce()'],['../classfranka_1_1ActiveControlBase.html#ae99dac6dae3b0dcd79104a1a404e42d0',1,'franka::ActiveControlBase::readOnce()'],['../classfranka_1_1ActiveControl.html#a55f5b94e5ac491e5b2ccc1782a873582',1,'franka::ActiveControl::readOnce()']]], + ['realtimeconfig_218',['RealtimeConfig',['../control__types_8h.html#aeede4f4629390fea21ca5e5a35a8a943',1,'franka']]], + ['realtimeexception_219',['RealtimeException',['../structfranka_1_1RealtimeException.html',1,'franka']]], + ['record_220',['Record',['../structfranka_1_1Record.html',1,'franka']]], + ['robot_221',['Robot',['../classfranka_1_1Robot.html',1,'franka::Robot'],['../classfranka_1_1ActiveMotionGenerator.html#a9f34d4a840b0d3e73fc3185af5fed175',1,'franka::ActiveMotionGenerator::Robot()'],['../classfranka_1_1ActiveTorqueControl.html#a9f34d4a840b0d3e73fc3185af5fed175',1,'franka::ActiveTorqueControl::Robot()'],['../classfranka_1_1Robot.html#ae63bc19390df3d54f3a270814df35eb6',1,'franka::Robot::Robot(const std::string &franka_address, RealtimeConfig realtime_config=RealtimeConfig::kEnforce, size_t log_size=50)'],['../classfranka_1_1Robot.html#a378d415475336082e81a35b9811dc6c2',1,'franka::Robot::Robot(Robot &&other) noexcept'],['../classfranka_1_1Robot.html#a7cb49336d7e8b261b590a364daff2913',1,'franka::Robot::Robot(std::shared_ptr< Impl > robot_impl)'],['../classfranka_1_1Robot.html#abf60ce0434f4dc262f04fcab0beff5ac',1,'franka::Robot::Robot()=default']]], + ['robot_2eh_222',['robot.h',['../robot_8h.html',1,'']]], + ['robot_5fimpl_223',['robot_impl',['../classfranka_1_1ActiveControl.html#a94e725adb409391547a260f204c74564',1,'franka::ActiveControl']]], + ['robot_5fmode_224',['robot_mode',['../structfranka_1_1RobotState.html#a4943ae75e0e2ec534e0afac31cbcc987',1,'franka::RobotState']]], + ['robot_5fstate_2eh_225',['robot_state.h',['../robot__state_8h.html',1,'']]], + ['robotcommand_226',['RobotCommand',['../structfranka_1_1RobotCommand.html',1,'franka']]], + ['robotmode_227',['RobotMode',['../robot__state_8h.html#adfe059ae23ebbad59e421edaa879651a',1,'franka']]], + ['robotmodel_228',['RobotModel',['../classfranka_1_1RobotModel.html',1,'franka']]], + ['robotmodelbase_229',['RobotModelBase',['../classRobotModelBase.html',1,'']]], + ['robotstate_230',['RobotState',['../structfranka_1_1RobotState.html',1,'franka']]] +]; diff --git a/search/all_12.html b/search/all_12.html new file mode 100644 index 00000000..ab934722 --- /dev/null +++ b/search/all_12.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_12.js b/search/all_12.js new file mode 100644 index 00000000..e977989b --- /dev/null +++ b/search/all_12.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['self_5fcollision_5favoidance_5fviolation_231',['self_collision_avoidance_violation',['../structfranka_1_1Errors.html#adf68f6333624cb5558864441a991de8c',1,'franka::Errors']]], + ['server_5fversion_232',['server_version',['../structfranka_1_1IncompatibleVersionException.html#a0928098d8c32f405d17b65a0f004b5ab',1,'franka::IncompatibleVersionException']]], + ['serverversion_233',['ServerVersion',['../classfranka_1_1Gripper.html#a613bf52d9433b733685d0fb9ea71602e',1,'franka::Gripper::ServerVersion()'],['../classfranka_1_1Robot.html#ad1dd3dccff6f33691d2c66eaa5ac5a10',1,'franka::Robot::ServerVersion()'],['../classfranka_1_1VacuumGripper.html#a7b1d752680134e2a9df347002c6ace61',1,'franka::VacuumGripper::ServerVersion()']]], + ['serverversion_234',['serverVersion',['../classfranka_1_1Gripper.html#a8b0b4246c042465fb00871b31efdbd8b',1,'franka::Gripper::serverVersion()'],['../classfranka_1_1Robot.html#a3b864e16b7accafdf1a755dc21765701',1,'franka::Robot::serverVersion()'],['../classfranka_1_1VacuumGripper.html#a19abac44be2fc6df7f54fa11078a13ca',1,'franka::VacuumGripper::serverVersion()']]], + ['setcartesianimpedance_235',['setCartesianImpedance',['../classfranka_1_1Robot.html#ac2678c5c31cc8c0627ecda7485f81f6d',1,'franka::Robot']]], + ['setcollisionbehavior_236',['setCollisionBehavior',['../classfranka_1_1Robot.html#a168e1214ac36d74ac64f894332b84534',1,'franka::Robot::setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds_acceleration, const std::array< double, 7 > &upper_torque_thresholds_acceleration, const std::array< double, 7 > &lower_torque_thresholds_nominal, const std::array< double, 7 > &upper_torque_thresholds_nominal, const std::array< double, 6 > &lower_force_thresholds_acceleration, const std::array< double, 6 > &upper_force_thresholds_acceleration, const std::array< double, 6 > &lower_force_thresholds_nominal, const std::array< double, 6 > &upper_force_thresholds_nominal)'],['../classfranka_1_1Robot.html#aa188f58c9025594be4d1700da744a962',1,'franka::Robot::setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds, const std::array< double, 7 > &upper_torque_thresholds, const std::array< double, 6 > &lower_force_thresholds, const std::array< double, 6 > &upper_force_thresholds)']]], + ['setcurrentthreadtohighestschedulerpriority_237',['setCurrentThreadToHighestSchedulerPriority',['../control__tools_8h.html#a5c090196bc50ead82194d3e594e61e65',1,'franka']]], + ['setdefaultbehavior_238',['setDefaultBehavior',['../examples__common_8h.html#ad0c6e1cb044845ee8a01b5aa1e801a45',1,'examples_common.cpp']]], + ['setee_239',['setEE',['../classfranka_1_1Robot.html#aec4abdefbc0f9a7400a36bfa0a6068af',1,'franka::Robot']]], + ['setguidingmode_240',['setGuidingMode',['../classfranka_1_1Robot.html#a7992cee203e66f9a61fe2f318ef88a26',1,'franka::Robot']]], + ['setjointimpedance_241',['setJointImpedance',['../classfranka_1_1Robot.html#aa18a28697cf6e3be16c6cff2dd839560',1,'franka::Robot']]], + ['setk_242',['setK',['../classfranka_1_1Robot.html#ad1cf59d1b11306d80cd3c7144a989c56',1,'franka::Robot']]], + ['setload_243',['setLoad',['../classfranka_1_1Robot.html#afcb708df10f24563dbcf7d5b907b4a15',1,'franka::Robot']]], + ['start_5felbow_5fsign_5finconsistent_244',['start_elbow_sign_inconsistent',['../structfranka_1_1Errors.html#aa6de1956ac056792a1dea6b9ddd52a50',1,'franka::Errors']]], + ['startcartesianposecontrol_245',['startCartesianPoseControl',['../classfranka_1_1Robot.html#a3822866cf931fab955d3dcfc6cf746e5',1,'franka::Robot']]], + ['startcartesianvelocitycontrol_246',['startCartesianVelocityControl',['../classfranka_1_1Robot.html#a838e2cfba6b08dd87742bbcfe62f15bf',1,'franka::Robot']]], + ['startjointpositioncontrol_247',['startJointPositionControl',['../classfranka_1_1Robot.html#aca7ecf76cf9c5af49cc5a878c91e19a9',1,'franka::Robot']]], + ['startjointvelocitycontrol_248',['startJointVelocityControl',['../classfranka_1_1Robot.html#ae9c867d10817b2485e306450f389a009',1,'franka::Robot']]], + ['starttorquecontrol_249',['startTorqueControl',['../classfranka_1_1Robot.html#a8146de9e50217068672b6f726a91de91',1,'franka::Robot']]], + ['state_250',['state',['../structfranka_1_1Record.html#a58249658c9549fbc792eea90e7b6a7cc',1,'franka::Record']]], + ['stop_251',['stop',['../classfranka_1_1Gripper.html#add7397fb6c5631650c139d26a85c8e1d',1,'franka::Gripper::stop()'],['../classfranka_1_1Robot.html#a69cb08e075a81ecf3f26e94d26a06296',1,'franka::Robot::stop()'],['../classfranka_1_1VacuumGripper.html#a3722fe5488c516b4082c878a083cc865',1,'franka::VacuumGripper::stop()']]] +]; diff --git a/search/all_13.html b/search/all_13.html new file mode 100644 index 00000000..51172c2f --- /dev/null +++ b/search/all_13.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_13.js b/search/all_13.js new file mode 100644 index 00000000..06230184 --- /dev/null +++ b/search/all_13.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['tau_5fext_5fhat_5ffiltered_252',['tau_ext_hat_filtered',['../structfranka_1_1RobotState.html#acdef8005828d193e45b128085a9e363b',1,'franka::RobotState']]], + ['tau_5fj_253',['tau_J',['../classfranka_1_1Torques.html#ac2a266cc2d3b7e0fb4f8eff045dbaed8',1,'franka::Torques::tau_J()'],['../structfranka_1_1RobotState.html#ad90e2518d661da0d8fa4c864bae210e5',1,'franka::RobotState::tau_J()']]], + ['tau_5fj_5fd_254',['tau_J_d',['../structfranka_1_1RobotState.html#a7086a89a2705810f93a3a95d43df2d9d',1,'franka::RobotState']]], + ['tau_5fj_5frange_5fviolation_255',['tau_j_range_violation',['../structfranka_1_1Errors.html#a1491f8428341649befa3d088aebb317e',1,'franka::Errors']]], + ['temperature_256',['temperature',['../structfranka_1_1GripperState.html#aa6733fa786dbf3b073acbaf3779e34b3',1,'franka::GripperState']]], + ['theta_257',['theta',['../structfranka_1_1RobotState.html#aa34145d77dd411d7ca578c355f0ba2b4',1,'franka::RobotState']]], + ['time_258',['time',['../structfranka_1_1GripperState.html#a80bf474b0e4351e2eefab62d1bd10c07',1,'franka::GripperState::time()'],['../structfranka_1_1RobotState.html#aabfdabeaef8c1858c52dd32344bdd039',1,'franka::RobotState::time()'],['../structfranka_1_1VacuumGripperState.html#aaa98eb6e1888094aace2014121a468ab',1,'franka::VacuumGripperState::time()']]], + ['tomsec_259',['toMSec',['../classfranka_1_1Duration.html#a2a25ae33c8739b8f705f13798aa9e162',1,'franka::Duration']]], + ['torques_260',['Torques',['../classfranka_1_1Torques.html',1,'franka']]], + ['torques_261',['torques',['../structfranka_1_1RobotCommand.html#a8b23e8b669b1fd594988ecdbf54bfbce',1,'franka::RobotCommand']]], + ['torques_262',['Torques',['../classfranka_1_1Torques.html#a509d63195827289ffc645e4b62a9750d',1,'franka::Torques::Torques(const std::array< double, 7 > &torques) noexcept'],['../classfranka_1_1Torques.html#a744a08e16dcfc40b3a90ab6a85bac0d8',1,'franka::Torques::Torques(std::initializer_list< double > torques)']]], + ['tosec_263',['toSec',['../classfranka_1_1Duration.html#a497af77a3280159547f231f0374e9ac1',1,'franka::Duration']]] +]; diff --git a/search/all_14.html b/search/all_14.html new file mode 100644 index 00000000..afecf563 --- /dev/null +++ b/search/all_14.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_14.js b/search/all_14.js new file mode 100644 index 00000000..c4d7eeba --- /dev/null +++ b/search/all_14.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['vacuum_264',['vacuum',['../structfranka_1_1VacuumGripperState.html#ae94720737193caa696a47563a8efe6a8',1,'franka::VacuumGripperState::vacuum()'],['../classfranka_1_1VacuumGripper.html#a517d95d9800990ca1a5892473c2def89',1,'franka::VacuumGripper::vacuum()']]], + ['vacuum_5fgripper_2eh_265',['vacuum_gripper.h',['../vacuum__gripper_8h.html',1,'']]], + ['vacuum_5fgripper_5fstate_2eh_266',['vacuum_gripper_state.h',['../vacuum__gripper__state_8h.html',1,'']]], + ['vacuumgripper_267',['VacuumGripper',['../classfranka_1_1VacuumGripper.html',1,'franka::VacuumGripper'],['../classfranka_1_1VacuumGripper.html#ab5d8483a0bb16136da684cfac721eae1',1,'franka::VacuumGripper::VacuumGripper(const std::string &franka_address)'],['../classfranka_1_1VacuumGripper.html#ab80730b14b5948eea37395e87800ce5f',1,'franka::VacuumGripper::VacuumGripper(VacuumGripper &&vacuum_gripper) noexcept']]], + ['vacuumgripperdevicestatus_268',['VacuumGripperDeviceStatus',['../vacuum__gripper__state_8h.html#a423e2ce5f95933b9897c6e308d91b611',1,'franka']]], + ['vacuumgripperstate_269',['VacuumGripperState',['../structfranka_1_1VacuumGripperState.html',1,'franka']]] +]; diff --git a/search/all_15.html b/search/all_15.html new file mode 100644 index 00000000..69f382b3 --- /dev/null +++ b/search/all_15.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_15.js b/search/all_15.js new file mode 100644 index 00000000..ddb3f645 --- /dev/null +++ b/search/all_15.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['width_270',['width',['../structfranka_1_1GripperState.html#adf095f446ec39a9a48e120b209dcd6e9',1,'franka::GripperState']]], + ['writeonce_271',['writeOnce',['../classfranka_1_1ActiveControlBase.html#a070846c3bd259aa703848d984a82e43d',1,'franka::ActiveControlBase::writeOnce()'],['../classfranka_1_1ActiveTorqueControl.html#acc3b1d8c41cd191786e384887adf5da2',1,'franka::ActiveTorqueControl::writeOnce()'],['../classfranka_1_1ActiveMotionGenerator.html#aae24c0819a0bd0996657063832245d69',1,'franka::ActiveMotionGenerator::writeOnce()'],['../classfranka_1_1ActiveControlBase.html#a35ad38e4c512e34b0c82b081cefe4020',1,'franka::ActiveControlBase::writeOnce(const CartesianVelocities &motion_generator_input)=0'],['../classfranka_1_1ActiveControlBase.html#a9b05a521b8ab9d1af6c58b3d1fbcf12f',1,'franka::ActiveControlBase::writeOnce(const CartesianPose &motion_generator_input)=0'],['../classfranka_1_1ActiveControlBase.html#ae00c5b9387e21b76443ddfd173f7d01e',1,'franka::ActiveControlBase::writeOnce(const JointVelocities &motion_generator_input)=0'],['../classfranka_1_1ActiveControlBase.html#a800a13f3d6d12408dbff3afc8d072af2',1,'franka::ActiveControlBase::writeOnce(const JointPositions &motion_generator_input)=0'],['../classfranka_1_1ActiveControlBase.html#ac94d472225bbe8b6322b9f3cbf98bd3b',1,'franka::ActiveControlBase::writeOnce(const CartesianVelocities &, const std::optional< const Torques > &)=0'],['../classfranka_1_1ActiveControlBase.html#a61ffd2a40b082e275784175f7a38aa08',1,'franka::ActiveControlBase::writeOnce(const CartesianPose &, const std::optional< const Torques > &)=0'],['../classfranka_1_1ActiveControlBase.html#a46f54e3366ad083c9dedf62b9f4e1fea',1,'franka::ActiveControlBase::writeOnce(const JointVelocities &, const std::optional< const Torques > &)=0'],['../classfranka_1_1ActiveControlBase.html#ab0b5421122071fa0d578dcd0f4cabc36',1,'franka::ActiveControlBase::writeOnce(const JointPositions &, const std::optional< const Torques > &)=0'],['../classfranka_1_1ActiveControl.html#ad4bf06b3e873fd95a2261d67d89a4d1f',1,'franka::ActiveControl::writeOnce(const CartesianVelocities &motion_generator_input) override'],['../classfranka_1_1ActiveControl.html#a6b6265ccad26dc2e32c7b6329b74fb80',1,'franka::ActiveControl::writeOnce(const CartesianPose &motion_generator_input) override'],['../classfranka_1_1ActiveControl.html#a7f54a6bc037fa63f14e1a3f1329d4bf5',1,'franka::ActiveControl::writeOnce(const JointVelocities &motion_generator_input) override'],['../classfranka_1_1ActiveControl.html#a8166a590c84c749cd90c874bd2f1aca4',1,'franka::ActiveControl::writeOnce(const JointPositions &motion_generator_input) override'],['../classfranka_1_1ActiveControl.html#a12c3c6916e26e66dae41eb624daabb4a',1,'franka::ActiveControl::writeOnce(const CartesianVelocities &, const std::optional< const Torques > &) override'],['../classfranka_1_1ActiveControl.html#a52f9ce19182359732bddee7b52a87419',1,'franka::ActiveControl::writeOnce(const CartesianPose &, const std::optional< const Torques > &) override'],['../classfranka_1_1ActiveControl.html#a2a27360ae8203fa8a413c47708e03ede',1,'franka::ActiveControl::writeOnce(const JointVelocities &, const std::optional< const Torques > &) override'],['../classfranka_1_1ActiveControl.html#a762615a1a3d5cf18064bfbd0b45effa6',1,'franka::ActiveControl::writeOnce(const JointPositions &, const std::optional< const Torques > &) override'],['../classfranka_1_1ActiveControl.html#a888b87832cd3def156c07a0b57d95663',1,'franka::ActiveControl::writeOnce(const Torques &) override']]] +]; diff --git a/search/all_16.html b/search/all_16.html new file mode 100644 index 00000000..b19867ad --- /dev/null +++ b/search/all_16.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_16.js b/search/all_16.js new file mode 100644 index 00000000..6cb08b00 --- /dev/null +++ b/search/all_16.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['zerojacobian_272',['zeroJacobian',['../classfranka_1_1Model.html#a6fb6347b571a6759bad10b3a9e28a28f',1,'franka::Model::zeroJacobian(Frame frame, const franka::RobotState &robot_state) const'],['../classfranka_1_1Model.html#a6522f1079e1dc5f6799dde6197b45259',1,'franka::Model::zeroJacobian(Frame frame, const std::array< double, 7 > &q, const std::array< double, 16 > &F_T_EE, const std::array< double, 16 > &EE_T_K) const']]] +]; diff --git a/search/all_17.html b/search/all_17.html new file mode 100644 index 00000000..1ad5d34b --- /dev/null +++ b/search/all_17.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_17.js b/search/all_17.js new file mode 100644 index 00000000..ea52df44 --- /dev/null +++ b/search/all_17.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['_7egripper_273',['~Gripper',['../classfranka_1_1Gripper.html#ade253b8a35312d52c636c6aafb7b2e1d',1,'franka::Gripper']]], + ['_7emodel_274',['~Model',['../classfranka_1_1Model.html#a1d6ffa26afc6cfdff7e329d15b8bd65e',1,'franka::Model']]], + ['_7erobot_275',['~Robot',['../classfranka_1_1Robot.html#ac19400de0fd39852d5825b1f1ccc85e2',1,'franka::Robot']]], + ['_7evacuumgripper_276',['~VacuumGripper',['../classfranka_1_1VacuumGripper.html#af43f640f3cb9ca873b02bb464d3c279b',1,'franka::VacuumGripper']]] +]; diff --git a/search/all_2.html b/search/all_2.html new file mode 100644 index 00000000..02cfffc2 --- /dev/null +++ b/search/all_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_2.js b/search/all_2.js new file mode 100644 index 00000000..8350f02f --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,46 @@ +var searchData= +[ + ['cartesian_5fcollision_13',['cartesian_collision',['../structfranka_1_1RobotState.html#a52c20478f4c1e162df38582ea9bda044',1,'franka::RobotState']]], + ['cartesian_5fcontact_14',['cartesian_contact',['../structfranka_1_1RobotState.html#a7fc1f0358d2104d39d301d70544fa6c1',1,'franka::RobotState']]], + ['cartesian_5fmotion_5fgenerator_5facceleration_5fdiscontinuity_15',['cartesian_motion_generator_acceleration_discontinuity',['../structfranka_1_1Errors.html#a10c6ac36bf48b4a9edf91e74d9bc4837',1,'franka::Errors']]], + ['cartesian_5fmotion_5fgenerator_5felbow_5flimit_5fviolation_16',['cartesian_motion_generator_elbow_limit_violation',['../structfranka_1_1Errors.html#ac21ebdc1e0e8fb3099a7dce284550c4c',1,'franka::Errors']]], + ['cartesian_5fmotion_5fgenerator_5felbow_5fsign_5finconsistent_17',['cartesian_motion_generator_elbow_sign_inconsistent',['../structfranka_1_1Errors.html#a58b0e1199c9dded5a32bfeb110e63037',1,'franka::Errors']]], + ['cartesian_5fmotion_5fgenerator_5fjoint_5facceleration_5fdiscontinuity_18',['cartesian_motion_generator_joint_acceleration_discontinuity',['../structfranka_1_1Errors.html#a2e223ef3c771709a6a3f094adf12f9cb',1,'franka::Errors']]], + ['cartesian_5fmotion_5fgenerator_5fjoint_5fposition_5flimits_5fviolation_19',['cartesian_motion_generator_joint_position_limits_violation',['../structfranka_1_1Errors.html#a73aef7473fd6d1d5b207e68fa35948c5',1,'franka::Errors']]], + ['cartesian_5fmotion_5fgenerator_5fjoint_5fvelocity_5fdiscontinuity_20',['cartesian_motion_generator_joint_velocity_discontinuity',['../structfranka_1_1Errors.html#a1c8c56766fefc19fda5d5de909ca5b37',1,'franka::Errors']]], + ['cartesian_5fmotion_5fgenerator_5fjoint_5fvelocity_5flimits_5fviolation_21',['cartesian_motion_generator_joint_velocity_limits_violation',['../structfranka_1_1Errors.html#a435d16d62a123bfbf578bc76e3780605',1,'franka::Errors']]], + ['cartesian_5fmotion_5fgenerator_5fstart_5felbow_5finvalid_22',['cartesian_motion_generator_start_elbow_invalid',['../structfranka_1_1Errors.html#a6d905b803bbe8a7be8490f2a94ba524a',1,'franka::Errors']]], + ['cartesian_5fmotion_5fgenerator_5fvelocity_5fdiscontinuity_23',['cartesian_motion_generator_velocity_discontinuity',['../structfranka_1_1Errors.html#a17e4a9b6b7dc4cc12c1328d36cac3eaf',1,'franka::Errors']]], + ['cartesian_5fmotion_5fgenerator_5fvelocity_5flimits_5fviolation_24',['cartesian_motion_generator_velocity_limits_violation',['../structfranka_1_1Errors.html#a91437c081452ef708563346b102ba894',1,'franka::Errors']]], + ['cartesian_5fpose_25',['cartesian_pose',['../structfranka_1_1RobotCommand.html#acce2090d696ebb9759fd0f37fd35a298',1,'franka::RobotCommand']]], + ['cartesian_5fposition_5flimits_5fviolation_26',['cartesian_position_limits_violation',['../structfranka_1_1Errors.html#a41c8b50ecbb015a2dba1a3dbbff694b6',1,'franka::Errors']]], + ['cartesian_5fposition_5fmotion_5fgenerator_5finvalid_5fframe_27',['cartesian_position_motion_generator_invalid_frame',['../structfranka_1_1Errors.html#aa1952c6da2f81578861a19b947c97b85',1,'franka::Errors']]], + ['cartesian_5fposition_5fmotion_5fgenerator_5fstart_5fpose_5finvalid_28',['cartesian_position_motion_generator_start_pose_invalid',['../structfranka_1_1Errors.html#aa910fad4992b91be1ea1c321ee9b7a1e',1,'franka::Errors']]], + ['cartesian_5freflex_29',['cartesian_reflex',['../structfranka_1_1Errors.html#a47bd58b0ab2198e4d038e0a24eafb310',1,'franka::Errors']]], + ['cartesian_5fspline_5fmotion_5fgenerator_5fviolation_30',['cartesian_spline_motion_generator_violation',['../structfranka_1_1Errors.html#a5617689cd7e875baebcecf054513f0c4',1,'franka::Errors']]], + ['cartesian_5fvelocities_31',['cartesian_velocities',['../structfranka_1_1RobotCommand.html#a04b4841130fab920936190be1bc5dba3',1,'franka::RobotCommand']]], + ['cartesian_5fvelocity_5fprofile_5fsafety_5fviolation_32',['cartesian_velocity_profile_safety_violation',['../structfranka_1_1Errors.html#afc093fc5f99e1f6cab6de4fa9bc32692',1,'franka::Errors']]], + ['cartesian_5fvelocity_5fviolation_33',['cartesian_velocity_violation',['../structfranka_1_1Errors.html#a382fbec6b463ddcc2cbfd90340021ff1',1,'franka::Errors']]], + ['cartesianlowpassfilter_34',['cartesianLowpassFilter',['../lowpass__filter_8h.html#ac25e174345ea5e2ea9099287ad43cd2b',1,'franka']]], + ['cartesianpose_35',['CartesianPose',['../classfranka_1_1CartesianPose.html#a5559a53a898f9b369b1df9d51f9351b5',1,'franka::CartesianPose::CartesianPose(const std::array< double, 16 > &cartesian_pose) noexcept'],['../classfranka_1_1CartesianPose.html#a17272cb33af9aa4b726fa96b31cf0101',1,'franka::CartesianPose::CartesianPose(const std::array< double, 16 > &cartesian_pose, const std::array< double, 2 > &elbow) noexcept'],['../classfranka_1_1CartesianPose.html#a70b6460e98bc763a49c53accd48d54a2',1,'franka::CartesianPose::CartesianPose(std::initializer_list< double > cartesian_pose)'],['../classfranka_1_1CartesianPose.html#ab7fb1dfd7cdb89c0caebab95c669ba49',1,'franka::CartesianPose::CartesianPose(std::initializer_list< double > cartesian_pose, std::initializer_list< double > elbow)'],['../classfranka_1_1CartesianPose.html',1,'franka::CartesianPose']]], + ['cartesianvelocities_36',['CartesianVelocities',['../classfranka_1_1CartesianVelocities.html#a95f6feec3539ed9f96d555447717eb72',1,'franka::CartesianVelocities::CartesianVelocities(const std::array< double, 6 > &cartesian_velocities, const std::array< double, 2 > &elbow) noexcept'],['../classfranka_1_1CartesianVelocities.html#a39c4b06c315c963460e24324de8ad079',1,'franka::CartesianVelocities::CartesianVelocities(std::initializer_list< double > cartesian_velocities)'],['../classfranka_1_1CartesianVelocities.html#aec434afa3f92e462ad3ab4766d3456a4',1,'franka::CartesianVelocities::CartesianVelocities(std::initializer_list< double > cartesian_velocities, std::initializer_list< double > elbow)'],['../classfranka_1_1CartesianVelocities.html#a713380954e1f10c1be3033b95ca00657',1,'franka::CartesianVelocities::CartesianVelocities(const std::array< double, 6 > &cartesian_velocities) noexcept'],['../classfranka_1_1CartesianVelocities.html',1,'franka::CartesianVelocities']]], + ['checkelbow_37',['checkElbow',['../control__tools_8h.html#add0cd2cd1401ac0b2393a84ca1577cde',1,'franka']]], + ['checkfinite_38',['checkFinite',['../control__tools_8h.html#a80d02c11ba41e5973ee76624bf1d4466',1,'franka']]], + ['checkmatrix_39',['checkMatrix',['../control__tools_8h.html#ab38ee604eecfedfb591ddb8327805ea4',1,'franka']]], + ['command_40',['command',['../structfranka_1_1Record.html#a8106f2ba9c2cf5ec7cbcf914c4c99e9c',1,'franka::Record']]], + ['commandexception_41',['CommandException',['../structfranka_1_1CommandException.html',1,'franka']]], + ['communication_5fconstraints_5fviolation_42',['communication_constraints_violation',['../structfranka_1_1Errors.html#a4d17af86c1ebb698c218796fa15f9bd7',1,'franka::Errors']]], + ['computelowerlimitsjointvelocity_43',['computeLowerLimitsJointVelocity',['../rate__limiting_8h.html#a75fe6c28325d7631f7bdb6c2b388b268',1,'franka']]], + ['computeupperlimitsjointvelocity_44',['computeUpperLimitsJointVelocity',['../rate__limiting_8h.html#a3a025c3c8f71f59627fe4f7e801021ac',1,'franka']]], + ['control_45',['control',['../classfranka_1_1Robot.html#a4ce9fd531f97c8cc943dd2479298a55f',1,'franka::Robot::control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, std::function< CartesianPose(const RobotState &, franka::Duration)> motion_generator_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)'],['../classfranka_1_1Robot.html#aeb276d0a0e55f032841976de7db86f5a',1,'franka::Robot::control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, std::function< CartesianVelocities(const RobotState &, franka::Duration)> motion_generator_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)'],['../classfranka_1_1Robot.html#a7fef8f6418cff168f680ac7c61a6b5cd',1,'franka::Robot::control(std::function< JointPositions(const RobotState &, franka::Duration)> motion_generator_callback, ControllerMode controller_mode=ControllerMode::kJointImpedance, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)'],['../classfranka_1_1Robot.html#a6ba6193e52178899dc8c6a34aa4c537c',1,'franka::Robot::control(std::function< JointVelocities(const RobotState &, franka::Duration)> motion_generator_callback, ControllerMode controller_mode=ControllerMode::kJointImpedance, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)'],['../classfranka_1_1Robot.html#adce4add23b47befadccd30e3dbe9f2f4',1,'franka::Robot::control(std::function< CartesianPose(const RobotState &, franka::Duration)> motion_generator_callback, ControllerMode controller_mode=ControllerMode::kJointImpedance, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)'],['../classfranka_1_1Robot.html#a2176c99664b83bb394f0b2dfd416a8ee',1,'franka::Robot::control(std::function< CartesianVelocities(const RobotState &, franka::Duration)> motion_generator_callback, ControllerMode controller_mode=ControllerMode::kJointImpedance, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)'],['../classfranka_1_1Robot.html#a76e8b7a9c7e2b874c3e300ba7cdeb8ca',1,'franka::Robot::control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, std::function< JointVelocities(const RobotState &, franka::Duration)> motion_generator_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)'],['../classfranka_1_1Robot.html#a4b625b781d388f3379e0961c724239d5',1,'franka::Robot::control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, std::function< JointPositions(const RobotState &, franka::Duration)> motion_generator_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)'],['../classfranka_1_1Robot.html#a0d5effba5daff2fee123802bbd5f95d1',1,'franka::Robot::control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)']]], + ['control_5fcommand_5fsuccess_5frate_46',['control_command_success_rate',['../structfranka_1_1RobotState.html#af208572613a6afcdc61a24970c71fa28',1,'franka::RobotState']]], + ['control_5ffinished_47',['control_finished',['../classfranka_1_1ActiveControl.html#afa521707548926e9d1e38e4b83496db2',1,'franka::ActiveControl']]], + ['control_5flock_48',['control_lock',['../classfranka_1_1ActiveControl.html#aed53605877b237435581e36f4c0b34a4',1,'franka::ActiveControl']]], + ['control_5ftools_2eh_49',['control_tools.h',['../control__tools_8h.html',1,'']]], + ['control_5ftypes_2eh_50',['control_types.h',['../control__types_8h.html',1,'']]], + ['controlexception_51',['ControlException',['../structfranka_1_1ControlException.html#a2efb9628eef80a3819031dbf2e2cb518',1,'franka::ControlException::ControlException()'],['../structfranka_1_1ControlException.html',1,'franka::ControlException']]], + ['controller_5ftorque_5fdiscontinuity_52',['controller_torque_discontinuity',['../structfranka_1_1Errors.html#af40d93759ace9ee6026208110692a732',1,'franka::Errors']]], + ['controllermode_53',['ControllerMode',['../control__types_8h.html#a3e20bc77587e2c0c53598753e3f4816b',1,'franka']]], + ['coriolis_54',['coriolis',['../classfranka_1_1RobotModel.html#ae8b6b42f32ffb0ca654e76080c8ee347',1,'franka::RobotModel::coriolis()'],['../classRobotModelBase.html#a45226fbc547a27d5e7cff8a78e9bd0b4',1,'RobotModelBase::coriolis()'],['../classfranka_1_1Model.html#a3445ad932ddda2e3540768af9b7b4852',1,'franka::Model::coriolis(const std::array< double, 7 > &q, const std::array< double, 7 > &dq, const std::array< double, 9 > &I_total, double m_total, const std::array< double, 3 > &F_x_Ctotal) const noexcept'],['../classfranka_1_1Model.html#a91424f181a93bb47bda6af2d3567c65c',1,'franka::Model::coriolis(const franka::RobotState &robot_state) const noexcept']]], + ['current_5ferrors_55',['current_errors',['../structfranka_1_1RobotState.html#abc5515f7a27f5de82396ea792a5ecb48',1,'franka::RobotState']]] +]; diff --git a/search/all_3.html b/search/all_3.html new file mode 100644 index 00000000..39767b85 --- /dev/null +++ b/search/all_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_3.js b/search/all_3.js new file mode 100644 index 00000000..636e3cba --- /dev/null +++ b/search/all_3.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['ddelbow_5fc_56',['ddelbow_c',['../structfranka_1_1RobotState.html#a1e5b6caf84249b1129491dbbcb1fc2e6',1,'franka::RobotState']]], + ['ddq_5fd_57',['ddq_d',['../structfranka_1_1RobotState.html#a6251e748cf72f4b86bcfdcb97d77ace2',1,'franka::RobotState']]], + ['delbow_5fc_58',['delbow_c',['../structfranka_1_1RobotState.html#a57c2c145e9f79010adf23085b8a9c5ad',1,'franka::RobotState']]], + ['device_5fstatus_59',['device_status',['../structfranka_1_1VacuumGripperState.html#ab44560b09c4a959c06ddafbd7f21da02',1,'franka::VacuumGripperState']]], + ['dq_60',['dq',['../classfranka_1_1JointVelocities.html#a14fddb6fe7a7c4034dc82c283de8c2d3',1,'franka::JointVelocities::dq()'],['../structfranka_1_1RobotState.html#af372a0081d72bc7b4fe873f99c7b2d8c',1,'franka::RobotState::dq()']]], + ['dq_5fd_61',['dq_d',['../structfranka_1_1RobotState.html#aed294a088be27b927be9575a18bec949',1,'franka::RobotState']]], + ['dropoff_62',['dropOff',['../classfranka_1_1VacuumGripper.html#a04645348e97b946a788205c8b1168cac',1,'franka::VacuumGripper']]], + ['dtau_5fj_63',['dtau_J',['../structfranka_1_1RobotState.html#ae6b0d4ee0d7b36240a2165e6ded6f4b9',1,'franka::RobotState']]], + ['dtheta_64',['dtheta',['../structfranka_1_1RobotState.html#a271db0a55dd346715ed8a0daf3f8887c',1,'franka::RobotState']]], + ['duration_65',['Duration',['../classfranka_1_1Duration.html#af721da321423772b4ce7ff11280d38d5',1,'franka::Duration::Duration() noexcept'],['../classfranka_1_1Duration.html#a46f0cea3e05c27cdaaba5ff25e0e6cd6',1,'franka::Duration::Duration(uint64_t milliseconds) noexcept'],['../classfranka_1_1Duration.html#a389dfef50f34e9cc5be69838fbdafba7',1,'franka::Duration::Duration(std::chrono::duration< uint64_t, std::milli > duration) noexcept'],['../classfranka_1_1Duration.html#a886575e716b45e85de1bb78def2eb133',1,'franka::Duration::Duration(const Duration &)=default'],['../classfranka_1_1Duration.html',1,'franka::Duration']]], + ['duration_2eh_66',['duration.h',['../duration_8h.html',1,'']]] +]; diff --git a/search/all_4.html b/search/all_4.html new file mode 100644 index 00000000..fc40463c --- /dev/null +++ b/search/all_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_4.js b/search/all_4.js new file mode 100644 index 00000000..31a0e066 --- /dev/null +++ b/search/all_4.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['ee_5ft_5fk_67',['EE_T_K',['../structfranka_1_1RobotState.html#aeb78a3b4b76d4f57b9898cbea3a0f7aa',1,'franka::RobotState']]], + ['elbow_68',['elbow',['../classfranka_1_1CartesianPose.html#abef660743df9cf94d11c556d9c3d25be',1,'franka::CartesianPose::elbow()'],['../classfranka_1_1CartesianVelocities.html#a6419df1399d3dfab79b1654b94ced344',1,'franka::CartesianVelocities::elbow()'],['../structfranka_1_1RobotState.html#a43485841c427d70e7f36a912cc3116d1',1,'franka::RobotState::elbow()']]], + ['elbow_5fc_69',['elbow_c',['../structfranka_1_1RobotState.html#a16cfc844894e8b5b1ad829be529962f0',1,'franka::RobotState']]], + ['elbow_5fd_70',['elbow_d',['../structfranka_1_1RobotState.html#a295dada05d8588fc3c19a74fd427dcc0',1,'franka::RobotState']]], + ['errors_71',['Errors',['../structfranka_1_1Errors.html#aedd6b6af230c01b6f106b5050b29d9ae',1,'franka::Errors::Errors()'],['../structfranka_1_1Errors.html#a4548a72089cc6d61c9249a1b8f4cc480',1,'franka::Errors::Errors(const Errors &other)'],['../structfranka_1_1Errors.html#adffc6f8b2235e566c4a43ce69a86634e',1,'franka::Errors::Errors(const std::array< bool, 41 > &errors)'],['../structfranka_1_1Errors.html',1,'franka::Errors']]], + ['errors_2eh_72',['errors.h',['../errors_8h.html',1,'']]], + ['examples_5fcommon_2eh_73',['examples_common.h',['../examples__common_8h.html',1,'']]], + ['exception_74',['Exception',['../structfranka_1_1Exception.html',1,'franka']]], + ['exception_2eh_75',['exception.h',['../exception_8h.html',1,'']]] +]; diff --git a/search/all_5.html b/search/all_5.html new file mode 100644 index 00000000..9dd9344b --- /dev/null +++ b/search/all_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_5.js b/search/all_5.js new file mode 100644 index 00000000..b6f342be --- /dev/null +++ b/search/all_5.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['f_5ft_5fee_76',['F_T_EE',['../structfranka_1_1RobotState.html#a705b85049fef747008b0eba8284c8057',1,'franka::RobotState']]], + ['f_5ft_5fne_77',['F_T_NE',['../structfranka_1_1RobotState.html#a88142795c453775c360e18d8a6570d15',1,'franka::RobotState']]], + ['f_5fx_5fcee_78',['F_x_Cee',['../structfranka_1_1RobotState.html#a907c4561d8f1c1a2af7980cf58ceb112',1,'franka::RobotState']]], + ['f_5fx_5fcload_79',['F_x_Cload',['../structfranka_1_1RobotState.html#a48e921e6215ad32f36e424b4d7b66a89',1,'franka::RobotState']]], + ['f_5fx_5fctotal_80',['F_x_Ctotal',['../structfranka_1_1RobotState.html#a72ee7362018e3c9e95e3c41e857bfd8d',1,'franka::RobotState']]], + ['finishable_81',['Finishable',['../structfranka_1_1Finishable.html',1,'franka']]], + ['force_5fcontrol_5fsafety_5fviolation_82',['force_control_safety_violation',['../structfranka_1_1Errors.html#ae7b19674da28b11ba970c30c7d800923',1,'franka::Errors']]], + ['force_5fcontroller_5fdesired_5fforce_5ftolerance_5fviolation_83',['force_controller_desired_force_tolerance_violation',['../structfranka_1_1Errors.html#ae474f20a64b2585dbe6496966dddff0a',1,'franka::Errors']]], + ['frame_84',['Frame',['../model_8h.html#a00b729ddce916481d3f0d10febec4f5b',1,'franka']]] +]; diff --git a/search/all_6.html b/search/all_6.html new file mode 100644 index 00000000..f1e516d7 --- /dev/null +++ b/search/all_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_6.js b/search/all_6.js new file mode 100644 index 00000000..5c8458c6 --- /dev/null +++ b/search/all_6.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['getrobotmodel_85',['getRobotModel',['../classfranka_1_1Robot.html#a54565ca0eb7b58727f88a8dcbf2f98ab',1,'franka::Robot']]], + ['grasp_86',['grasp',['../classfranka_1_1Gripper.html#abff6a03a6c75b9079bd4b9b5ca380254',1,'franka::Gripper']]], + ['gravity_87',['gravity',['../classfranka_1_1Model.html#a9b28a648cf413297d80f383e62363ab9',1,'franka::Model::gravity(const std::array< double, 7 > &q, double m_total, const std::array< double, 3 > &F_x_Ctotal, const std::array< double, 3 > &gravity_earth={{0., 0., -9.81}}) const noexcept'],['../classfranka_1_1Model.html#a76a94e1ddb45cf1cdded25be4cf2dcae',1,'franka::Model::gravity(const franka::RobotState &robot_state, const std::array< double, 3 > &gravity_earth) const noexcept'],['../classfranka_1_1Model.html#a983611785e894e1cd1f07a2df97ddbdd',1,'franka::Model::gravity(const franka::RobotState &robot_state) const noexcept'],['../classfranka_1_1RobotModel.html#a027d8e2e713b66cdbaf17201a30236f1',1,'franka::RobotModel::gravity()'],['../classRobotModelBase.html#ace835cdef4ae60d965c9faf57c3914e1',1,'RobotModelBase::gravity()']]], + ['gripper_88',['Gripper',['../classfranka_1_1Gripper.html',1,'franka::Gripper'],['../classfranka_1_1Gripper.html#a02b30632b08001592c62d3563561afc5',1,'franka::Gripper::Gripper(const std::string &franka_address)'],['../classfranka_1_1Gripper.html#aa045ea81b36f22420f9bc6f2a256a4f0',1,'franka::Gripper::Gripper(Gripper &&gripper) noexcept']]], + ['gripper_2eh_89',['gripper.h',['../gripper_8h.html',1,'']]], + ['gripper_5fstate_2eh_90',['gripper_state.h',['../gripper__state_8h.html',1,'']]], + ['gripperstate_91',['GripperState',['../structfranka_1_1GripperState.html',1,'franka']]] +]; diff --git a/search/all_7.html b/search/all_7.html new file mode 100644 index 00000000..8ddbf6c8 --- /dev/null +++ b/search/all_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_7.js b/search/all_7.js new file mode 100644 index 00000000..fbb80051 --- /dev/null +++ b/search/all_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['haselbow_92',['hasElbow',['../classfranka_1_1CartesianPose.html#a5fa9f47dbf73ab45f671d89e11f89ccf',1,'franka::CartesianPose::hasElbow()'],['../classfranka_1_1CartesianVelocities.html#a51a41893b10250982597fe367abb2ca6',1,'franka::CartesianVelocities::hasElbow()']]], + ['hasrealtimekernel_93',['hasRealtimeKernel',['../control__tools_8h.html#ad165a74da105c78586c0cd4c1ed57bd2',1,'franka']]], + ['homing_94',['homing',['../classfranka_1_1Gripper.html#aef356f93a4c3b9d6b2532c29126d478c',1,'franka::Gripper']]] +]; diff --git a/search/all_8.html b/search/all_8.html new file mode 100644 index 00000000..83c55ae2 --- /dev/null +++ b/search/all_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_8.js b/search/all_8.js new file mode 100644 index 00000000..e43b89b4 --- /dev/null +++ b/search/all_8.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['i_5fee_95',['I_ee',['../structfranka_1_1RobotState.html#a74cee1beb5d400694133deea2846e611',1,'franka::RobotState']]], + ['i_5fload_96',['I_load',['../structfranka_1_1RobotState.html#a5b194153497eff98049681f852118f82',1,'franka::RobotState']]], + ['i_5ftotal_97',['I_total',['../structfranka_1_1RobotState.html#ad9120ae7b7613e77df8c1c3eba8fb033',1,'franka::RobotState']]], + ['in_5fcontrol_5frange_98',['in_control_range',['../structfranka_1_1VacuumGripperState.html#a70c1b14b10c2a79511fcada258c7e0ba',1,'franka::VacuumGripperState']]], + ['incompatibleversionexception_99',['IncompatibleVersionException',['../structfranka_1_1IncompatibleVersionException.html',1,'franka::IncompatibleVersionException'],['../structfranka_1_1IncompatibleVersionException.html#a518f40d994ed7e970c6f7fdafb673239',1,'franka::IncompatibleVersionException::IncompatibleVersionException()']]], + ['instability_5fdetected_100',['instability_detected',['../structfranka_1_1Errors.html#aebb701987262097687d21b3cf1bc8930',1,'franka::Errors']]], + ['invalidoperationexception_101',['InvalidOperationException',['../structfranka_1_1InvalidOperationException.html',1,'franka']]], + ['is_5fgrasped_102',['is_grasped',['../structfranka_1_1GripperState.html#aa65b46313e740454ead9c9ea27e7bf8d',1,'franka::GripperState']]], + ['ishomogeneoustransformation_103',['isHomogeneousTransformation',['../control__tools_8h.html#ad81c99e8af3f2536ae3c6ec1ce8dce1e',1,'franka']]], + ['isvalidelbow_104',['isValidElbow',['../control__tools_8h.html#a4eda3eda0514fabf6d630a6d8c0373a0',1,'franka']]] +]; diff --git a/search/all_9.html b/search/all_9.html new file mode 100644 index 00000000..1e263c13 --- /dev/null +++ b/search/all_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_9.js b/search/all_9.js new file mode 100644 index 00000000..e2d659dc --- /dev/null +++ b/search/all_9.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['joint_5fcollision_105',['joint_collision',['../structfranka_1_1RobotState.html#a38757bafd4dd8e138410de1dca0c36f8',1,'franka::RobotState']]], + ['joint_5fcontact_106',['joint_contact',['../structfranka_1_1RobotState.html#a7243c652a8efe58c343a0d1252302fa4',1,'franka::RobotState']]], + ['joint_5fmotion_5fgenerator_5facceleration_5fdiscontinuity_107',['joint_motion_generator_acceleration_discontinuity',['../structfranka_1_1Errors.html#a633195adca91f5ecaf1506da12f3311f',1,'franka::Errors']]], + ['joint_5fmotion_5fgenerator_5fposition_5flimits_5fviolation_108',['joint_motion_generator_position_limits_violation',['../structfranka_1_1Errors.html#a9536ad072868b90525c56143cbb956ef',1,'franka::Errors']]], + ['joint_5fmotion_5fgenerator_5fvelocity_5fdiscontinuity_109',['joint_motion_generator_velocity_discontinuity',['../structfranka_1_1Errors.html#abd6da8e6a32d817a7b4848a24efd9379',1,'franka::Errors']]], + ['joint_5fmotion_5fgenerator_5fvelocity_5flimits_5fviolation_110',['joint_motion_generator_velocity_limits_violation',['../structfranka_1_1Errors.html#ae211638df9b0e23905c8a9d36e249207',1,'franka::Errors']]], + ['joint_5fmove_5fin_5fwrong_5fdirection_111',['joint_move_in_wrong_direction',['../structfranka_1_1Errors.html#a7d3a6480cbe572fd46e579b43732edc9',1,'franka::Errors']]], + ['joint_5fp2p_5finsufficient_5ftorque_5ffor_5fplanning_112',['joint_p2p_insufficient_torque_for_planning',['../structfranka_1_1Errors.html#a1c78be870253b510a4516acf14c2d3e3',1,'franka::Errors']]], + ['joint_5fposition_5flimits_5fviolation_113',['joint_position_limits_violation',['../structfranka_1_1Errors.html#a44ba0d45e52639280d32cf447f967e29',1,'franka::Errors']]], + ['joint_5fposition_5fmotion_5fgenerator_5fstart_5fpose_5finvalid_114',['joint_position_motion_generator_start_pose_invalid',['../structfranka_1_1Errors.html#a7af91cbf61dc79304bff3ffadc51ea86',1,'franka::Errors']]], + ['joint_5fpositions_115',['joint_positions',['../structfranka_1_1RobotCommand.html#a086afcec596eae5284b6c39dc1452280',1,'franka::RobotCommand']]], + ['joint_5freflex_116',['joint_reflex',['../structfranka_1_1Errors.html#afb0928680c586e73d4e2cd4b42c7fe48',1,'franka::Errors']]], + ['joint_5fvelocities_117',['joint_velocities',['../structfranka_1_1RobotCommand.html#a049657cf2bbbb53d6ffa5581721e7b71',1,'franka::RobotCommand']]], + ['joint_5fvelocity_5fviolation_118',['joint_velocity_violation',['../structfranka_1_1Errors.html#a803ac4acbc26350602ea2eb02b7b30c4',1,'franka::Errors']]], + ['joint_5fvia_5fmotion_5fgenerator_5fplanning_5fjoint_5flimit_5fviolation_119',['joint_via_motion_generator_planning_joint_limit_violation',['../structfranka_1_1Errors.html#aef3c74f48978545187ee2dc3a96db1c8',1,'franka::Errors']]], + ['jointpositions_120',['JointPositions',['../classfranka_1_1JointPositions.html',1,'franka::JointPositions'],['../classfranka_1_1JointPositions.html#a57bc9d7e033493b1182333276af5ce84',1,'franka::JointPositions::JointPositions(const std::array< double, 7 > &joint_positions) noexcept'],['../classfranka_1_1JointPositions.html#a1e2006bccc9de89d8eb1a4d1c4da2fb8',1,'franka::JointPositions::JointPositions(std::initializer_list< double > joint_positions)']]], + ['jointvelocities_121',['JointVelocities',['../classfranka_1_1JointVelocities.html',1,'franka::JointVelocities'],['../classfranka_1_1JointVelocities.html#a1130f851055de3b7ebe9e6fbac960826',1,'franka::JointVelocities::JointVelocities(const std::array< double, 7 > &joint_velocities) noexcept'],['../classfranka_1_1JointVelocities.html#aed384fad8e302638c2e5baea6378c2d2',1,'franka::JointVelocities::JointVelocities(std::initializer_list< double > joint_velocities)']]] +]; diff --git a/search/all_a.html b/search/all_a.html new file mode 100644 index 00000000..3a6cac10 --- /dev/null +++ b/search/all_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_a.js b/search/all_a.js new file mode 100644 index 00000000..e4defc51 --- /dev/null +++ b/search/all_a.js @@ -0,0 +1,28 @@ +var searchData= +[ + ['k_5ff_5fext_5fhat_5fk_122',['K_F_ext_hat_K',['../structfranka_1_1RobotState.html#a96267d443c05fcc58d7ac32f63912649',1,'franka::RobotState']]], + ['kdefaultcutofffrequency_123',['kDefaultCutoffFrequency',['../lowpass__filter_8h.html#ad8e3b7da346e03181ab5ac138a4171d4',1,'franka']]], + ['kdeltat_124',['kDeltaT',['../rate__limiting_8h.html#a1e207a0d5a6e90c1e1a78e6e1057120a',1,'franka']]], + ['kfactorcartesianrotationposeinterface_125',['kFactorCartesianRotationPoseInterface',['../rate__limiting_8h.html#a19166d1a64c5a84f80b4ed3aa0bfb3a0',1,'franka']]], + ['kgreen_126',['kGreen',['../vacuum__gripper__state_8h.html#a423e2ce5f95933b9897c6e308d91b611a1299e6e2ec6371a79385cd3a862f7cc9',1,'franka']]], + ['kjointvelocitylimitstolerance_127',['kJointVelocityLimitsTolerance',['../rate__limiting_8h.html#a39b6d9504e2844d289f834471994d889',1,'franka']]], + ['klimiteps_128',['kLimitEps',['../rate__limiting_8h.html#aad1f9b575274830b8da9e638559d424b',1,'franka']]], + ['kmaxcutofffrequency_129',['kMaxCutoffFrequency',['../lowpass__filter_8h.html#adb10b364af8deb9e17d9bcc1ff2695be',1,'franka']]], + ['kmaxelbowacceleration_130',['kMaxElbowAcceleration',['../rate__limiting_8h.html#af365e574ad7b1580ce15e30dd909b3ba',1,'franka']]], + ['kmaxelbowjerk_131',['kMaxElbowJerk',['../rate__limiting_8h.html#adc70178204d4da073c78de777a2dff74',1,'franka']]], + ['kmaxelbowvelocity_132',['kMaxElbowVelocity',['../rate__limiting_8h.html#a2896b2e0c8bd96f9ee242c1203ac3483',1,'franka']]], + ['kmaxjointacceleration_133',['kMaxJointAcceleration',['../rate__limiting_8h.html#a826ecf0b7d214df69c1ee416d3e66b93',1,'franka']]], + ['kmaxjointjerk_134',['kMaxJointJerk',['../rate__limiting_8h.html#a600a21a6151ff2eee38294293dd8aeec',1,'franka']]], + ['kmaxrotationalacceleration_135',['kMaxRotationalAcceleration',['../rate__limiting_8h.html#a5e3d5c95ba72f9660f17f8ebf1e0aa2e',1,'franka']]], + ['kmaxrotationaljerk_136',['kMaxRotationalJerk',['../rate__limiting_8h.html#a259520ce1b6b5b85a88d05262286820d',1,'franka']]], + ['kmaxrotationalvelocity_137',['kMaxRotationalVelocity',['../rate__limiting_8h.html#aafb1f5ef8f8a7abd546edea498c18b45',1,'franka']]], + ['kmaxtorquerate_138',['kMaxTorqueRate',['../rate__limiting_8h.html#a6c1a0e9a5e1f375d2aad61edac907d4e',1,'franka']]], + ['kmaxtranslationalacceleration_139',['kMaxTranslationalAcceleration',['../rate__limiting_8h.html#a3803b1a54ba526ccaa4fa0d15446f3db',1,'franka']]], + ['kmaxtranslationaljerk_140',['kMaxTranslationalJerk',['../rate__limiting_8h.html#a46b8f11959ed3f731a0914f524af8e69',1,'franka']]], + ['kmaxtranslationalvelocity_141',['kMaxTranslationalVelocity',['../rate__limiting_8h.html#a857e1e5e18d688ec7095264a629bf474',1,'franka']]], + ['knormeps_142',['kNormEps',['../rate__limiting_8h.html#a420d72830a872ef375d9d6cbb1c439b5',1,'franka']]], + ['korange_143',['kOrange',['../vacuum__gripper__state_8h.html#a423e2ce5f95933b9897c6e308d91b611a11e1aa07606f098e5025e37830a1b22e',1,'franka']]], + ['kred_144',['kRed',['../vacuum__gripper__state_8h.html#a423e2ce5f95933b9897c6e308d91b611afb0136b923af8c04b31a9d1b5e989acf',1,'franka']]], + ['ktolnumberpacketslost_145',['kTolNumberPacketsLost',['../rate__limiting_8h.html#a664b546834ceecd4e3220ffa92f1172c',1,'franka']]], + ['kyellow_146',['kYellow',['../vacuum__gripper__state_8h.html#a423e2ce5f95933b9897c6e308d91b611a4c6c30a3642462190739bb7f13af9c7b',1,'franka']]] +]; diff --git a/search/all_b.html b/search/all_b.html new file mode 100644 index 00000000..130deb4e --- /dev/null +++ b/search/all_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_b.js b/search/all_b.js new file mode 100644 index 00000000..cb4ac48f --- /dev/null +++ b/search/all_b.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['last_5fmotion_5ferrors_147',['last_motion_errors',['../structfranka_1_1RobotState.html#a06d7019f85339409e932dc086b7a260b',1,'franka::RobotState']]], + ['last_5fread_5faccess_148',['last_read_access',['../classfranka_1_1ActiveControl.html#a226304deac8032ed6c8428caa60c9fb4',1,'franka::ActiveControl']]], + ['libfranka_3a_20c_2b_2b_20library_20for_20franka_20robotics_20research_20robots_149',['libfranka: C++ library for Franka Robotics research robots',['../index.html',1,'']]], + ['library_5fversion_150',['library_version',['../structfranka_1_1IncompatibleVersionException.html#a81e6d7f01965ed7ee34f83dc3883ad01',1,'franka::IncompatibleVersionException']]], + ['limitrate_151',['limitRate',['../rate__limiting_8h.html#ae425f551c62b289a93ad471f94f87b7c',1,'franka::limitRate(double upper_limits_velocity, double lower_limits_velocity, double max_acceleration, double max_jerk, double commanded_velocity, double last_commanded_velocity, double last_commanded_acceleration)'],['../rate__limiting_8h.html#a9288f438fcfc1aedf7e0b52aa95b23ba',1,'franka::limitRate(double max_translational_velocity, double max_translational_acceleration, double max_translational_jerk, double max_rotational_velocity, double max_rotational_acceleration, double max_rotational_jerk, const std::array< double, 16 > &O_T_EE_c, const std::array< double, 16 > &last_O_T_EE_c, const std::array< double, 6 > &last_O_dP_EE_c, const std::array< double, 6 > &last_O_ddP_EE_c)'],['../rate__limiting_8h.html#ad3e0243f9be5335ae3d04f87852dfccb',1,'franka::limitRate(double max_translational_velocity, double max_translational_acceleration, double max_translational_jerk, double max_rotational_velocity, double max_rotational_acceleration, double max_rotational_jerk, const std::array< double, 6 > &O_dP_EE_c, const std::array< double, 6 > &last_O_dP_EE_c, const std::array< double, 6 > &last_O_ddP_EE_c)'],['../rate__limiting_8h.html#aaaa22e0873d0630465e506ddc877083f',1,'franka::limitRate(const std::array< double, 7 > &upper_limits_velocity, const std::array< double, 7 > &lower_limits_velocity, const std::array< double, 7 > &max_acceleration, const std::array< double, 7 > &max_jerk, const std::array< double, 7 > &commanded_positions, const std::array< double, 7 > &last_commanded_positions, const std::array< double, 7 > &last_commanded_velocities, const std::array< double, 7 > &last_commanded_accelerations)'],['../rate__limiting_8h.html#a62ebac6ebbef784d44135855a899abef',1,'franka::limitRate(const std::array< double, 7 > &upper_limits_velocity, const std::array< double, 7 > &lower_limits_velocity, const std::array< double, 7 > &max_acceleration, const std::array< double, 7 > &max_jerk, const std::array< double, 7 > &commanded_velocities, const std::array< double, 7 > &last_commanded_velocities, const std::array< double, 7 > &last_commanded_accelerations)'],['../rate__limiting_8h.html#afacb3c087c76dded71874eaa7862b05d',1,'franka::limitRate(double upper_limits_velocity, double lower_limits_velocity, double max_acceleration, double max_jerk, double commanded_position, double last_commanded_position, double last_commanded_velocity, double last_commanded_acceleration)'],['../rate__limiting_8h.html#aea6895d6bf209a86319c6cd5180e4b60',1,'franka::limitRate(const std::array< double, 7 > &max_derivatives, const std::array< double, 7 > &commanded_values, const std::array< double, 7 > &last_commanded_values)']]], + ['loadmodel_152',['loadModel',['../classfranka_1_1Robot.html#a2da598c539469827409ac7e3bb61d5da',1,'franka::Robot']]], + ['log_153',['log',['../structfranka_1_1ControlException.html#ae57f0ac0a9aa195057af1f1cc712b41e',1,'franka::ControlException']]], + ['log_2eh_154',['log.h',['../log_8h.html',1,'']]], + ['logtocsv_155',['logToCSV',['../log_8h.html#a01fbdb37b0e6beb04ba108d5f5024fd9',1,'franka']]], + ['lowpass_5ffilter_2eh_156',['lowpass_filter.h',['../lowpass__filter_8h.html',1,'']]], + ['lowpassfilter_157',['lowpassFilter',['../lowpass__filter_8h.html#a94c21b0e87afce0147a9cd6025c239ca',1,'franka']]] +]; diff --git a/search/all_c.html b/search/all_c.html new file mode 100644 index 00000000..3dd5af06 --- /dev/null +++ b/search/all_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_c.js b/search/all_c.js new file mode 100644 index 00000000..1c12c259 --- /dev/null +++ b/search/all_c.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['m_5fee_158',['m_ee',['../structfranka_1_1RobotState.html#af982a16246e33c1495ec02972a36bce3',1,'franka::RobotState']]], + ['m_5fload_159',['m_load',['../structfranka_1_1RobotState.html#a99ea4ab9c5a42a5c17365ed8fd730cd1',1,'franka::RobotState']]], + ['m_5ftotal_160',['m_total',['../structfranka_1_1RobotState.html#a87880d4693c8f576ebdabf00f4d4f981',1,'franka::RobotState']]], + ['mass_161',['mass',['../classfranka_1_1Model.html#ad5f6156064bc18e42fc0b6d2f36b2006',1,'franka::Model::mass(const franka::RobotState &robot_state) const noexcept'],['../classfranka_1_1Model.html#a61c3a8968e927c8629f1d549d20aaf85',1,'franka::Model::mass(const std::array< double, 7 > &q, const std::array< double, 9 > &I_total, double m_total, const std::array< double, 3 > &F_x_Ctotal) const noexcept'],['../classfranka_1_1RobotModel.html#abbff56dc8a77bb3bead7efb7f891f8ed',1,'franka::RobotModel::mass()'],['../classRobotModelBase.html#ad6205b8405cc76be5b3e8fe3a3a2c1f9',1,'RobotModelBase::mass()']]], + ['max_5fgoal_5fpose_5fdeviation_5fviolation_162',['max_goal_pose_deviation_violation',['../structfranka_1_1Errors.html#ac55d3624087e606cb4ffab121869d580',1,'franka::Errors']]], + ['max_5fpath_5fpose_5fdeviation_5fviolation_163',['max_path_pose_deviation_violation',['../structfranka_1_1Errors.html#ad90cffe703ca1b782007f3ba49da587c',1,'franka::Errors']]], + ['max_5fwidth_164',['max_width',['../structfranka_1_1GripperState.html#ab71a26356c2898c49609bf991843e166',1,'franka::GripperState']]], + ['model_165',['Model',['../classfranka_1_1Model.html',1,'franka::Model'],['../classfranka_1_1Model.html#a8b58ff37f62512aecdcd0e6aabfd9548',1,'franka::Model::Model(Model &&model) noexcept'],['../classfranka_1_1Model.html#a8bf08984ec15c041ff1cbbe870945b82',1,'franka::Model::Model(franka::Network &network, const std::string &urdf_model)'],['../classfranka_1_1Model.html#a8148cf270e52ad9e967d4651fc37d690',1,'franka::Model::Model(franka::Network &network, std::unique_ptr< RobotModelBase > robot_model)']]], + ['model_2eh_166',['model.h',['../model_8h.html',1,'']]], + ['modelexception_167',['ModelException',['../structfranka_1_1ModelException.html',1,'franka']]], + ['motion_5ffinished_168',['motion_finished',['../structfranka_1_1Finishable.html#a5d48028c0f912d4a089e6220d8715f7f',1,'franka::Finishable']]], + ['motion_5fid_169',['motion_id',['../classfranka_1_1ActiveControl.html#a0852a7d4b5a67df218440c2cc629f638',1,'franka::ActiveControl']]], + ['motionfinished_170',['MotionFinished',['../control__types_8h.html#a20791f7142d78bbbe3c957cc66a23ade',1,'franka::MotionFinished(Torques command) noexcept'],['../control__types_8h.html#a7f505509951b6568b08b3aec8ffb9098',1,'franka::MotionFinished(JointPositions command) noexcept'],['../control__types_8h.html#ab478c128d691a46c0ab85bbf3b5caac5',1,'franka::MotionFinished(JointVelocities command) noexcept'],['../control__types_8h.html#ab0b308e2a9348fd3eb5fd1d08db12dcf',1,'franka::MotionFinished(CartesianPose command) noexcept'],['../control__types_8h.html#a5898ad5e3bbc2682c24c0415bf7e9a95',1,'franka::MotionFinished(CartesianVelocities command) noexcept']]], + ['motiongenerator_171',['MotionGenerator',['../classMotionGenerator.html',1,'MotionGenerator'],['../classMotionGenerator.html#a23dd564a60401c539fb7f1bf63470894',1,'MotionGenerator::MotionGenerator()']]], + ['move_172',['move',['../classfranka_1_1Gripper.html#a047bc39267d66d6fb26c4c70669d68c2',1,'franka::Gripper']]] +]; diff --git a/search/all_d.html b/search/all_d.html new file mode 100644 index 00000000..af7f2f0f --- /dev/null +++ b/search/all_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_d.js b/search/all_d.js new file mode 100644 index 00000000..af99487c --- /dev/null +++ b/search/all_d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['ne_5ft_5fee_173',['NE_T_EE',['../structfranka_1_1RobotState.html#ac53f1046fe758cfdda438a8e3ba08fff',1,'franka::RobotState']]], + ['networkexception_174',['NetworkException',['../structfranka_1_1NetworkException.html',1,'franka']]] +]; diff --git a/search/all_e.html b/search/all_e.html new file mode 100644 index 00000000..e25df423 --- /dev/null +++ b/search/all_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_e.js b/search/all_e.js new file mode 100644 index 00000000..293334bb --- /dev/null +++ b/search/all_e.js @@ -0,0 +1,35 @@ +var searchData= +[ + ['duration_3c_20uint64_5ft_2c_20std_3a_3amilli_20_3e_175',['duration< uint64_t, std::milli >',['../classfranka_1_1Duration.html#ae58e283f511f9de8ac7e145db5cac1cf',1,'franka::Duration']]], + ['o_5fddp_5fee_5fc_176',['O_ddP_EE_c',['../structfranka_1_1RobotState.html#ac8dfcf78ddbb27852484e921d6d66ca1',1,'franka::RobotState']]], + ['o_5fddp_5fo_177',['O_ddP_O',['../structfranka_1_1RobotState.html#ab24d7982942d316459fc35337dc38ecd',1,'franka::RobotState']]], + ['o_5fdp_5fee_178',['O_dP_EE',['../classfranka_1_1CartesianVelocities.html#ab7a42c7c1ee7109025aff5c43a56b398',1,'franka::CartesianVelocities']]], + ['o_5fdp_5fee_5fc_179',['O_dP_EE_c',['../structfranka_1_1RobotState.html#a4be112bd1a9a7d777a67aea4a18a8dcc',1,'franka::RobotState']]], + ['o_5fdp_5fee_5fd_180',['O_dP_EE_d',['../structfranka_1_1RobotState.html#a1e0a82b98534929c3061295d5761d607',1,'franka::RobotState']]], + ['o_5ff_5fext_5fhat_5fk_181',['O_F_ext_hat_K',['../structfranka_1_1RobotState.html#a5a830b4f9d6a3c2dc92e4a9cc6050493',1,'franka::RobotState']]], + ['o_5ft_5fee_182',['O_T_EE',['../classfranka_1_1CartesianPose.html#a406e53e3d8fe594a11888f516eb4bf7d',1,'franka::CartesianPose::O_T_EE()'],['../structfranka_1_1RobotState.html#a193781d47722b32925e0ea7ac415f442',1,'franka::RobotState::O_T_EE()']]], + ['o_5ft_5fee_5fc_183',['O_T_EE_c',['../structfranka_1_1RobotState.html#a395c48eff099419ea5d42eaf0870fc18',1,'franka::RobotState']]], + ['o_5ft_5fee_5fd_184',['O_T_EE_d',['../structfranka_1_1RobotState.html#a3e5b4b7687856e92d826044be7d15733',1,'franka::RobotState']]], + ['operator_20bool_185',['operator bool',['../structfranka_1_1Errors.html#a50cb6e50c1ce2b5ec281dcad83f1779e',1,'franka::Errors']]], + ['operator_21_3d_186',['operator!=',['../classfranka_1_1Duration.html#a61603353e39361af2f405c1df7097e84',1,'franka::Duration']]], + ['operator_25_187',['operator%',['../classfranka_1_1Duration.html#a5e472345c1bec29b645bee938932fdb1',1,'franka::Duration::operator%(const Duration &rhs) const noexcept'],['../classfranka_1_1Duration.html#af06ff91f24d881c479768c1bcbf31a1e',1,'franka::Duration::operator%(uint64_t rhs) const noexcept']]], + ['operator_25_3d_188',['operator%=',['../classfranka_1_1Duration.html#a97a6ea669877875ffc54c801ac0b152d',1,'franka::Duration::operator%=(const Duration &rhs) noexcept'],['../classfranka_1_1Duration.html#acd85bab22062a2258af83ac5b3b7a647',1,'franka::Duration::operator%=(uint64_t rhs) noexcept']]], + ['operator_28_29_189',['operator()',['../classMotionGenerator.html#aefd763e7c31c54b56404f33d2295fda9',1,'MotionGenerator']]], + ['operator_2a_190',['operator*',['../duration_8h.html#ab3a36a47682756845ef855994aadd7b6',1,'franka::operator*()'],['../classfranka_1_1Duration.html#a3eebc39550880fb2d23d45ba34d8acc5',1,'franka::Duration::operator*(uint64_t rhs) const noexcept']]], + ['operator_2a_3d_191',['operator*=',['../classfranka_1_1Duration.html#a73f971b2efb29a8ce663e8675d1ec09a',1,'franka::Duration']]], + ['operator_2b_192',['operator+',['../classfranka_1_1Duration.html#adb459e7bf5c6b02f9e72c808f5f30237',1,'franka::Duration']]], + ['operator_2b_2b_193',['operator++',['../model_8h.html#ae39c3a098fdb1bc9a097a262312454d0',1,'franka']]], + ['operator_2b_3d_194',['operator+=',['../classfranka_1_1Duration.html#ac55eb81937a12e736560bd856a8f23ae',1,'franka::Duration']]], + ['operator_2d_195',['operator-',['../classfranka_1_1Duration.html#a2a3bc1a8278b91bebe88d7498d410de9',1,'franka::Duration']]], + ['operator_2d_3d_196',['operator-=',['../classfranka_1_1Duration.html#acb24af377db86646918bcfb3e1e2ebe6',1,'franka::Duration']]], + ['operator_2f_197',['operator/',['../classfranka_1_1Duration.html#a15b7299198f36734b62ac98da1ef8c9c',1,'franka::Duration::operator/(uint64_t rhs) const noexcept'],['../classfranka_1_1Duration.html#a90c76be31b53e11f5761416a05d990be',1,'franka::Duration::operator/(const Duration &rhs) const noexcept']]], + ['operator_2f_3d_198',['operator/=',['../classfranka_1_1Duration.html#ac866dd8d0e8f2dbb92089dbd78418571',1,'franka::Duration']]], + ['operator_3c_199',['operator<',['../classfranka_1_1Duration.html#af1650b31c1226a447406fc243f4a2ac1',1,'franka::Duration']]], + ['operator_3c_3c_200',['operator<<',['../vacuum__gripper__state_8h.html#aa2caece6baf774e998b6dec6e803cf24',1,'franka::operator<<(std::ostream &ostream, const franka::VacuumGripperState &vacuum_gripper_state)'],['../robot__state_8h.html#a7d75ab63150979690a639f432c166755',1,'franka::operator<<(std::ostream &ostream, RobotMode robot_mode)'],['../robot__state_8h.html#aee38e87180cc96476d0f11335da29e20',1,'franka::operator<<(std::ostream &ostream, const franka::RobotState &robot_state)'],['../gripper__state_8h.html#ab66181a74d1d3b7e90ae3b424ee85f4f',1,'franka::operator<<(std::ostream &ostream, const franka::GripperState &gripper_state)'],['../errors_8h.html#ad1027058086c3c154f4bbc9cade1f197',1,'franka::operator<<(std::ostream &ostream, const Errors &errors)']]], + ['operator_3c_3d_201',['operator<=',['../classfranka_1_1Duration.html#ae4b9c8646fd50a2105d36f3848a5b949',1,'franka::Duration']]], + ['operator_3d_202',['operator=',['../classfranka_1_1VacuumGripper.html#a21d59603ac4deb8d9de5e074a57d080d',1,'franka::VacuumGripper::operator=()'],['../classfranka_1_1Robot.html#a35465b8497a7adbd277e70e98b7d97a7',1,'franka::Robot::operator=()'],['../classfranka_1_1Model.html#a625529a4c9aed7783c9c6e150dbba793',1,'franka::Model::operator=()'],['../classfranka_1_1Gripper.html#a3c99c6973f8951ca489c4177cfacb069',1,'franka::Gripper::operator=()'],['../structfranka_1_1Errors.html#a6fefa4083d79362080b79f3492fd4cb6',1,'franka::Errors::operator=()'],['../classfranka_1_1Duration.html#adf2fec0c87fe1668e42f217ab029df19',1,'franka::Duration::operator=(const Duration &)=default']]], + ['operator_3d_3d_203',['operator==',['../classfranka_1_1Duration.html#add0c7bcdfe51b563016236b223d74eae',1,'franka::Duration']]], + ['operator_3e_204',['operator>',['../classfranka_1_1Duration.html#a1702ec9121fe6cff1de533d116edcce0',1,'franka::Duration']]], + ['operator_3e_3d_205',['operator>=',['../classfranka_1_1Duration.html#a5bc498cf96d96f5908d6bd93eea491aa',1,'franka::Duration']]], + ['string_206',['string',['../structfranka_1_1Errors.html#a63ed1948f69db5be95a9c70107955d68',1,'franka::Errors']]] +]; diff --git a/search/all_f.html b/search/all_f.html new file mode 100644 index 00000000..b23da6ce --- /dev/null +++ b/search/all_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_f.js b/search/all_f.js new file mode 100644 index 00000000..35236d40 --- /dev/null +++ b/search/all_f.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['part_5fdetached_207',['part_detached',['../structfranka_1_1VacuumGripperState.html#aa27a2b4b9d19bdcb059995a8121ba309',1,'franka::VacuumGripperState']]], + ['part_5fpresent_208',['part_present',['../structfranka_1_1VacuumGripperState.html#aeb5664ab2a9784c9e31ce5f67c914107',1,'franka::VacuumGripperState']]], + ['pose_209',['pose',['../classfranka_1_1Model.html#a593c39dae76a6801cdd2402c2a783157',1,'franka::Model::pose(Frame frame, const franka::RobotState &robot_state) const'],['../classfranka_1_1Model.html#adf4fdf0404c2acf783493f7e646a6281',1,'franka::Model::pose(Frame frame, const std::array< double, 7 > &q, const std::array< double, 16 > &F_T_EE, const std::array< double, 16 > &EE_T_K) const']]], + ['power_5flimit_5fviolation_210',['power_limit_violation',['../structfranka_1_1Errors.html#a6c4d8cb1fb314567ebd07a6195b840f5',1,'franka::Errors']]], + ['productionsetupprofile_211',['ProductionSetupProfile',['../classfranka_1_1VacuumGripper.html#a0c81171a75c385780a82ff8dc36ef51e',1,'franka::VacuumGripper']]], + ['protocolexception_212',['ProtocolException',['../structfranka_1_1ProtocolException.html',1,'franka']]] +]; diff --git a/search/classes_0.html b/search/classes_0.html new file mode 100644 index 00000000..af8159ee --- /dev/null +++ b/search/classes_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_0.js b/search/classes_0.js new file mode 100644 index 00000000..7157bbca --- /dev/null +++ b/search/classes_0.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['activecontrol_277',['ActiveControl',['../classfranka_1_1ActiveControl.html',1,'franka']]], + ['activecontrolbase_278',['ActiveControlBase',['../classfranka_1_1ActiveControlBase.html',1,'franka']]], + ['activemotiongenerator_279',['ActiveMotionGenerator',['../classfranka_1_1ActiveMotionGenerator.html',1,'franka']]], + ['activetorquecontrol_280',['ActiveTorqueControl',['../classfranka_1_1ActiveTorqueControl.html',1,'franka']]] +]; diff --git a/search/classes_1.html b/search/classes_1.html new file mode 100644 index 00000000..576e9168 --- /dev/null +++ b/search/classes_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_1.js b/search/classes_1.js new file mode 100644 index 00000000..3a1a0473 --- /dev/null +++ b/search/classes_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['cartesianpose_281',['CartesianPose',['../classfranka_1_1CartesianPose.html',1,'franka']]], + ['cartesianvelocities_282',['CartesianVelocities',['../classfranka_1_1CartesianVelocities.html',1,'franka']]], + ['commandexception_283',['CommandException',['../structfranka_1_1CommandException.html',1,'franka']]], + ['controlexception_284',['ControlException',['../structfranka_1_1ControlException.html',1,'franka']]] +]; diff --git a/search/classes_2.html b/search/classes_2.html new file mode 100644 index 00000000..956405e5 --- /dev/null +++ b/search/classes_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_2.js b/search/classes_2.js new file mode 100644 index 00000000..e097eea7 --- /dev/null +++ b/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['duration_285',['Duration',['../classfranka_1_1Duration.html',1,'franka']]] +]; diff --git a/search/classes_3.html b/search/classes_3.html new file mode 100644 index 00000000..d33343bc --- /dev/null +++ b/search/classes_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_3.js b/search/classes_3.js new file mode 100644 index 00000000..337403a6 --- /dev/null +++ b/search/classes_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['errors_286',['Errors',['../structfranka_1_1Errors.html',1,'franka']]], + ['exception_287',['Exception',['../structfranka_1_1Exception.html',1,'franka']]] +]; diff --git a/search/classes_4.html b/search/classes_4.html new file mode 100644 index 00000000..8430b07f --- /dev/null +++ b/search/classes_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_4.js b/search/classes_4.js new file mode 100644 index 00000000..199a9c40 --- /dev/null +++ b/search/classes_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['finishable_288',['Finishable',['../structfranka_1_1Finishable.html',1,'franka']]] +]; diff --git a/search/classes_5.html b/search/classes_5.html new file mode 100644 index 00000000..c2f1b767 --- /dev/null +++ b/search/classes_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_5.js b/search/classes_5.js new file mode 100644 index 00000000..48324c64 --- /dev/null +++ b/search/classes_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['gripper_289',['Gripper',['../classfranka_1_1Gripper.html',1,'franka']]], + ['gripperstate_290',['GripperState',['../structfranka_1_1GripperState.html',1,'franka']]] +]; diff --git a/search/classes_6.html b/search/classes_6.html new file mode 100644 index 00000000..e39847ce --- /dev/null +++ b/search/classes_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_6.js b/search/classes_6.js new file mode 100644 index 00000000..d0820079 --- /dev/null +++ b/search/classes_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['incompatibleversionexception_291',['IncompatibleVersionException',['../structfranka_1_1IncompatibleVersionException.html',1,'franka']]], + ['invalidoperationexception_292',['InvalidOperationException',['../structfranka_1_1InvalidOperationException.html',1,'franka']]] +]; diff --git a/search/classes_7.html b/search/classes_7.html new file mode 100644 index 00000000..a2c4d1a3 --- /dev/null +++ b/search/classes_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_7.js b/search/classes_7.js new file mode 100644 index 00000000..2129c123 --- /dev/null +++ b/search/classes_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['jointpositions_293',['JointPositions',['../classfranka_1_1JointPositions.html',1,'franka']]], + ['jointvelocities_294',['JointVelocities',['../classfranka_1_1JointVelocities.html',1,'franka']]] +]; diff --git a/search/classes_8.html b/search/classes_8.html new file mode 100644 index 00000000..17003e48 --- /dev/null +++ b/search/classes_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_8.js b/search/classes_8.js new file mode 100644 index 00000000..5af84710 --- /dev/null +++ b/search/classes_8.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['model_295',['Model',['../classfranka_1_1Model.html',1,'franka']]], + ['modelexception_296',['ModelException',['../structfranka_1_1ModelException.html',1,'franka']]], + ['motiongenerator_297',['MotionGenerator',['../classMotionGenerator.html',1,'']]] +]; diff --git a/search/classes_9.html b/search/classes_9.html new file mode 100644 index 00000000..b8afa8cb --- /dev/null +++ b/search/classes_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_9.js b/search/classes_9.js new file mode 100644 index 00000000..094dde50 --- /dev/null +++ b/search/classes_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['networkexception_298',['NetworkException',['../structfranka_1_1NetworkException.html',1,'franka']]] +]; diff --git a/search/classes_a.html b/search/classes_a.html new file mode 100644 index 00000000..6788af27 --- /dev/null +++ b/search/classes_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_a.js b/search/classes_a.js new file mode 100644 index 00000000..b001005b --- /dev/null +++ b/search/classes_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['protocolexception_299',['ProtocolException',['../structfranka_1_1ProtocolException.html',1,'franka']]] +]; diff --git a/search/classes_b.html b/search/classes_b.html new file mode 100644 index 00000000..3fcb4985 --- /dev/null +++ b/search/classes_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_b.js b/search/classes_b.js new file mode 100644 index 00000000..7d4d33a2 --- /dev/null +++ b/search/classes_b.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['realtimeexception_300',['RealtimeException',['../structfranka_1_1RealtimeException.html',1,'franka']]], + ['record_301',['Record',['../structfranka_1_1Record.html',1,'franka']]], + ['robot_302',['Robot',['../classfranka_1_1Robot.html',1,'franka']]], + ['robotcommand_303',['RobotCommand',['../structfranka_1_1RobotCommand.html',1,'franka']]], + ['robotmodel_304',['RobotModel',['../classfranka_1_1RobotModel.html',1,'franka']]], + ['robotmodelbase_305',['RobotModelBase',['../classRobotModelBase.html',1,'']]], + ['robotstate_306',['RobotState',['../structfranka_1_1RobotState.html',1,'franka']]] +]; diff --git a/search/classes_c.html b/search/classes_c.html new file mode 100644 index 00000000..2f7b1f3d --- /dev/null +++ b/search/classes_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_c.js b/search/classes_c.js new file mode 100644 index 00000000..20cb6ae7 --- /dev/null +++ b/search/classes_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['torques_307',['Torques',['../classfranka_1_1Torques.html',1,'franka']]] +]; diff --git a/search/classes_d.html b/search/classes_d.html new file mode 100644 index 00000000..f9011e70 --- /dev/null +++ b/search/classes_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_d.js b/search/classes_d.js new file mode 100644 index 00000000..d75692a4 --- /dev/null +++ b/search/classes_d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['vacuumgripper_308',['VacuumGripper',['../classfranka_1_1VacuumGripper.html',1,'franka']]], + ['vacuumgripperstate_309',['VacuumGripperState',['../structfranka_1_1VacuumGripperState.html',1,'franka']]] +]; diff --git a/search/close.svg b/search/close.svg new file mode 100644 index 00000000..a933eea1 --- /dev/null +++ b/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/search/enums_0.html b/search/enums_0.html new file mode 100644 index 00000000..141fff57 --- /dev/null +++ b/search/enums_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enums_0.js b/search/enums_0.js new file mode 100644 index 00000000..4a1a85e9 --- /dev/null +++ b/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['controllermode_558',['ControllerMode',['../control__types_8h.html#a3e20bc77587e2c0c53598753e3f4816b',1,'franka']]] +]; diff --git a/search/enums_1.html b/search/enums_1.html new file mode 100644 index 00000000..d29f3b16 --- /dev/null +++ b/search/enums_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enums_1.js b/search/enums_1.js new file mode 100644 index 00000000..82501c9c --- /dev/null +++ b/search/enums_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['frame_559',['Frame',['../model_8h.html#a00b729ddce916481d3f0d10febec4f5b',1,'franka']]] +]; diff --git a/search/enums_2.html b/search/enums_2.html new file mode 100644 index 00000000..59aadf2c --- /dev/null +++ b/search/enums_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enums_2.js b/search/enums_2.js new file mode 100644 index 00000000..6d2b52f4 --- /dev/null +++ b/search/enums_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['productionsetupprofile_560',['ProductionSetupProfile',['../classfranka_1_1VacuumGripper.html#a0c81171a75c385780a82ff8dc36ef51e',1,'franka::VacuumGripper']]] +]; diff --git a/search/enums_3.html b/search/enums_3.html new file mode 100644 index 00000000..87c17443 --- /dev/null +++ b/search/enums_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enums_3.js b/search/enums_3.js new file mode 100644 index 00000000..914bcc8d --- /dev/null +++ b/search/enums_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['realtimeconfig_561',['RealtimeConfig',['../control__types_8h.html#aeede4f4629390fea21ca5e5a35a8a943',1,'franka']]], + ['robotmode_562',['RobotMode',['../robot__state_8h.html#adfe059ae23ebbad59e421edaa879651a',1,'franka']]] +]; diff --git a/search/enums_4.html b/search/enums_4.html new file mode 100644 index 00000000..90dda139 --- /dev/null +++ b/search/enums_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enums_4.js b/search/enums_4.js new file mode 100644 index 00000000..f1f21824 --- /dev/null +++ b/search/enums_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['vacuumgripperdevicestatus_563',['VacuumGripperDeviceStatus',['../vacuum__gripper__state_8h.html#a423e2ce5f95933b9897c6e308d91b611',1,'franka']]] +]; diff --git a/search/enumvalues_0.html b/search/enumvalues_0.html new file mode 100644 index 00000000..0d131d95 --- /dev/null +++ b/search/enumvalues_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_0.js b/search/enumvalues_0.js new file mode 100644 index 00000000..91e31b4b --- /dev/null +++ b/search/enumvalues_0.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['kgreen_564',['kGreen',['../vacuum__gripper__state_8h.html#a423e2ce5f95933b9897c6e308d91b611a1299e6e2ec6371a79385cd3a862f7cc9',1,'franka']]], + ['korange_565',['kOrange',['../vacuum__gripper__state_8h.html#a423e2ce5f95933b9897c6e308d91b611a11e1aa07606f098e5025e37830a1b22e',1,'franka']]], + ['kred_566',['kRed',['../vacuum__gripper__state_8h.html#a423e2ce5f95933b9897c6e308d91b611afb0136b923af8c04b31a9d1b5e989acf',1,'franka']]], + ['kyellow_567',['kYellow',['../vacuum__gripper__state_8h.html#a423e2ce5f95933b9897c6e308d91b611a4c6c30a3642462190739bb7f13af9c7b',1,'franka']]] +]; diff --git a/search/files_0.html b/search/files_0.html new file mode 100644 index 00000000..9498842a --- /dev/null +++ b/search/files_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_0.js b/search/files_0.js new file mode 100644 index 00000000..556f5d57 --- /dev/null +++ b/search/files_0.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['active_5fcontrol_2eh_310',['active_control.h',['../active__control_8h.html',1,'']]], + ['active_5fcontrol_5fbase_2eh_311',['active_control_base.h',['../active__control__base_8h.html',1,'']]], + ['active_5fmotion_5fgenerator_2eh_312',['active_motion_generator.h',['../active__motion__generator_8h.html',1,'']]], + ['active_5ftorque_5fcontrol_2eh_313',['active_torque_control.h',['../active__torque__control_8h.html',1,'']]] +]; diff --git a/search/files_1.html b/search/files_1.html new file mode 100644 index 00000000..7050ef48 --- /dev/null +++ b/search/files_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_1.js b/search/files_1.js new file mode 100644 index 00000000..2f9676db --- /dev/null +++ b/search/files_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['control_5ftools_2eh_314',['control_tools.h',['../control__tools_8h.html',1,'']]], + ['control_5ftypes_2eh_315',['control_types.h',['../control__types_8h.html',1,'']]] +]; diff --git a/search/files_2.html b/search/files_2.html new file mode 100644 index 00000000..497cdf5c --- /dev/null +++ b/search/files_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_2.js b/search/files_2.js new file mode 100644 index 00000000..26012f85 --- /dev/null +++ b/search/files_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['duration_2eh_316',['duration.h',['../duration_8h.html',1,'']]] +]; diff --git a/search/files_3.html b/search/files_3.html new file mode 100644 index 00000000..1ba106b2 --- /dev/null +++ b/search/files_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_3.js b/search/files_3.js new file mode 100644 index 00000000..a162bacf --- /dev/null +++ b/search/files_3.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['errors_2eh_317',['errors.h',['../errors_8h.html',1,'']]], + ['examples_5fcommon_2eh_318',['examples_common.h',['../examples__common_8h.html',1,'']]], + ['exception_2eh_319',['exception.h',['../exception_8h.html',1,'']]] +]; diff --git a/search/files_4.html b/search/files_4.html new file mode 100644 index 00000000..753b7b10 --- /dev/null +++ b/search/files_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_4.js b/search/files_4.js new file mode 100644 index 00000000..8da8f48c --- /dev/null +++ b/search/files_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['gripper_2eh_320',['gripper.h',['../gripper_8h.html',1,'']]], + ['gripper_5fstate_2eh_321',['gripper_state.h',['../gripper__state_8h.html',1,'']]] +]; diff --git a/search/files_5.html b/search/files_5.html new file mode 100644 index 00000000..7b6affd7 --- /dev/null +++ b/search/files_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_5.js b/search/files_5.js new file mode 100644 index 00000000..bf3bce39 --- /dev/null +++ b/search/files_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['log_2eh_322',['log.h',['../log_8h.html',1,'']]], + ['lowpass_5ffilter_2eh_323',['lowpass_filter.h',['../lowpass__filter_8h.html',1,'']]] +]; diff --git a/search/files_6.html b/search/files_6.html new file mode 100644 index 00000000..802ebf71 --- /dev/null +++ b/search/files_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_6.js b/search/files_6.js new file mode 100644 index 00000000..ea0377e9 --- /dev/null +++ b/search/files_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['model_2eh_324',['model.h',['../model_8h.html',1,'']]] +]; diff --git a/search/files_7.html b/search/files_7.html new file mode 100644 index 00000000..365e6484 --- /dev/null +++ b/search/files_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_7.js b/search/files_7.js new file mode 100644 index 00000000..28c75edb --- /dev/null +++ b/search/files_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['rate_5flimiting_2eh_325',['rate_limiting.h',['../rate__limiting_8h.html',1,'']]], + ['robot_2eh_326',['robot.h',['../robot_8h.html',1,'']]], + ['robot_5fstate_2eh_327',['robot_state.h',['../robot__state_8h.html',1,'']]] +]; diff --git a/search/files_8.html b/search/files_8.html new file mode 100644 index 00000000..3df0f2fa --- /dev/null +++ b/search/files_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_8.js b/search/files_8.js new file mode 100644 index 00000000..9596b6eb --- /dev/null +++ b/search/files_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['vacuum_5fgripper_2eh_328',['vacuum_gripper.h',['../vacuum__gripper_8h.html',1,'']]], + ['vacuum_5fgripper_5fstate_2eh_329',['vacuum_gripper_state.h',['../vacuum__gripper__state_8h.html',1,'']]] +]; diff --git a/search/functions_0.html b/search/functions_0.html new file mode 100644 index 00000000..eb4c5014 --- /dev/null +++ b/search/functions_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_0.js b/search/functions_0.js new file mode 100644 index 00000000..a1ac2609 --- /dev/null +++ b/search/functions_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['activecontrol_330',['ActiveControl',['../classfranka_1_1ActiveControl.html#a4aa09537fddbec6cf1eed05fdc147b30',1,'franka::ActiveControl']]], + ['automaticerrorrecovery_331',['automaticErrorRecovery',['../classfranka_1_1Robot.html#af682aa673415718715bd859116bc2fed',1,'franka::Robot']]] +]; diff --git a/search/functions_1.html b/search/functions_1.html new file mode 100644 index 00000000..ef4088b8 --- /dev/null +++ b/search/functions_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_1.js b/search/functions_1.js new file mode 100644 index 00000000..3ac3985f --- /dev/null +++ b/search/functions_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['bodyjacobian_332',['bodyJacobian',['../classfranka_1_1Model.html#a914a197a900a275799cf8d7461bb9d8a',1,'franka::Model::bodyJacobian(Frame frame, const franka::RobotState &robot_state) const'],['../classfranka_1_1Model.html#a9ceca00546fa221f15ddaa7c0d27c40e',1,'franka::Model::bodyJacobian(Frame frame, const std::array< double, 7 > &q, const std::array< double, 16 > &F_T_EE, const std::array< double, 16 > &EE_T_K) const']]] +]; diff --git a/search/functions_10.html b/search/functions_10.html new file mode 100644 index 00000000..1bdc1257 --- /dev/null +++ b/search/functions_10.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_10.js b/search/functions_10.js new file mode 100644 index 00000000..768638f5 --- /dev/null +++ b/search/functions_10.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['vacuum_414',['vacuum',['../classfranka_1_1VacuumGripper.html#a517d95d9800990ca1a5892473c2def89',1,'franka::VacuumGripper']]], + ['vacuumgripper_415',['VacuumGripper',['../classfranka_1_1VacuumGripper.html#ab5d8483a0bb16136da684cfac721eae1',1,'franka::VacuumGripper::VacuumGripper(const std::string &franka_address)'],['../classfranka_1_1VacuumGripper.html#ab80730b14b5948eea37395e87800ce5f',1,'franka::VacuumGripper::VacuumGripper(VacuumGripper &&vacuum_gripper) noexcept']]] +]; diff --git a/search/functions_11.html b/search/functions_11.html new file mode 100644 index 00000000..188076ef --- /dev/null +++ b/search/functions_11.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_11.js b/search/functions_11.js new file mode 100644 index 00000000..f5db6d74 --- /dev/null +++ b/search/functions_11.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['writeonce_416',['writeOnce',['../classfranka_1_1ActiveControlBase.html#ab0b5421122071fa0d578dcd0f4cabc36',1,'franka::ActiveControlBase::writeOnce()'],['../classfranka_1_1ActiveTorqueControl.html#acc3b1d8c41cd191786e384887adf5da2',1,'franka::ActiveTorqueControl::writeOnce()'],['../classfranka_1_1ActiveMotionGenerator.html#aae24c0819a0bd0996657063832245d69',1,'franka::ActiveMotionGenerator::writeOnce()'],['../classfranka_1_1ActiveControlBase.html#a35ad38e4c512e34b0c82b081cefe4020',1,'franka::ActiveControlBase::writeOnce(const CartesianVelocities &motion_generator_input)=0'],['../classfranka_1_1ActiveControlBase.html#a9b05a521b8ab9d1af6c58b3d1fbcf12f',1,'franka::ActiveControlBase::writeOnce(const CartesianPose &motion_generator_input)=0'],['../classfranka_1_1ActiveControlBase.html#ae00c5b9387e21b76443ddfd173f7d01e',1,'franka::ActiveControlBase::writeOnce(const JointVelocities &motion_generator_input)=0'],['../classfranka_1_1ActiveControlBase.html#a800a13f3d6d12408dbff3afc8d072af2',1,'franka::ActiveControlBase::writeOnce(const JointPositions &motion_generator_input)=0'],['../classfranka_1_1ActiveControlBase.html#ac94d472225bbe8b6322b9f3cbf98bd3b',1,'franka::ActiveControlBase::writeOnce(const CartesianVelocities &, const std::optional< const Torques > &)=0'],['../classfranka_1_1ActiveControlBase.html#a61ffd2a40b082e275784175f7a38aa08',1,'franka::ActiveControlBase::writeOnce(const CartesianPose &, const std::optional< const Torques > &)=0'],['../classfranka_1_1ActiveControlBase.html#a46f54e3366ad083c9dedf62b9f4e1fea',1,'franka::ActiveControlBase::writeOnce(const JointVelocities &, const std::optional< const Torques > &)=0'],['../classfranka_1_1ActiveControl.html#a888b87832cd3def156c07a0b57d95663',1,'franka::ActiveControl::writeOnce()'],['../classfranka_1_1ActiveControlBase.html#a070846c3bd259aa703848d984a82e43d',1,'franka::ActiveControlBase::writeOnce()'],['../classfranka_1_1ActiveControl.html#ad4bf06b3e873fd95a2261d67d89a4d1f',1,'franka::ActiveControl::writeOnce(const CartesianVelocities &motion_generator_input) override'],['../classfranka_1_1ActiveControl.html#a6b6265ccad26dc2e32c7b6329b74fb80',1,'franka::ActiveControl::writeOnce(const CartesianPose &motion_generator_input) override'],['../classfranka_1_1ActiveControl.html#a7f54a6bc037fa63f14e1a3f1329d4bf5',1,'franka::ActiveControl::writeOnce(const JointVelocities &motion_generator_input) override'],['../classfranka_1_1ActiveControl.html#a8166a590c84c749cd90c874bd2f1aca4',1,'franka::ActiveControl::writeOnce(const JointPositions &motion_generator_input) override'],['../classfranka_1_1ActiveControl.html#a12c3c6916e26e66dae41eb624daabb4a',1,'franka::ActiveControl::writeOnce(const CartesianVelocities &, const std::optional< const Torques > &) override'],['../classfranka_1_1ActiveControl.html#a52f9ce19182359732bddee7b52a87419',1,'franka::ActiveControl::writeOnce(const CartesianPose &, const std::optional< const Torques > &) override'],['../classfranka_1_1ActiveControl.html#a2a27360ae8203fa8a413c47708e03ede',1,'franka::ActiveControl::writeOnce(const JointVelocities &, const std::optional< const Torques > &) override'],['../classfranka_1_1ActiveControl.html#a762615a1a3d5cf18064bfbd0b45effa6',1,'franka::ActiveControl::writeOnce(const JointPositions &, const std::optional< const Torques > &) override']]] +]; diff --git a/search/functions_12.html b/search/functions_12.html new file mode 100644 index 00000000..eb29d8f9 --- /dev/null +++ b/search/functions_12.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_12.js b/search/functions_12.js new file mode 100644 index 00000000..5ae03e35 --- /dev/null +++ b/search/functions_12.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['zerojacobian_417',['zeroJacobian',['../classfranka_1_1Model.html#a6fb6347b571a6759bad10b3a9e28a28f',1,'franka::Model::zeroJacobian(Frame frame, const franka::RobotState &robot_state) const'],['../classfranka_1_1Model.html#a6522f1079e1dc5f6799dde6197b45259',1,'franka::Model::zeroJacobian(Frame frame, const std::array< double, 7 > &q, const std::array< double, 16 > &F_T_EE, const std::array< double, 16 > &EE_T_K) const']]] +]; diff --git a/search/functions_13.html b/search/functions_13.html new file mode 100644 index 00000000..3da2ea69 --- /dev/null +++ b/search/functions_13.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_13.js b/search/functions_13.js new file mode 100644 index 00000000..826ceff0 --- /dev/null +++ b/search/functions_13.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['_7egripper_418',['~Gripper',['../classfranka_1_1Gripper.html#ade253b8a35312d52c636c6aafb7b2e1d',1,'franka::Gripper']]], + ['_7emodel_419',['~Model',['../classfranka_1_1Model.html#a1d6ffa26afc6cfdff7e329d15b8bd65e',1,'franka::Model']]], + ['_7erobot_420',['~Robot',['../classfranka_1_1Robot.html#ac19400de0fd39852d5825b1f1ccc85e2',1,'franka::Robot']]], + ['_7evacuumgripper_421',['~VacuumGripper',['../classfranka_1_1VacuumGripper.html#af43f640f3cb9ca873b02bb464d3c279b',1,'franka::VacuumGripper']]] +]; diff --git a/search/functions_2.html b/search/functions_2.html new file mode 100644 index 00000000..ca5aa10e --- /dev/null +++ b/search/functions_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_2.js b/search/functions_2.js new file mode 100644 index 00000000..aa4d35e8 --- /dev/null +++ b/search/functions_2.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['cartesianlowpassfilter_333',['cartesianLowpassFilter',['../lowpass__filter_8h.html#ac25e174345ea5e2ea9099287ad43cd2b',1,'franka']]], + ['cartesianpose_334',['CartesianPose',['../classfranka_1_1CartesianPose.html#a17272cb33af9aa4b726fa96b31cf0101',1,'franka::CartesianPose::CartesianPose(const std::array< double, 16 > &cartesian_pose, const std::array< double, 2 > &elbow) noexcept'],['../classfranka_1_1CartesianPose.html#a70b6460e98bc763a49c53accd48d54a2',1,'franka::CartesianPose::CartesianPose(std::initializer_list< double > cartesian_pose)'],['../classfranka_1_1CartesianPose.html#ab7fb1dfd7cdb89c0caebab95c669ba49',1,'franka::CartesianPose::CartesianPose(std::initializer_list< double > cartesian_pose, std::initializer_list< double > elbow)'],['../classfranka_1_1CartesianPose.html#a5559a53a898f9b369b1df9d51f9351b5',1,'franka::CartesianPose::CartesianPose(const std::array< double, 16 > &cartesian_pose) noexcept']]], + ['cartesianvelocities_335',['CartesianVelocities',['../classfranka_1_1CartesianVelocities.html#a713380954e1f10c1be3033b95ca00657',1,'franka::CartesianVelocities::CartesianVelocities(const std::array< double, 6 > &cartesian_velocities) noexcept'],['../classfranka_1_1CartesianVelocities.html#a95f6feec3539ed9f96d555447717eb72',1,'franka::CartesianVelocities::CartesianVelocities(const std::array< double, 6 > &cartesian_velocities, const std::array< double, 2 > &elbow) noexcept'],['../classfranka_1_1CartesianVelocities.html#a39c4b06c315c963460e24324de8ad079',1,'franka::CartesianVelocities::CartesianVelocities(std::initializer_list< double > cartesian_velocities)'],['../classfranka_1_1CartesianVelocities.html#aec434afa3f92e462ad3ab4766d3456a4',1,'franka::CartesianVelocities::CartesianVelocities(std::initializer_list< double > cartesian_velocities, std::initializer_list< double > elbow)']]], + ['checkelbow_336',['checkElbow',['../control__tools_8h.html#add0cd2cd1401ac0b2393a84ca1577cde',1,'franka']]], + ['checkfinite_337',['checkFinite',['../control__tools_8h.html#a80d02c11ba41e5973ee76624bf1d4466',1,'franka']]], + ['checkmatrix_338',['checkMatrix',['../control__tools_8h.html#ab38ee604eecfedfb591ddb8327805ea4',1,'franka']]], + ['computelowerlimitsjointvelocity_339',['computeLowerLimitsJointVelocity',['../rate__limiting_8h.html#a75fe6c28325d7631f7bdb6c2b388b268',1,'franka']]], + ['computeupperlimitsjointvelocity_340',['computeUpperLimitsJointVelocity',['../rate__limiting_8h.html#a3a025c3c8f71f59627fe4f7e801021ac',1,'franka']]], + ['control_341',['control',['../classfranka_1_1Robot.html#a6ba6193e52178899dc8c6a34aa4c537c',1,'franka::Robot::control(std::function< JointVelocities(const RobotState &, franka::Duration)> motion_generator_callback, ControllerMode controller_mode=ControllerMode::kJointImpedance, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)'],['../classfranka_1_1Robot.html#adce4add23b47befadccd30e3dbe9f2f4',1,'franka::Robot::control(std::function< CartesianPose(const RobotState &, franka::Duration)> motion_generator_callback, ControllerMode controller_mode=ControllerMode::kJointImpedance, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)'],['../classfranka_1_1Robot.html#a2176c99664b83bb394f0b2dfd416a8ee',1,'franka::Robot::control(std::function< CartesianVelocities(const RobotState &, franka::Duration)> motion_generator_callback, ControllerMode controller_mode=ControllerMode::kJointImpedance, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)'],['../classfranka_1_1Robot.html#a7fef8f6418cff168f680ac7c61a6b5cd',1,'franka::Robot::control(std::function< JointPositions(const RobotState &, franka::Duration)> motion_generator_callback, ControllerMode controller_mode=ControllerMode::kJointImpedance, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)'],['../classfranka_1_1Robot.html#aeb276d0a0e55f032841976de7db86f5a',1,'franka::Robot::control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, std::function< CartesianVelocities(const RobotState &, franka::Duration)> motion_generator_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)'],['../classfranka_1_1Robot.html#a4ce9fd531f97c8cc943dd2479298a55f',1,'franka::Robot::control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, std::function< CartesianPose(const RobotState &, franka::Duration)> motion_generator_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)'],['../classfranka_1_1Robot.html#a76e8b7a9c7e2b874c3e300ba7cdeb8ca',1,'franka::Robot::control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, std::function< JointVelocities(const RobotState &, franka::Duration)> motion_generator_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)'],['../classfranka_1_1Robot.html#a4b625b781d388f3379e0961c724239d5',1,'franka::Robot::control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, std::function< JointPositions(const RobotState &, franka::Duration)> motion_generator_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)'],['../classfranka_1_1Robot.html#a0d5effba5daff2fee123802bbd5f95d1',1,'franka::Robot::control(std::function< Torques(const RobotState &, franka::Duration)> control_callback, bool limit_rate=false, double cutoff_frequency=kDefaultCutoffFrequency)']]], + ['controlexception_342',['ControlException',['../structfranka_1_1ControlException.html#a2efb9628eef80a3819031dbf2e2cb518',1,'franka::ControlException']]], + ['coriolis_343',['coriolis',['../classfranka_1_1Model.html#a91424f181a93bb47bda6af2d3567c65c',1,'franka::Model::coriolis(const franka::RobotState &robot_state) const noexcept'],['../classfranka_1_1Model.html#a3445ad932ddda2e3540768af9b7b4852',1,'franka::Model::coriolis(const std::array< double, 7 > &q, const std::array< double, 7 > &dq, const std::array< double, 9 > &I_total, double m_total, const std::array< double, 3 > &F_x_Ctotal) const noexcept'],['../classfranka_1_1RobotModel.html#ae8b6b42f32ffb0ca654e76080c8ee347',1,'franka::RobotModel::coriolis()'],['../classRobotModelBase.html#a45226fbc547a27d5e7cff8a78e9bd0b4',1,'RobotModelBase::coriolis()']]] +]; diff --git a/search/functions_3.html b/search/functions_3.html new file mode 100644 index 00000000..d79f55b8 --- /dev/null +++ b/search/functions_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_3.js b/search/functions_3.js new file mode 100644 index 00000000..374af330 --- /dev/null +++ b/search/functions_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['dropoff_344',['dropOff',['../classfranka_1_1VacuumGripper.html#a04645348e97b946a788205c8b1168cac',1,'franka::VacuumGripper']]], + ['duration_345',['Duration',['../classfranka_1_1Duration.html#af721da321423772b4ce7ff11280d38d5',1,'franka::Duration::Duration() noexcept'],['../classfranka_1_1Duration.html#a46f0cea3e05c27cdaaba5ff25e0e6cd6',1,'franka::Duration::Duration(uint64_t milliseconds) noexcept'],['../classfranka_1_1Duration.html#a389dfef50f34e9cc5be69838fbdafba7',1,'franka::Duration::Duration(std::chrono::duration< uint64_t, std::milli > duration) noexcept'],['../classfranka_1_1Duration.html#a886575e716b45e85de1bb78def2eb133',1,'franka::Duration::Duration(const Duration &)=default']]] +]; diff --git a/search/functions_4.html b/search/functions_4.html new file mode 100644 index 00000000..1657cad0 --- /dev/null +++ b/search/functions_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_4.js b/search/functions_4.js new file mode 100644 index 00000000..e1158818 --- /dev/null +++ b/search/functions_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['errors_346',['Errors',['../structfranka_1_1Errors.html#aedd6b6af230c01b6f106b5050b29d9ae',1,'franka::Errors::Errors()'],['../structfranka_1_1Errors.html#a4548a72089cc6d61c9249a1b8f4cc480',1,'franka::Errors::Errors(const Errors &other)'],['../structfranka_1_1Errors.html#adffc6f8b2235e566c4a43ce69a86634e',1,'franka::Errors::Errors(const std::array< bool, 41 > &errors)']]] +]; diff --git a/search/functions_5.html b/search/functions_5.html new file mode 100644 index 00000000..9301d6b9 --- /dev/null +++ b/search/functions_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_5.js b/search/functions_5.js new file mode 100644 index 00000000..bd735b32 --- /dev/null +++ b/search/functions_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['getrobotmodel_347',['getRobotModel',['../classfranka_1_1Robot.html#a54565ca0eb7b58727f88a8dcbf2f98ab',1,'franka::Robot']]], + ['grasp_348',['grasp',['../classfranka_1_1Gripper.html#abff6a03a6c75b9079bd4b9b5ca380254',1,'franka::Gripper']]], + ['gravity_349',['gravity',['../classfranka_1_1Model.html#a9b28a648cf413297d80f383e62363ab9',1,'franka::Model::gravity(const std::array< double, 7 > &q, double m_total, const std::array< double, 3 > &F_x_Ctotal, const std::array< double, 3 > &gravity_earth={{0., 0., -9.81}}) const noexcept'],['../classfranka_1_1Model.html#a76a94e1ddb45cf1cdded25be4cf2dcae',1,'franka::Model::gravity(const franka::RobotState &robot_state, const std::array< double, 3 > &gravity_earth) const noexcept'],['../classfranka_1_1Model.html#a983611785e894e1cd1f07a2df97ddbdd',1,'franka::Model::gravity(const franka::RobotState &robot_state) const noexcept'],['../classfranka_1_1RobotModel.html#a027d8e2e713b66cdbaf17201a30236f1',1,'franka::RobotModel::gravity()'],['../classRobotModelBase.html#ace835cdef4ae60d965c9faf57c3914e1',1,'RobotModelBase::gravity()']]], + ['gripper_350',['Gripper',['../classfranka_1_1Gripper.html#a02b30632b08001592c62d3563561afc5',1,'franka::Gripper::Gripper(const std::string &franka_address)'],['../classfranka_1_1Gripper.html#aa045ea81b36f22420f9bc6f2a256a4f0',1,'franka::Gripper::Gripper(Gripper &&gripper) noexcept']]] +]; diff --git a/search/functions_6.html b/search/functions_6.html new file mode 100644 index 00000000..9c4f5fc6 --- /dev/null +++ b/search/functions_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_6.js b/search/functions_6.js new file mode 100644 index 00000000..59a1a003 --- /dev/null +++ b/search/functions_6.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['haselbow_351',['hasElbow',['../classfranka_1_1CartesianPose.html#a5fa9f47dbf73ab45f671d89e11f89ccf',1,'franka::CartesianPose::hasElbow()'],['../classfranka_1_1CartesianVelocities.html#a51a41893b10250982597fe367abb2ca6',1,'franka::CartesianVelocities::hasElbow()']]], + ['hasrealtimekernel_352',['hasRealtimeKernel',['../control__tools_8h.html#ad165a74da105c78586c0cd4c1ed57bd2',1,'franka']]], + ['homing_353',['homing',['../classfranka_1_1Gripper.html#aef356f93a4c3b9d6b2532c29126d478c',1,'franka::Gripper']]] +]; diff --git a/search/functions_7.html b/search/functions_7.html new file mode 100644 index 00000000..46b5c0f6 --- /dev/null +++ b/search/functions_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_7.js b/search/functions_7.js new file mode 100644 index 00000000..03b3b77f --- /dev/null +++ b/search/functions_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['incompatibleversionexception_354',['IncompatibleVersionException',['../structfranka_1_1IncompatibleVersionException.html#a518f40d994ed7e970c6f7fdafb673239',1,'franka::IncompatibleVersionException']]], + ['ishomogeneoustransformation_355',['isHomogeneousTransformation',['../control__tools_8h.html#ad81c99e8af3f2536ae3c6ec1ce8dce1e',1,'franka']]], + ['isvalidelbow_356',['isValidElbow',['../control__tools_8h.html#a4eda3eda0514fabf6d630a6d8c0373a0',1,'franka']]] +]; diff --git a/search/functions_8.html b/search/functions_8.html new file mode 100644 index 00000000..31a1d950 --- /dev/null +++ b/search/functions_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_8.js b/search/functions_8.js new file mode 100644 index 00000000..af9b3d82 --- /dev/null +++ b/search/functions_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['jointpositions_357',['JointPositions',['../classfranka_1_1JointPositions.html#a57bc9d7e033493b1182333276af5ce84',1,'franka::JointPositions::JointPositions(const std::array< double, 7 > &joint_positions) noexcept'],['../classfranka_1_1JointPositions.html#a1e2006bccc9de89d8eb1a4d1c4da2fb8',1,'franka::JointPositions::JointPositions(std::initializer_list< double > joint_positions)']]], + ['jointvelocities_358',['JointVelocities',['../classfranka_1_1JointVelocities.html#a1130f851055de3b7ebe9e6fbac960826',1,'franka::JointVelocities::JointVelocities(const std::array< double, 7 > &joint_velocities) noexcept'],['../classfranka_1_1JointVelocities.html#aed384fad8e302638c2e5baea6378c2d2',1,'franka::JointVelocities::JointVelocities(std::initializer_list< double > joint_velocities)']]] +]; diff --git a/search/functions_9.html b/search/functions_9.html new file mode 100644 index 00000000..9a8e4290 --- /dev/null +++ b/search/functions_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_9.js b/search/functions_9.js new file mode 100644 index 00000000..e1803133 --- /dev/null +++ b/search/functions_9.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['limitrate_359',['limitRate',['../rate__limiting_8h.html#aea6895d6bf209a86319c6cd5180e4b60',1,'franka::limitRate(const std::array< double, 7 > &max_derivatives, const std::array< double, 7 > &commanded_values, const std::array< double, 7 > &last_commanded_values)'],['../rate__limiting_8h.html#ae425f551c62b289a93ad471f94f87b7c',1,'franka::limitRate(double upper_limits_velocity, double lower_limits_velocity, double max_acceleration, double max_jerk, double commanded_velocity, double last_commanded_velocity, double last_commanded_acceleration)'],['../rate__limiting_8h.html#afacb3c087c76dded71874eaa7862b05d',1,'franka::limitRate(double upper_limits_velocity, double lower_limits_velocity, double max_acceleration, double max_jerk, double commanded_position, double last_commanded_position, double last_commanded_velocity, double last_commanded_acceleration)'],['../rate__limiting_8h.html#a62ebac6ebbef784d44135855a899abef',1,'franka::limitRate(const std::array< double, 7 > &upper_limits_velocity, const std::array< double, 7 > &lower_limits_velocity, const std::array< double, 7 > &max_acceleration, const std::array< double, 7 > &max_jerk, const std::array< double, 7 > &commanded_velocities, const std::array< double, 7 > &last_commanded_velocities, const std::array< double, 7 > &last_commanded_accelerations)'],['../rate__limiting_8h.html#aaaa22e0873d0630465e506ddc877083f',1,'franka::limitRate(const std::array< double, 7 > &upper_limits_velocity, const std::array< double, 7 > &lower_limits_velocity, const std::array< double, 7 > &max_acceleration, const std::array< double, 7 > &max_jerk, const std::array< double, 7 > &commanded_positions, const std::array< double, 7 > &last_commanded_positions, const std::array< double, 7 > &last_commanded_velocities, const std::array< double, 7 > &last_commanded_accelerations)'],['../rate__limiting_8h.html#ad3e0243f9be5335ae3d04f87852dfccb',1,'franka::limitRate(double max_translational_velocity, double max_translational_acceleration, double max_translational_jerk, double max_rotational_velocity, double max_rotational_acceleration, double max_rotational_jerk, const std::array< double, 6 > &O_dP_EE_c, const std::array< double, 6 > &last_O_dP_EE_c, const std::array< double, 6 > &last_O_ddP_EE_c)'],['../rate__limiting_8h.html#a9288f438fcfc1aedf7e0b52aa95b23ba',1,'franka::limitRate(double max_translational_velocity, double max_translational_acceleration, double max_translational_jerk, double max_rotational_velocity, double max_rotational_acceleration, double max_rotational_jerk, const std::array< double, 16 > &O_T_EE_c, const std::array< double, 16 > &last_O_T_EE_c, const std::array< double, 6 > &last_O_dP_EE_c, const std::array< double, 6 > &last_O_ddP_EE_c)']]], + ['loadmodel_360',['loadModel',['../classfranka_1_1Robot.html#a2da598c539469827409ac7e3bb61d5da',1,'franka::Robot']]], + ['logtocsv_361',['logToCSV',['../log_8h.html#a01fbdb37b0e6beb04ba108d5f5024fd9',1,'franka']]], + ['lowpassfilter_362',['lowpassFilter',['../lowpass__filter_8h.html#a94c21b0e87afce0147a9cd6025c239ca',1,'franka']]] +]; diff --git a/search/functions_a.html b/search/functions_a.html new file mode 100644 index 00000000..5ecc152c --- /dev/null +++ b/search/functions_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_a.js b/search/functions_a.js new file mode 100644 index 00000000..470d97ae --- /dev/null +++ b/search/functions_a.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['mass_363',['mass',['../classfranka_1_1Model.html#ad5f6156064bc18e42fc0b6d2f36b2006',1,'franka::Model::mass(const franka::RobotState &robot_state) const noexcept'],['../classfranka_1_1Model.html#a61c3a8968e927c8629f1d549d20aaf85',1,'franka::Model::mass(const std::array< double, 7 > &q, const std::array< double, 9 > &I_total, double m_total, const std::array< double, 3 > &F_x_Ctotal) const noexcept'],['../classfranka_1_1RobotModel.html#abbff56dc8a77bb3bead7efb7f891f8ed',1,'franka::RobotModel::mass()'],['../classRobotModelBase.html#ad6205b8405cc76be5b3e8fe3a3a2c1f9',1,'RobotModelBase::mass()']]], + ['model_364',['Model',['../classfranka_1_1Model.html#a8bf08984ec15c041ff1cbbe870945b82',1,'franka::Model::Model(franka::Network &network, const std::string &urdf_model)'],['../classfranka_1_1Model.html#a8148cf270e52ad9e967d4651fc37d690',1,'franka::Model::Model(franka::Network &network, std::unique_ptr< RobotModelBase > robot_model)'],['../classfranka_1_1Model.html#a8b58ff37f62512aecdcd0e6aabfd9548',1,'franka::Model::Model(Model &&model) noexcept']]], + ['motionfinished_365',['MotionFinished',['../control__types_8h.html#a20791f7142d78bbbe3c957cc66a23ade',1,'franka::MotionFinished(Torques command) noexcept'],['../control__types_8h.html#a7f505509951b6568b08b3aec8ffb9098',1,'franka::MotionFinished(JointPositions command) noexcept'],['../control__types_8h.html#ab478c128d691a46c0ab85bbf3b5caac5',1,'franka::MotionFinished(JointVelocities command) noexcept'],['../control__types_8h.html#ab0b308e2a9348fd3eb5fd1d08db12dcf',1,'franka::MotionFinished(CartesianPose command) noexcept'],['../control__types_8h.html#a5898ad5e3bbc2682c24c0415bf7e9a95',1,'franka::MotionFinished(CartesianVelocities command) noexcept']]], + ['motiongenerator_366',['MotionGenerator',['../classMotionGenerator.html#a23dd564a60401c539fb7f1bf63470894',1,'MotionGenerator']]], + ['move_367',['move',['../classfranka_1_1Gripper.html#a047bc39267d66d6fb26c4c70669d68c2',1,'franka::Gripper']]] +]; diff --git a/search/functions_b.html b/search/functions_b.html new file mode 100644 index 00000000..e301fedd --- /dev/null +++ b/search/functions_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_b.js b/search/functions_b.js new file mode 100644 index 00000000..5d0488d5 --- /dev/null +++ b/search/functions_b.js @@ -0,0 +1,26 @@ +var searchData= +[ + ['duration_3c_20uint64_5ft_2c_20std_3a_3amilli_20_3e_368',['duration< uint64_t, std::milli >',['../classfranka_1_1Duration.html#ae58e283f511f9de8ac7e145db5cac1cf',1,'franka::Duration']]], + ['operator_20bool_369',['operator bool',['../structfranka_1_1Errors.html#a50cb6e50c1ce2b5ec281dcad83f1779e',1,'franka::Errors']]], + ['operator_21_3d_370',['operator!=',['../classfranka_1_1Duration.html#a61603353e39361af2f405c1df7097e84',1,'franka::Duration']]], + ['operator_25_371',['operator%',['../classfranka_1_1Duration.html#a5e472345c1bec29b645bee938932fdb1',1,'franka::Duration::operator%(const Duration &rhs) const noexcept'],['../classfranka_1_1Duration.html#af06ff91f24d881c479768c1bcbf31a1e',1,'franka::Duration::operator%(uint64_t rhs) const noexcept']]], + ['operator_25_3d_372',['operator%=',['../classfranka_1_1Duration.html#a97a6ea669877875ffc54c801ac0b152d',1,'franka::Duration::operator%=(const Duration &rhs) noexcept'],['../classfranka_1_1Duration.html#acd85bab22062a2258af83ac5b3b7a647',1,'franka::Duration::operator%=(uint64_t rhs) noexcept']]], + ['operator_28_29_373',['operator()',['../classMotionGenerator.html#aefd763e7c31c54b56404f33d2295fda9',1,'MotionGenerator']]], + ['operator_2a_374',['operator*',['../duration_8h.html#ab3a36a47682756845ef855994aadd7b6',1,'franka::operator*()'],['../classfranka_1_1Duration.html#a3eebc39550880fb2d23d45ba34d8acc5',1,'franka::Duration::operator*(uint64_t rhs) const noexcept']]], + ['operator_2a_3d_375',['operator*=',['../classfranka_1_1Duration.html#a73f971b2efb29a8ce663e8675d1ec09a',1,'franka::Duration']]], + ['operator_2b_376',['operator+',['../classfranka_1_1Duration.html#adb459e7bf5c6b02f9e72c808f5f30237',1,'franka::Duration']]], + ['operator_2b_2b_377',['operator++',['../model_8h.html#ae39c3a098fdb1bc9a097a262312454d0',1,'franka']]], + ['operator_2b_3d_378',['operator+=',['../classfranka_1_1Duration.html#ac55eb81937a12e736560bd856a8f23ae',1,'franka::Duration']]], + ['operator_2d_379',['operator-',['../classfranka_1_1Duration.html#a2a3bc1a8278b91bebe88d7498d410de9',1,'franka::Duration']]], + ['operator_2d_3d_380',['operator-=',['../classfranka_1_1Duration.html#acb24af377db86646918bcfb3e1e2ebe6',1,'franka::Duration']]], + ['operator_2f_381',['operator/',['../classfranka_1_1Duration.html#a90c76be31b53e11f5761416a05d990be',1,'franka::Duration::operator/(const Duration &rhs) const noexcept'],['../classfranka_1_1Duration.html#a15b7299198f36734b62ac98da1ef8c9c',1,'franka::Duration::operator/(uint64_t rhs) const noexcept']]], + ['operator_2f_3d_382',['operator/=',['../classfranka_1_1Duration.html#ac866dd8d0e8f2dbb92089dbd78418571',1,'franka::Duration']]], + ['operator_3c_383',['operator<',['../classfranka_1_1Duration.html#af1650b31c1226a447406fc243f4a2ac1',1,'franka::Duration']]], + ['operator_3c_3c_384',['operator<<',['../errors_8h.html#ad1027058086c3c154f4bbc9cade1f197',1,'franka::operator<<(std::ostream &ostream, const Errors &errors)'],['../gripper__state_8h.html#ab66181a74d1d3b7e90ae3b424ee85f4f',1,'franka::operator<<(std::ostream &ostream, const franka::GripperState &gripper_state)'],['../robot__state_8h.html#aee38e87180cc96476d0f11335da29e20',1,'franka::operator<<(std::ostream &ostream, const franka::RobotState &robot_state)'],['../robot__state_8h.html#a7d75ab63150979690a639f432c166755',1,'franka::operator<<(std::ostream &ostream, RobotMode robot_mode)'],['../vacuum__gripper__state_8h.html#aa2caece6baf774e998b6dec6e803cf24',1,'franka::operator<<(std::ostream &ostream, const franka::VacuumGripperState &vacuum_gripper_state)']]], + ['operator_3c_3d_385',['operator<=',['../classfranka_1_1Duration.html#ae4b9c8646fd50a2105d36f3848a5b949',1,'franka::Duration']]], + ['operator_3d_386',['operator=',['../classfranka_1_1Duration.html#adf2fec0c87fe1668e42f217ab029df19',1,'franka::Duration::operator=()'],['../structfranka_1_1Errors.html#a6fefa4083d79362080b79f3492fd4cb6',1,'franka::Errors::operator=()'],['../classfranka_1_1Gripper.html#a3c99c6973f8951ca489c4177cfacb069',1,'franka::Gripper::operator=()'],['../classfranka_1_1Model.html#a625529a4c9aed7783c9c6e150dbba793',1,'franka::Model::operator=()'],['../classfranka_1_1Robot.html#a35465b8497a7adbd277e70e98b7d97a7',1,'franka::Robot::operator=()'],['../classfranka_1_1VacuumGripper.html#a21d59603ac4deb8d9de5e074a57d080d',1,'franka::VacuumGripper::operator=()']]], + ['operator_3d_3d_387',['operator==',['../classfranka_1_1Duration.html#add0c7bcdfe51b563016236b223d74eae',1,'franka::Duration']]], + ['operator_3e_388',['operator>',['../classfranka_1_1Duration.html#a1702ec9121fe6cff1de533d116edcce0',1,'franka::Duration']]], + ['operator_3e_3d_389',['operator>=',['../classfranka_1_1Duration.html#a5bc498cf96d96f5908d6bd93eea491aa',1,'franka::Duration']]], + ['string_390',['string',['../structfranka_1_1Errors.html#a63ed1948f69db5be95a9c70107955d68',1,'franka::Errors']]] +]; diff --git a/search/functions_c.html b/search/functions_c.html new file mode 100644 index 00000000..c4f32687 --- /dev/null +++ b/search/functions_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_c.js b/search/functions_c.js new file mode 100644 index 00000000..f02b36d2 --- /dev/null +++ b/search/functions_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['pose_391',['pose',['../classfranka_1_1Model.html#a593c39dae76a6801cdd2402c2a783157',1,'franka::Model::pose(Frame frame, const franka::RobotState &robot_state) const'],['../classfranka_1_1Model.html#adf4fdf0404c2acf783493f7e646a6281',1,'franka::Model::pose(Frame frame, const std::array< double, 7 > &q, const std::array< double, 16 > &F_T_EE, const std::array< double, 16 > &EE_T_K) const']]] +]; diff --git a/search/functions_d.html b/search/functions_d.html new file mode 100644 index 00000000..7a1ed065 --- /dev/null +++ b/search/functions_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_d.js b/search/functions_d.js new file mode 100644 index 00000000..b2f8c5e6 --- /dev/null +++ b/search/functions_d.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['read_392',['read',['../classfranka_1_1Robot.html#a82f85eed20426901a7e77b66c041664b',1,'franka::Robot']]], + ['readonce_393',['readOnce',['../classfranka_1_1ActiveControl.html#a55f5b94e5ac491e5b2ccc1782a873582',1,'franka::ActiveControl::readOnce()'],['../classfranka_1_1ActiveControlBase.html#ae99dac6dae3b0dcd79104a1a404e42d0',1,'franka::ActiveControlBase::readOnce()'],['../classfranka_1_1Gripper.html#ab0afc8a41c9c5fff808e76851dcf23ce',1,'franka::Gripper::readOnce()'],['../classfranka_1_1Robot.html#ae3c3d7c5c4491a1e96a0a543931e899a',1,'franka::Robot::readOnce()'],['../classfranka_1_1VacuumGripper.html#aaa61bfd1027cf5dc2eb9e96536a9fabf',1,'franka::VacuumGripper::readOnce()']]], + ['robot_394',['Robot',['../classfranka_1_1Robot.html#ae63bc19390df3d54f3a270814df35eb6',1,'franka::Robot::Robot(const std::string &franka_address, RealtimeConfig realtime_config=RealtimeConfig::kEnforce, size_t log_size=50)'],['../classfranka_1_1Robot.html#a378d415475336082e81a35b9811dc6c2',1,'franka::Robot::Robot(Robot &&other) noexcept'],['../classfranka_1_1Robot.html#a7cb49336d7e8b261b590a364daff2913',1,'franka::Robot::Robot(std::shared_ptr< Impl > robot_impl)'],['../classfranka_1_1Robot.html#abf60ce0434f4dc262f04fcab0beff5ac',1,'franka::Robot::Robot()=default']]] +]; diff --git a/search/functions_e.html b/search/functions_e.html new file mode 100644 index 00000000..22d2a6bf --- /dev/null +++ b/search/functions_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_e.js b/search/functions_e.js new file mode 100644 index 00000000..68985192 --- /dev/null +++ b/search/functions_e.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['serverversion_395',['serverVersion',['../classfranka_1_1Robot.html#a3b864e16b7accafdf1a755dc21765701',1,'franka::Robot::serverVersion()'],['../classfranka_1_1VacuumGripper.html#a19abac44be2fc6df7f54fa11078a13ca',1,'franka::VacuumGripper::serverVersion()'],['../classfranka_1_1Gripper.html#a8b0b4246c042465fb00871b31efdbd8b',1,'franka::Gripper::serverVersion()']]], + ['setcartesianimpedance_396',['setCartesianImpedance',['../classfranka_1_1Robot.html#ac2678c5c31cc8c0627ecda7485f81f6d',1,'franka::Robot']]], + ['setcollisionbehavior_397',['setCollisionBehavior',['../classfranka_1_1Robot.html#a168e1214ac36d74ac64f894332b84534',1,'franka::Robot::setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds_acceleration, const std::array< double, 7 > &upper_torque_thresholds_acceleration, const std::array< double, 7 > &lower_torque_thresholds_nominal, const std::array< double, 7 > &upper_torque_thresholds_nominal, const std::array< double, 6 > &lower_force_thresholds_acceleration, const std::array< double, 6 > &upper_force_thresholds_acceleration, const std::array< double, 6 > &lower_force_thresholds_nominal, const std::array< double, 6 > &upper_force_thresholds_nominal)'],['../classfranka_1_1Robot.html#aa188f58c9025594be4d1700da744a962',1,'franka::Robot::setCollisionBehavior(const std::array< double, 7 > &lower_torque_thresholds, const std::array< double, 7 > &upper_torque_thresholds, const std::array< double, 6 > &lower_force_thresholds, const std::array< double, 6 > &upper_force_thresholds)']]], + ['setcurrentthreadtohighestschedulerpriority_398',['setCurrentThreadToHighestSchedulerPriority',['../control__tools_8h.html#a5c090196bc50ead82194d3e594e61e65',1,'franka']]], + ['setdefaultbehavior_399',['setDefaultBehavior',['../examples__common_8h.html#ad0c6e1cb044845ee8a01b5aa1e801a45',1,'examples_common.cpp']]], + ['setee_400',['setEE',['../classfranka_1_1Robot.html#aec4abdefbc0f9a7400a36bfa0a6068af',1,'franka::Robot']]], + ['setguidingmode_401',['setGuidingMode',['../classfranka_1_1Robot.html#a7992cee203e66f9a61fe2f318ef88a26',1,'franka::Robot']]], + ['setjointimpedance_402',['setJointImpedance',['../classfranka_1_1Robot.html#aa18a28697cf6e3be16c6cff2dd839560',1,'franka::Robot']]], + ['setk_403',['setK',['../classfranka_1_1Robot.html#ad1cf59d1b11306d80cd3c7144a989c56',1,'franka::Robot']]], + ['setload_404',['setLoad',['../classfranka_1_1Robot.html#afcb708df10f24563dbcf7d5b907b4a15',1,'franka::Robot']]], + ['startcartesianposecontrol_405',['startCartesianPoseControl',['../classfranka_1_1Robot.html#a3822866cf931fab955d3dcfc6cf746e5',1,'franka::Robot']]], + ['startcartesianvelocitycontrol_406',['startCartesianVelocityControl',['../classfranka_1_1Robot.html#a838e2cfba6b08dd87742bbcfe62f15bf',1,'franka::Robot']]], + ['startjointpositioncontrol_407',['startJointPositionControl',['../classfranka_1_1Robot.html#aca7ecf76cf9c5af49cc5a878c91e19a9',1,'franka::Robot']]], + ['startjointvelocitycontrol_408',['startJointVelocityControl',['../classfranka_1_1Robot.html#ae9c867d10817b2485e306450f389a009',1,'franka::Robot']]], + ['starttorquecontrol_409',['startTorqueControl',['../classfranka_1_1Robot.html#a8146de9e50217068672b6f726a91de91',1,'franka::Robot']]], + ['stop_410',['stop',['../classfranka_1_1Gripper.html#add7397fb6c5631650c139d26a85c8e1d',1,'franka::Gripper::stop()'],['../classfranka_1_1Robot.html#a69cb08e075a81ecf3f26e94d26a06296',1,'franka::Robot::stop()'],['../classfranka_1_1VacuumGripper.html#a3722fe5488c516b4082c878a083cc865',1,'franka::VacuumGripper::stop()']]] +]; diff --git a/search/functions_f.html b/search/functions_f.html new file mode 100644 index 00000000..54b7dee0 --- /dev/null +++ b/search/functions_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_f.js b/search/functions_f.js new file mode 100644 index 00000000..b023e3a7 --- /dev/null +++ b/search/functions_f.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['tomsec_411',['toMSec',['../classfranka_1_1Duration.html#a2a25ae33c8739b8f705f13798aa9e162',1,'franka::Duration']]], + ['torques_412',['Torques',['../classfranka_1_1Torques.html#a509d63195827289ffc645e4b62a9750d',1,'franka::Torques::Torques(const std::array< double, 7 > &torques) noexcept'],['../classfranka_1_1Torques.html#a744a08e16dcfc40b3a90ab6a85bac0d8',1,'franka::Torques::Torques(std::initializer_list< double > torques)']]], + ['tosec_413',['toSec',['../classfranka_1_1Duration.html#a497af77a3280159547f231f0374e9ac1',1,'franka::Duration']]] +]; diff --git a/search/mag_sel.svg b/search/mag_sel.svg new file mode 100644 index 00000000..03626f64 --- /dev/null +++ b/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/search/nomatches.html b/search/nomatches.html new file mode 100644 index 00000000..2b9360b6 --- /dev/null +++ b/search/nomatches.html @@ -0,0 +1,13 @@ + + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/search/pages_0.html b/search/pages_0.html new file mode 100644 index 00000000..8517b48f --- /dev/null +++ b/search/pages_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_0.js b/search/pages_0.js new file mode 100644 index 00000000..b8ba1690 --- /dev/null +++ b/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['libfranka_3a_20c_2b_2b_20library_20for_20franka_20robotics_20research_20robots_569',['libfranka: C++ library for Franka Robotics research robots',['../index.html',1,'']]] +]; diff --git a/search/related_0.html b/search/related_0.html new file mode 100644 index 00000000..506aaecc --- /dev/null +++ b/search/related_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/related_0.js b/search/related_0.js new file mode 100644 index 00000000..a61632ba --- /dev/null +++ b/search/related_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['robot_568',['Robot',['../classfranka_1_1ActiveMotionGenerator.html#a9f34d4a840b0d3e73fc3185af5fed175',1,'franka::ActiveMotionGenerator::Robot()'],['../classfranka_1_1ActiveTorqueControl.html#a9f34d4a840b0d3e73fc3185af5fed175',1,'franka::ActiveTorqueControl::Robot()']]] +]; diff --git a/search/search.css b/search/search.css new file mode 100644 index 00000000..9074198f --- /dev/null +++ b/search/search.css @@ -0,0 +1,257 @@ +/*---------------- Search Box */ + +#MSearchBox { + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + height: 1.4em; + padding: 0 0 0 0.3em; + margin: 0; +} + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 1.1em; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + height: 1.4em; + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial, Verdana, sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial, Verdana, sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/search/search.js b/search/search.js new file mode 100644 index 00000000..fb226f73 --- /dev/null +++ b/search/search.js @@ -0,0 +1,816 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches' + this.extension; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline-block'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e(R!W8j_r#qQ#gnr4kAxdU#F0+OBry$Z+ z_0PMi;P|#{d%mw(dnw=jM%@$onTJa%@6Nm3`;2S#nwtVFJI#`U@2Q@@JCCctagvF- z8H=anvo~dTmJ2YA%wA6IHRv%{vxvUm|R)kgZeo zmX%Zb;mpflGZdXCTAgit`||AFzkI#z&(3d4(htA?U2FOL4WF6wY&TB#n3n*I4+hl| z*NBpo#FA92vEu822WQ%mvv4FO#qs` BFGc_W literal 0 HcmV?d00001 diff --git a/search/search_r.png b/search/search_r.png new file mode 100644 index 0000000000000000000000000000000000000000..1af5d21ee13e070d7600f1c4657fde843b953a69 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9c!2%@BXHTsJQY`6?zK#qG8~eHcB(ehe3dtTp zz6=bxGZ+|(`xqD=STHa&U1eaXVrO7DwS|Gf*oA>XrmV$GYcEhOQT(QLuS{~ooZ2P@v=Xc@RKW@Irliv8_;wroU0*)0O?temdsA~70jrdux+`@W7 z-N(<(C)L?hOO?KV{>8(jC{hpKsws)#Fh zvsO>IB+gb@b+rGWaO&!a9Z{!U+fV*s7TS>fdt&j$L%^U@Epd$~Nl7e8wMs5Z1yT$~ z28I^8hDN#u<{^fLRz?<9hUVG^237_Jy7tbuQ8eV{r(~v8;?@w8^gA7>fx*+&&t;uc GLK6VEQpiUD literal 0 HcmV?d00001 diff --git a/search/searchdata.js b/search/searchdata.js new file mode 100644 index 00000000..57c5c272 --- /dev/null +++ b/search/searchdata.js @@ -0,0 +1,42 @@ +var indexSectionsWithContent = +{ + 0: "abcdefghijklmnopqrstvwz~", + 1: "acdefgijmnprtv", + 2: "acdeglmrv", + 3: "abcdeghijlmoprstvwz~", + 4: "abcdefijklmnopqrstvw", + 5: "s", + 6: "cfprv", + 7: "k", + 8: "r", + 9: "l" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "files", + 3: "functions", + 4: "variables", + 5: "typedefs", + 6: "enums", + 7: "enumvalues", + 8: "related", + 9: "pages" +}; + +var indexSectionLabels = +{ + 0: "All", + 1: "Classes", + 2: "Files", + 3: "Functions", + 4: "Variables", + 5: "Typedefs", + 6: "Enumerations", + 7: "Enumerator", + 8: "Friends", + 9: "Pages" +}; + diff --git a/search/typedefs_0.html b/search/typedefs_0.html new file mode 100644 index 00000000..a4684c4a --- /dev/null +++ b/search/typedefs_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_0.js b/search/typedefs_0.js new file mode 100644 index 00000000..22a8edf7 --- /dev/null +++ b/search/typedefs_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['serverversion_557',['ServerVersion',['../classfranka_1_1Gripper.html#a613bf52d9433b733685d0fb9ea71602e',1,'franka::Gripper::ServerVersion()'],['../classfranka_1_1Robot.html#ad1dd3dccff6f33691d2c66eaa5ac5a10',1,'franka::Robot::ServerVersion()'],['../classfranka_1_1VacuumGripper.html#a7b1d752680134e2a9df347002c6ace61',1,'franka::VacuumGripper::ServerVersion()']]] +]; diff --git a/search/variables_0.html b/search/variables_0.html new file mode 100644 index 00000000..1e477c08 --- /dev/null +++ b/search/variables_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_0.js b/search/variables_0.js new file mode 100644 index 00000000..ec113fae --- /dev/null +++ b/search/variables_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['actual_5fpower_422',['actual_power',['../structfranka_1_1VacuumGripperState.html#a4230c68698cdbf6c1c560e181133bdc3',1,'franka::VacuumGripperState']]] +]; diff --git a/search/variables_1.html b/search/variables_1.html new file mode 100644 index 00000000..ea73d9a4 --- /dev/null +++ b/search/variables_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_1.js b/search/variables_1.js new file mode 100644 index 00000000..c115ff9a --- /dev/null +++ b/search/variables_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['base_5facceleration_5finitialization_5ftimeout_423',['base_acceleration_initialization_timeout',['../structfranka_1_1Errors.html#a4dc331a7ae3242ea43e6fbf7e21c695a',1,'franka::Errors']]], + ['base_5facceleration_5finvalid_5freading_424',['base_acceleration_invalid_reading',['../structfranka_1_1Errors.html#a8467b7b8a3a68c3e0be7adc39933cb0e',1,'franka::Errors']]] +]; diff --git a/search/variables_10.html b/search/variables_10.html new file mode 100644 index 00000000..dc9920b6 --- /dev/null +++ b/search/variables_10.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_10.js b/search/variables_10.js new file mode 100644 index 00000000..52be8b46 --- /dev/null +++ b/search/variables_10.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['self_5fcollision_5favoidance_5fviolation_543',['self_collision_avoidance_violation',['../structfranka_1_1Errors.html#adf68f6333624cb5558864441a991de8c',1,'franka::Errors']]], + ['server_5fversion_544',['server_version',['../structfranka_1_1IncompatibleVersionException.html#a0928098d8c32f405d17b65a0f004b5ab',1,'franka::IncompatibleVersionException']]], + ['start_5felbow_5fsign_5finconsistent_545',['start_elbow_sign_inconsistent',['../structfranka_1_1Errors.html#aa6de1956ac056792a1dea6b9ddd52a50',1,'franka::Errors']]], + ['state_546',['state',['../structfranka_1_1Record.html#a58249658c9549fbc792eea90e7b6a7cc',1,'franka::Record']]] +]; diff --git a/search/variables_11.html b/search/variables_11.html new file mode 100644 index 00000000..704bcb18 --- /dev/null +++ b/search/variables_11.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_11.js b/search/variables_11.js new file mode 100644 index 00000000..3250cf19 --- /dev/null +++ b/search/variables_11.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['tau_5fext_5fhat_5ffiltered_547',['tau_ext_hat_filtered',['../structfranka_1_1RobotState.html#acdef8005828d193e45b128085a9e363b',1,'franka::RobotState']]], + ['tau_5fj_548',['tau_J',['../classfranka_1_1Torques.html#ac2a266cc2d3b7e0fb4f8eff045dbaed8',1,'franka::Torques::tau_J()'],['../structfranka_1_1RobotState.html#ad90e2518d661da0d8fa4c864bae210e5',1,'franka::RobotState::tau_J()']]], + ['tau_5fj_5fd_549',['tau_J_d',['../structfranka_1_1RobotState.html#a7086a89a2705810f93a3a95d43df2d9d',1,'franka::RobotState']]], + ['tau_5fj_5frange_5fviolation_550',['tau_j_range_violation',['../structfranka_1_1Errors.html#a1491f8428341649befa3d088aebb317e',1,'franka::Errors']]], + ['temperature_551',['temperature',['../structfranka_1_1GripperState.html#aa6733fa786dbf3b073acbaf3779e34b3',1,'franka::GripperState']]], + ['theta_552',['theta',['../structfranka_1_1RobotState.html#aa34145d77dd411d7ca578c355f0ba2b4',1,'franka::RobotState']]], + ['time_553',['time',['../structfranka_1_1GripperState.html#a80bf474b0e4351e2eefab62d1bd10c07',1,'franka::GripperState::time()'],['../structfranka_1_1RobotState.html#aabfdabeaef8c1858c52dd32344bdd039',1,'franka::RobotState::time()'],['../structfranka_1_1VacuumGripperState.html#aaa98eb6e1888094aace2014121a468ab',1,'franka::VacuumGripperState::time()']]], + ['torques_554',['torques',['../structfranka_1_1RobotCommand.html#a8b23e8b669b1fd594988ecdbf54bfbce',1,'franka::RobotCommand']]] +]; diff --git a/search/variables_12.html b/search/variables_12.html new file mode 100644 index 00000000..a3a32eb8 --- /dev/null +++ b/search/variables_12.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_12.js b/search/variables_12.js new file mode 100644 index 00000000..fd631ed3 --- /dev/null +++ b/search/variables_12.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['vacuum_555',['vacuum',['../structfranka_1_1VacuumGripperState.html#ae94720737193caa696a47563a8efe6a8',1,'franka::VacuumGripperState']]] +]; diff --git a/search/variables_13.html b/search/variables_13.html new file mode 100644 index 00000000..7d05bd86 --- /dev/null +++ b/search/variables_13.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_13.js b/search/variables_13.js new file mode 100644 index 00000000..87bcc4fa --- /dev/null +++ b/search/variables_13.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['width_556',['width',['../structfranka_1_1GripperState.html#adf095f446ec39a9a48e120b209dcd6e9',1,'franka::GripperState']]] +]; diff --git a/search/variables_2.html b/search/variables_2.html new file mode 100644 index 00000000..0580462e --- /dev/null +++ b/search/variables_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_2.js b/search/variables_2.js new file mode 100644 index 00000000..793534a5 --- /dev/null +++ b/search/variables_2.js @@ -0,0 +1,31 @@ +var searchData= +[ + ['cartesian_5fcollision_425',['cartesian_collision',['../structfranka_1_1RobotState.html#a52c20478f4c1e162df38582ea9bda044',1,'franka::RobotState']]], + ['cartesian_5fcontact_426',['cartesian_contact',['../structfranka_1_1RobotState.html#a7fc1f0358d2104d39d301d70544fa6c1',1,'franka::RobotState']]], + ['cartesian_5fmotion_5fgenerator_5facceleration_5fdiscontinuity_427',['cartesian_motion_generator_acceleration_discontinuity',['../structfranka_1_1Errors.html#a10c6ac36bf48b4a9edf91e74d9bc4837',1,'franka::Errors']]], + ['cartesian_5fmotion_5fgenerator_5felbow_5flimit_5fviolation_428',['cartesian_motion_generator_elbow_limit_violation',['../structfranka_1_1Errors.html#ac21ebdc1e0e8fb3099a7dce284550c4c',1,'franka::Errors']]], + ['cartesian_5fmotion_5fgenerator_5felbow_5fsign_5finconsistent_429',['cartesian_motion_generator_elbow_sign_inconsistent',['../structfranka_1_1Errors.html#a58b0e1199c9dded5a32bfeb110e63037',1,'franka::Errors']]], + ['cartesian_5fmotion_5fgenerator_5fjoint_5facceleration_5fdiscontinuity_430',['cartesian_motion_generator_joint_acceleration_discontinuity',['../structfranka_1_1Errors.html#a2e223ef3c771709a6a3f094adf12f9cb',1,'franka::Errors']]], + ['cartesian_5fmotion_5fgenerator_5fjoint_5fposition_5flimits_5fviolation_431',['cartesian_motion_generator_joint_position_limits_violation',['../structfranka_1_1Errors.html#a73aef7473fd6d1d5b207e68fa35948c5',1,'franka::Errors']]], + ['cartesian_5fmotion_5fgenerator_5fjoint_5fvelocity_5fdiscontinuity_432',['cartesian_motion_generator_joint_velocity_discontinuity',['../structfranka_1_1Errors.html#a1c8c56766fefc19fda5d5de909ca5b37',1,'franka::Errors']]], + ['cartesian_5fmotion_5fgenerator_5fjoint_5fvelocity_5flimits_5fviolation_433',['cartesian_motion_generator_joint_velocity_limits_violation',['../structfranka_1_1Errors.html#a435d16d62a123bfbf578bc76e3780605',1,'franka::Errors']]], + ['cartesian_5fmotion_5fgenerator_5fstart_5felbow_5finvalid_434',['cartesian_motion_generator_start_elbow_invalid',['../structfranka_1_1Errors.html#a6d905b803bbe8a7be8490f2a94ba524a',1,'franka::Errors']]], + ['cartesian_5fmotion_5fgenerator_5fvelocity_5fdiscontinuity_435',['cartesian_motion_generator_velocity_discontinuity',['../structfranka_1_1Errors.html#a17e4a9b6b7dc4cc12c1328d36cac3eaf',1,'franka::Errors']]], + ['cartesian_5fmotion_5fgenerator_5fvelocity_5flimits_5fviolation_436',['cartesian_motion_generator_velocity_limits_violation',['../structfranka_1_1Errors.html#a91437c081452ef708563346b102ba894',1,'franka::Errors']]], + ['cartesian_5fpose_437',['cartesian_pose',['../structfranka_1_1RobotCommand.html#acce2090d696ebb9759fd0f37fd35a298',1,'franka::RobotCommand']]], + ['cartesian_5fposition_5flimits_5fviolation_438',['cartesian_position_limits_violation',['../structfranka_1_1Errors.html#a41c8b50ecbb015a2dba1a3dbbff694b6',1,'franka::Errors']]], + ['cartesian_5fposition_5fmotion_5fgenerator_5finvalid_5fframe_439',['cartesian_position_motion_generator_invalid_frame',['../structfranka_1_1Errors.html#aa1952c6da2f81578861a19b947c97b85',1,'franka::Errors']]], + ['cartesian_5fposition_5fmotion_5fgenerator_5fstart_5fpose_5finvalid_440',['cartesian_position_motion_generator_start_pose_invalid',['../structfranka_1_1Errors.html#aa910fad4992b91be1ea1c321ee9b7a1e',1,'franka::Errors']]], + ['cartesian_5freflex_441',['cartesian_reflex',['../structfranka_1_1Errors.html#a47bd58b0ab2198e4d038e0a24eafb310',1,'franka::Errors']]], + ['cartesian_5fspline_5fmotion_5fgenerator_5fviolation_442',['cartesian_spline_motion_generator_violation',['../structfranka_1_1Errors.html#a5617689cd7e875baebcecf054513f0c4',1,'franka::Errors']]], + ['cartesian_5fvelocities_443',['cartesian_velocities',['../structfranka_1_1RobotCommand.html#a04b4841130fab920936190be1bc5dba3',1,'franka::RobotCommand']]], + ['cartesian_5fvelocity_5fprofile_5fsafety_5fviolation_444',['cartesian_velocity_profile_safety_violation',['../structfranka_1_1Errors.html#afc093fc5f99e1f6cab6de4fa9bc32692',1,'franka::Errors']]], + ['cartesian_5fvelocity_5fviolation_445',['cartesian_velocity_violation',['../structfranka_1_1Errors.html#a382fbec6b463ddcc2cbfd90340021ff1',1,'franka::Errors']]], + ['command_446',['command',['../structfranka_1_1Record.html#a8106f2ba9c2cf5ec7cbcf914c4c99e9c',1,'franka::Record']]], + ['communication_5fconstraints_5fviolation_447',['communication_constraints_violation',['../structfranka_1_1Errors.html#a4d17af86c1ebb698c218796fa15f9bd7',1,'franka::Errors']]], + ['control_5fcommand_5fsuccess_5frate_448',['control_command_success_rate',['../structfranka_1_1RobotState.html#af208572613a6afcdc61a24970c71fa28',1,'franka::RobotState']]], + ['control_5ffinished_449',['control_finished',['../classfranka_1_1ActiveControl.html#afa521707548926e9d1e38e4b83496db2',1,'franka::ActiveControl']]], + ['control_5flock_450',['control_lock',['../classfranka_1_1ActiveControl.html#aed53605877b237435581e36f4c0b34a4',1,'franka::ActiveControl']]], + ['controller_5ftorque_5fdiscontinuity_451',['controller_torque_discontinuity',['../structfranka_1_1Errors.html#af40d93759ace9ee6026208110692a732',1,'franka::Errors']]], + ['current_5ferrors_452',['current_errors',['../structfranka_1_1RobotState.html#abc5515f7a27f5de82396ea792a5ecb48',1,'franka::RobotState']]] +]; diff --git a/search/variables_3.html b/search/variables_3.html new file mode 100644 index 00000000..0d69e761 --- /dev/null +++ b/search/variables_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_3.js b/search/variables_3.js new file mode 100644 index 00000000..ef2a3234 --- /dev/null +++ b/search/variables_3.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['ddelbow_5fc_453',['ddelbow_c',['../structfranka_1_1RobotState.html#a1e5b6caf84249b1129491dbbcb1fc2e6',1,'franka::RobotState']]], + ['ddq_5fd_454',['ddq_d',['../structfranka_1_1RobotState.html#a6251e748cf72f4b86bcfdcb97d77ace2',1,'franka::RobotState']]], + ['delbow_5fc_455',['delbow_c',['../structfranka_1_1RobotState.html#a57c2c145e9f79010adf23085b8a9c5ad',1,'franka::RobotState']]], + ['device_5fstatus_456',['device_status',['../structfranka_1_1VacuumGripperState.html#ab44560b09c4a959c06ddafbd7f21da02',1,'franka::VacuumGripperState']]], + ['dq_457',['dq',['../classfranka_1_1JointVelocities.html#a14fddb6fe7a7c4034dc82c283de8c2d3',1,'franka::JointVelocities::dq()'],['../structfranka_1_1RobotState.html#af372a0081d72bc7b4fe873f99c7b2d8c',1,'franka::RobotState::dq()']]], + ['dq_5fd_458',['dq_d',['../structfranka_1_1RobotState.html#aed294a088be27b927be9575a18bec949',1,'franka::RobotState']]], + ['dtau_5fj_459',['dtau_J',['../structfranka_1_1RobotState.html#ae6b0d4ee0d7b36240a2165e6ded6f4b9',1,'franka::RobotState']]], + ['dtheta_460',['dtheta',['../structfranka_1_1RobotState.html#a271db0a55dd346715ed8a0daf3f8887c',1,'franka::RobotState']]] +]; diff --git a/search/variables_4.html b/search/variables_4.html new file mode 100644 index 00000000..a4b6506b --- /dev/null +++ b/search/variables_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_4.js b/search/variables_4.js new file mode 100644 index 00000000..1c140d56 --- /dev/null +++ b/search/variables_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['ee_5ft_5fk_461',['EE_T_K',['../structfranka_1_1RobotState.html#aeb78a3b4b76d4f57b9898cbea3a0f7aa',1,'franka::RobotState']]], + ['elbow_462',['elbow',['../classfranka_1_1CartesianPose.html#abef660743df9cf94d11c556d9c3d25be',1,'franka::CartesianPose::elbow()'],['../classfranka_1_1CartesianVelocities.html#a6419df1399d3dfab79b1654b94ced344',1,'franka::CartesianVelocities::elbow()'],['../structfranka_1_1RobotState.html#a43485841c427d70e7f36a912cc3116d1',1,'franka::RobotState::elbow()']]], + ['elbow_5fc_463',['elbow_c',['../structfranka_1_1RobotState.html#a16cfc844894e8b5b1ad829be529962f0',1,'franka::RobotState']]], + ['elbow_5fd_464',['elbow_d',['../structfranka_1_1RobotState.html#a295dada05d8588fc3c19a74fd427dcc0',1,'franka::RobotState']]] +]; diff --git a/search/variables_5.html b/search/variables_5.html new file mode 100644 index 00000000..7e345d16 --- /dev/null +++ b/search/variables_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_5.js b/search/variables_5.js new file mode 100644 index 00000000..426b2bcc --- /dev/null +++ b/search/variables_5.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['f_5ft_5fee_465',['F_T_EE',['../structfranka_1_1RobotState.html#a705b85049fef747008b0eba8284c8057',1,'franka::RobotState']]], + ['f_5ft_5fne_466',['F_T_NE',['../structfranka_1_1RobotState.html#a88142795c453775c360e18d8a6570d15',1,'franka::RobotState']]], + ['f_5fx_5fcee_467',['F_x_Cee',['../structfranka_1_1RobotState.html#a907c4561d8f1c1a2af7980cf58ceb112',1,'franka::RobotState']]], + ['f_5fx_5fcload_468',['F_x_Cload',['../structfranka_1_1RobotState.html#a48e921e6215ad32f36e424b4d7b66a89',1,'franka::RobotState']]], + ['f_5fx_5fctotal_469',['F_x_Ctotal',['../structfranka_1_1RobotState.html#a72ee7362018e3c9e95e3c41e857bfd8d',1,'franka::RobotState']]], + ['force_5fcontrol_5fsafety_5fviolation_470',['force_control_safety_violation',['../structfranka_1_1Errors.html#ae7b19674da28b11ba970c30c7d800923',1,'franka::Errors']]], + ['force_5fcontroller_5fdesired_5fforce_5ftolerance_5fviolation_471',['force_controller_desired_force_tolerance_violation',['../structfranka_1_1Errors.html#ae474f20a64b2585dbe6496966dddff0a',1,'franka::Errors']]] +]; diff --git a/search/variables_6.html b/search/variables_6.html new file mode 100644 index 00000000..7d48e75e --- /dev/null +++ b/search/variables_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_6.js b/search/variables_6.js new file mode 100644 index 00000000..d917842f --- /dev/null +++ b/search/variables_6.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['i_5fee_472',['I_ee',['../structfranka_1_1RobotState.html#a74cee1beb5d400694133deea2846e611',1,'franka::RobotState']]], + ['i_5fload_473',['I_load',['../structfranka_1_1RobotState.html#a5b194153497eff98049681f852118f82',1,'franka::RobotState']]], + ['i_5ftotal_474',['I_total',['../structfranka_1_1RobotState.html#ad9120ae7b7613e77df8c1c3eba8fb033',1,'franka::RobotState']]], + ['in_5fcontrol_5frange_475',['in_control_range',['../structfranka_1_1VacuumGripperState.html#a70c1b14b10c2a79511fcada258c7e0ba',1,'franka::VacuumGripperState']]], + ['instability_5fdetected_476',['instability_detected',['../structfranka_1_1Errors.html#aebb701987262097687d21b3cf1bc8930',1,'franka::Errors']]], + ['is_5fgrasped_477',['is_grasped',['../structfranka_1_1GripperState.html#aa65b46313e740454ead9c9ea27e7bf8d',1,'franka::GripperState']]] +]; diff --git a/search/variables_7.html b/search/variables_7.html new file mode 100644 index 00000000..5c263409 --- /dev/null +++ b/search/variables_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_7.js b/search/variables_7.js new file mode 100644 index 00000000..d01d1ae0 --- /dev/null +++ b/search/variables_7.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['joint_5fcollision_478',['joint_collision',['../structfranka_1_1RobotState.html#a38757bafd4dd8e138410de1dca0c36f8',1,'franka::RobotState']]], + ['joint_5fcontact_479',['joint_contact',['../structfranka_1_1RobotState.html#a7243c652a8efe58c343a0d1252302fa4',1,'franka::RobotState']]], + ['joint_5fmotion_5fgenerator_5facceleration_5fdiscontinuity_480',['joint_motion_generator_acceleration_discontinuity',['../structfranka_1_1Errors.html#a633195adca91f5ecaf1506da12f3311f',1,'franka::Errors']]], + ['joint_5fmotion_5fgenerator_5fposition_5flimits_5fviolation_481',['joint_motion_generator_position_limits_violation',['../structfranka_1_1Errors.html#a9536ad072868b90525c56143cbb956ef',1,'franka::Errors']]], + ['joint_5fmotion_5fgenerator_5fvelocity_5fdiscontinuity_482',['joint_motion_generator_velocity_discontinuity',['../structfranka_1_1Errors.html#abd6da8e6a32d817a7b4848a24efd9379',1,'franka::Errors']]], + ['joint_5fmotion_5fgenerator_5fvelocity_5flimits_5fviolation_483',['joint_motion_generator_velocity_limits_violation',['../structfranka_1_1Errors.html#ae211638df9b0e23905c8a9d36e249207',1,'franka::Errors']]], + ['joint_5fmove_5fin_5fwrong_5fdirection_484',['joint_move_in_wrong_direction',['../structfranka_1_1Errors.html#a7d3a6480cbe572fd46e579b43732edc9',1,'franka::Errors']]], + ['joint_5fp2p_5finsufficient_5ftorque_5ffor_5fplanning_485',['joint_p2p_insufficient_torque_for_planning',['../structfranka_1_1Errors.html#a1c78be870253b510a4516acf14c2d3e3',1,'franka::Errors']]], + ['joint_5fposition_5flimits_5fviolation_486',['joint_position_limits_violation',['../structfranka_1_1Errors.html#a44ba0d45e52639280d32cf447f967e29',1,'franka::Errors']]], + ['joint_5fposition_5fmotion_5fgenerator_5fstart_5fpose_5finvalid_487',['joint_position_motion_generator_start_pose_invalid',['../structfranka_1_1Errors.html#a7af91cbf61dc79304bff3ffadc51ea86',1,'franka::Errors']]], + ['joint_5fpositions_488',['joint_positions',['../structfranka_1_1RobotCommand.html#a086afcec596eae5284b6c39dc1452280',1,'franka::RobotCommand']]], + ['joint_5freflex_489',['joint_reflex',['../structfranka_1_1Errors.html#afb0928680c586e73d4e2cd4b42c7fe48',1,'franka::Errors']]], + ['joint_5fvelocities_490',['joint_velocities',['../structfranka_1_1RobotCommand.html#a049657cf2bbbb53d6ffa5581721e7b71',1,'franka::RobotCommand']]], + ['joint_5fvelocity_5fviolation_491',['joint_velocity_violation',['../structfranka_1_1Errors.html#a803ac4acbc26350602ea2eb02b7b30c4',1,'franka::Errors']]], + ['joint_5fvia_5fmotion_5fgenerator_5fplanning_5fjoint_5flimit_5fviolation_492',['joint_via_motion_generator_planning_joint_limit_violation',['../structfranka_1_1Errors.html#aef3c74f48978545187ee2dc3a96db1c8',1,'franka::Errors']]] +]; diff --git a/search/variables_8.html b/search/variables_8.html new file mode 100644 index 00000000..dc9ec54a --- /dev/null +++ b/search/variables_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_8.js b/search/variables_8.js new file mode 100644 index 00000000..7f6763b5 --- /dev/null +++ b/search/variables_8.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['k_5ff_5fext_5fhat_5fk_493',['K_F_ext_hat_K',['../structfranka_1_1RobotState.html#a96267d443c05fcc58d7ac32f63912649',1,'franka::RobotState']]], + ['kdefaultcutofffrequency_494',['kDefaultCutoffFrequency',['../lowpass__filter_8h.html#ad8e3b7da346e03181ab5ac138a4171d4',1,'franka']]], + ['kdeltat_495',['kDeltaT',['../rate__limiting_8h.html#a1e207a0d5a6e90c1e1a78e6e1057120a',1,'franka']]], + ['kfactorcartesianrotationposeinterface_496',['kFactorCartesianRotationPoseInterface',['../rate__limiting_8h.html#a19166d1a64c5a84f80b4ed3aa0bfb3a0',1,'franka']]], + ['kjointvelocitylimitstolerance_497',['kJointVelocityLimitsTolerance',['../rate__limiting_8h.html#a39b6d9504e2844d289f834471994d889',1,'franka']]], + ['klimiteps_498',['kLimitEps',['../rate__limiting_8h.html#aad1f9b575274830b8da9e638559d424b',1,'franka']]], + ['kmaxcutofffrequency_499',['kMaxCutoffFrequency',['../lowpass__filter_8h.html#adb10b364af8deb9e17d9bcc1ff2695be',1,'franka']]], + ['kmaxelbowacceleration_500',['kMaxElbowAcceleration',['../rate__limiting_8h.html#af365e574ad7b1580ce15e30dd909b3ba',1,'franka']]], + ['kmaxelbowjerk_501',['kMaxElbowJerk',['../rate__limiting_8h.html#adc70178204d4da073c78de777a2dff74',1,'franka']]], + ['kmaxelbowvelocity_502',['kMaxElbowVelocity',['../rate__limiting_8h.html#a2896b2e0c8bd96f9ee242c1203ac3483',1,'franka']]], + ['kmaxjointacceleration_503',['kMaxJointAcceleration',['../rate__limiting_8h.html#a826ecf0b7d214df69c1ee416d3e66b93',1,'franka']]], + ['kmaxjointjerk_504',['kMaxJointJerk',['../rate__limiting_8h.html#a600a21a6151ff2eee38294293dd8aeec',1,'franka']]], + ['kmaxrotationalacceleration_505',['kMaxRotationalAcceleration',['../rate__limiting_8h.html#a5e3d5c95ba72f9660f17f8ebf1e0aa2e',1,'franka']]], + ['kmaxrotationaljerk_506',['kMaxRotationalJerk',['../rate__limiting_8h.html#a259520ce1b6b5b85a88d05262286820d',1,'franka']]], + ['kmaxrotationalvelocity_507',['kMaxRotationalVelocity',['../rate__limiting_8h.html#aafb1f5ef8f8a7abd546edea498c18b45',1,'franka']]], + ['kmaxtorquerate_508',['kMaxTorqueRate',['../rate__limiting_8h.html#a6c1a0e9a5e1f375d2aad61edac907d4e',1,'franka']]], + ['kmaxtranslationalacceleration_509',['kMaxTranslationalAcceleration',['../rate__limiting_8h.html#a3803b1a54ba526ccaa4fa0d15446f3db',1,'franka']]], + ['kmaxtranslationaljerk_510',['kMaxTranslationalJerk',['../rate__limiting_8h.html#a46b8f11959ed3f731a0914f524af8e69',1,'franka']]], + ['kmaxtranslationalvelocity_511',['kMaxTranslationalVelocity',['../rate__limiting_8h.html#a857e1e5e18d688ec7095264a629bf474',1,'franka']]], + ['knormeps_512',['kNormEps',['../rate__limiting_8h.html#a420d72830a872ef375d9d6cbb1c439b5',1,'franka']]], + ['ktolnumberpacketslost_513',['kTolNumberPacketsLost',['../rate__limiting_8h.html#a664b546834ceecd4e3220ffa92f1172c',1,'franka']]] +]; diff --git a/search/variables_9.html b/search/variables_9.html new file mode 100644 index 00000000..7b014750 --- /dev/null +++ b/search/variables_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_9.js b/search/variables_9.js new file mode 100644 index 00000000..868126b3 --- /dev/null +++ b/search/variables_9.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['last_5fmotion_5ferrors_514',['last_motion_errors',['../structfranka_1_1RobotState.html#a06d7019f85339409e932dc086b7a260b',1,'franka::RobotState']]], + ['last_5fread_5faccess_515',['last_read_access',['../classfranka_1_1ActiveControl.html#a226304deac8032ed6c8428caa60c9fb4',1,'franka::ActiveControl']]], + ['library_5fversion_516',['library_version',['../structfranka_1_1IncompatibleVersionException.html#a81e6d7f01965ed7ee34f83dc3883ad01',1,'franka::IncompatibleVersionException']]], + ['log_517',['log',['../structfranka_1_1ControlException.html#ae57f0ac0a9aa195057af1f1cc712b41e',1,'franka::ControlException']]] +]; diff --git a/search/variables_a.html b/search/variables_a.html new file mode 100644 index 00000000..52a724d1 --- /dev/null +++ b/search/variables_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_a.js b/search/variables_a.js new file mode 100644 index 00000000..c7111afd --- /dev/null +++ b/search/variables_a.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['m_5fee_518',['m_ee',['../structfranka_1_1RobotState.html#af982a16246e33c1495ec02972a36bce3',1,'franka::RobotState']]], + ['m_5fload_519',['m_load',['../structfranka_1_1RobotState.html#a99ea4ab9c5a42a5c17365ed8fd730cd1',1,'franka::RobotState']]], + ['m_5ftotal_520',['m_total',['../structfranka_1_1RobotState.html#a87880d4693c8f576ebdabf00f4d4f981',1,'franka::RobotState']]], + ['max_5fgoal_5fpose_5fdeviation_5fviolation_521',['max_goal_pose_deviation_violation',['../structfranka_1_1Errors.html#ac55d3624087e606cb4ffab121869d580',1,'franka::Errors']]], + ['max_5fpath_5fpose_5fdeviation_5fviolation_522',['max_path_pose_deviation_violation',['../structfranka_1_1Errors.html#ad90cffe703ca1b782007f3ba49da587c',1,'franka::Errors']]], + ['max_5fwidth_523',['max_width',['../structfranka_1_1GripperState.html#ab71a26356c2898c49609bf991843e166',1,'franka::GripperState']]], + ['motion_5ffinished_524',['motion_finished',['../structfranka_1_1Finishable.html#a5d48028c0f912d4a089e6220d8715f7f',1,'franka::Finishable']]], + ['motion_5fid_525',['motion_id',['../classfranka_1_1ActiveControl.html#a0852a7d4b5a67df218440c2cc629f638',1,'franka::ActiveControl']]] +]; diff --git a/search/variables_b.html b/search/variables_b.html new file mode 100644 index 00000000..f376b27a --- /dev/null +++ b/search/variables_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_b.js b/search/variables_b.js new file mode 100644 index 00000000..a079cf83 --- /dev/null +++ b/search/variables_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['ne_5ft_5fee_526',['NE_T_EE',['../structfranka_1_1RobotState.html#ac53f1046fe758cfdda438a8e3ba08fff',1,'franka::RobotState']]] +]; diff --git a/search/variables_c.html b/search/variables_c.html new file mode 100644 index 00000000..6019eba9 --- /dev/null +++ b/search/variables_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_c.js b/search/variables_c.js new file mode 100644 index 00000000..ba90ff87 --- /dev/null +++ b/search/variables_c.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['o_5fddp_5fee_5fc_527',['O_ddP_EE_c',['../structfranka_1_1RobotState.html#ac8dfcf78ddbb27852484e921d6d66ca1',1,'franka::RobotState']]], + ['o_5fddp_5fo_528',['O_ddP_O',['../structfranka_1_1RobotState.html#ab24d7982942d316459fc35337dc38ecd',1,'franka::RobotState']]], + ['o_5fdp_5fee_529',['O_dP_EE',['../classfranka_1_1CartesianVelocities.html#ab7a42c7c1ee7109025aff5c43a56b398',1,'franka::CartesianVelocities']]], + ['o_5fdp_5fee_5fc_530',['O_dP_EE_c',['../structfranka_1_1RobotState.html#a4be112bd1a9a7d777a67aea4a18a8dcc',1,'franka::RobotState']]], + ['o_5fdp_5fee_5fd_531',['O_dP_EE_d',['../structfranka_1_1RobotState.html#a1e0a82b98534929c3061295d5761d607',1,'franka::RobotState']]], + ['o_5ff_5fext_5fhat_5fk_532',['O_F_ext_hat_K',['../structfranka_1_1RobotState.html#a5a830b4f9d6a3c2dc92e4a9cc6050493',1,'franka::RobotState']]], + ['o_5ft_5fee_533',['O_T_EE',['../classfranka_1_1CartesianPose.html#a406e53e3d8fe594a11888f516eb4bf7d',1,'franka::CartesianPose::O_T_EE()'],['../structfranka_1_1RobotState.html#a193781d47722b32925e0ea7ac415f442',1,'franka::RobotState::O_T_EE()']]], + ['o_5ft_5fee_5fc_534',['O_T_EE_c',['../structfranka_1_1RobotState.html#a395c48eff099419ea5d42eaf0870fc18',1,'franka::RobotState']]], + ['o_5ft_5fee_5fd_535',['O_T_EE_d',['../structfranka_1_1RobotState.html#a3e5b4b7687856e92d826044be7d15733',1,'franka::RobotState']]] +]; diff --git a/search/variables_d.html b/search/variables_d.html new file mode 100644 index 00000000..f61ae751 --- /dev/null +++ b/search/variables_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_d.js b/search/variables_d.js new file mode 100644 index 00000000..58c4c373 --- /dev/null +++ b/search/variables_d.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['part_5fdetached_536',['part_detached',['../structfranka_1_1VacuumGripperState.html#aa27a2b4b9d19bdcb059995a8121ba309',1,'franka::VacuumGripperState']]], + ['part_5fpresent_537',['part_present',['../structfranka_1_1VacuumGripperState.html#aeb5664ab2a9784c9e31ce5f67c914107',1,'franka::VacuumGripperState']]], + ['power_5flimit_5fviolation_538',['power_limit_violation',['../structfranka_1_1Errors.html#a6c4d8cb1fb314567ebd07a6195b840f5',1,'franka::Errors']]] +]; diff --git a/search/variables_e.html b/search/variables_e.html new file mode 100644 index 00000000..7bfd3721 --- /dev/null +++ b/search/variables_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_e.js b/search/variables_e.js new file mode 100644 index 00000000..968c2434 --- /dev/null +++ b/search/variables_e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['q_539',['q',['../classfranka_1_1JointPositions.html#a40e9098abe1c51cd48e17e41fbf78337',1,'franka::JointPositions::q()'],['../structfranka_1_1RobotState.html#ade3335d1ac2f6c44741a916d565f7091',1,'franka::RobotState::q()']]], + ['q_5fd_540',['q_d',['../structfranka_1_1RobotState.html#a706045af1b176049e9e56df755325bd2',1,'franka::RobotState']]] +]; diff --git a/search/variables_f.html b/search/variables_f.html new file mode 100644 index 00000000..d97920d0 --- /dev/null +++ b/search/variables_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_f.js b/search/variables_f.js new file mode 100644 index 00000000..d9c54022 --- /dev/null +++ b/search/variables_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['robot_5fimpl_541',['robot_impl',['../classfranka_1_1ActiveControl.html#a94e725adb409391547a260f204c74564',1,'franka::ActiveControl']]], + ['robot_5fmode_542',['robot_mode',['../structfranka_1_1RobotState.html#a4943ae75e0e2ec534e0afac31cbcc987',1,'franka::RobotState']]] +]; diff --git a/splitbar.png b/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/structfranka_1_1CommandException.html b/structfranka_1_1CommandException.html new file mode 100644 index 00000000..466da786 --- /dev/null +++ b/structfranka_1_1CommandException.html @@ -0,0 +1,117 @@ + + + + + + + +Project: franka::CommandException Struct Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    franka::CommandException Struct Reference
    +
    +
    + +

    CommandException is thrown if an error occurs during command execution. + More...

    + +

    #include <exception.h>

    +
    +Inheritance diagram for franka::CommandException:
    +
    +
    Inheritance graph
    + + + + + +
    [legend]
    +
    +Collaboration diagram for franka::CommandException:
    +
    +
    Collaboration graph
    + + + + + +
    [legend]
    +

    Detailed Description

    +

    CommandException is thrown if an error occurs during command execution.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structfranka_1_1CommandException__coll__graph.map b/structfranka_1_1CommandException__coll__graph.map new file mode 100644 index 00000000..73c58e3f --- /dev/null +++ b/structfranka_1_1CommandException__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structfranka_1_1CommandException__coll__graph.md5 b/structfranka_1_1CommandException__coll__graph.md5 new file mode 100644 index 00000000..d76a1d46 --- /dev/null +++ b/structfranka_1_1CommandException__coll__graph.md5 @@ -0,0 +1 @@ +8f554c30479b664936d4c1cfc452d7af \ No newline at end of file diff --git a/structfranka_1_1CommandException__coll__graph.png b/structfranka_1_1CommandException__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1c2cc73356ecef88a639aaeae582c90ec75be8c3 GIT binary patch literal 6766 zcmd6sbyQSczsCnby1Nm0R75%iDJelf0bvMf7zAnQ4v|igmhNT=Y8(G?p=4S`}ez8z*%RV*=L`9e*5?Re7_T^sjf^y$Vdo*KuA=cC~ATK6X3TM z9~b;RXrC6A(J?TUDC@r9~A9uoyvdc^uABcdU>j5o&IE z9Hl%CMKjDnF?{RBhw|!brGS9;>VaGHAuTNrx3{<5jKgq8S;}@7JL2EJr!-ELL%iAC zw1w*FZ6RW;6g>-lwtuIZPP!8){;D?ZsNSM9_zS^F!#>Xv8b$u*c_}^xeJEjPo9}6- zGqb9in!7RK1{N2TV|8^kY<>L|7)_!S8UA%*f+n1lWz3yn$F^)ZDTx{f2WP$b)|id7 z3^YW_PMQOHeTICrw7!l{MMV|E_J~!l+6W6W_(7D&#>Pg!`8B(E+}n%{CWtIwYWLI> z9T=Qm#!sA*l2Qa69TU@&EBDrb#nZ#1FN}m~X?Yn-SXh`@(u4T&{1o}4-ujO>At51{ z9rykFe_lRtoWtkm=TFPXfc3v)Kih5Ho2jhd*vP4`7oMzq@pgX&+5P=Hb$2)!vPdnp z#%_x5Xm61XJYC<<-sn8tia#%H?d&M1sY9@^aXUYMzR}*^-ajxfZrjn=WUqFfSM(rM z{>?+zRax%j&tJb19lt83q!;DU%xDiq1+6xm@k$>DQRi_BZ)aVBaoV?D8c{+UteF3jj`LhdV0vu z-QDR>?w7U=hzSW~EEDo%ZxLQ=f`^Ca@#o;BuC{hJEuT^U;Nal2>D2+9uC8vMkg#xi zLxZSfz=e26Oh?C~!;=%MhYufCmX}BQqq^|y2h#+f7HKuKI?Wn37F~YRn(c|CN{^2x zyU)X8>AAP?GCMna5Q!`qx-5&0i6Kr&NXR?B7*TB^(@|F^6&4gU-`LpTRd+&L4Gj-l zLG+!S1s6R|wqL|*Hdr66kMc-K85KOs(A=46h|V!FF&T!`1P2GxZdq3T*1Wvj3tU4c zzJE`Tbgpb{OmWJP^yE9=GQBQ;u3&D?{>ZpUOVHKzQ1?`C96f7*ncK&mlbu;&NUQ4_ z>7vKZj3{mp4Gm4hO#Fi$#&X9%^xFD*MBwF?=^3hU6=EOb>42;C>Yxd?PI_ z4ZO|+2W&jjZIsW>&W_}#!Ne^QA)y-(5fKr$QZh9)wJU1{1qFI0rtY2|#eyB@9M9c3 zEJ(kl&}(MAxRuQa){R`%JF-R5I)zg zR6O4{ReqW!L8D!w9%@k4H(H=9X#N?e|F;VmT!CZsqHVMzF!1}tgj}8`%IP38Gm{ja zxFR0w%*n|a8^lE&MS48-QJtNbUI0QFi9;BA;}U)B%RTU5p6uBy*y*`YZs*foV;ON! zR2Lr`(Hqr>%LHygL5i&@xUz@G16CP7{AAV8urS;!i}}7jT=0f8xsxHREXgLmJEAKLp+y!-H{yBsIpO`qrh)+2nKt{LPh``CoX?l9v&7JCT z*=)G&&z{Jdnwp@dCNcEU#@qQ;&y}s zJo*r9?6)O|?Zlryf126aMm;Z3>gw&iDU?nuC@7dU|JUdWJ=K({wiXw4v-1kBl$4a4 zF(E|@()5yib}9s{UKDw4o~Cq(i>vFOR-b3#H;HK15uY5Zl;vtxw6VQCx7CP8sN$F_>)J+nUtb?-Ao(Rv!~>|9oQ zg8V#PVMXPf@Y;QUVurC=>oXt3T{Zz)qR~)Q?qpl3p=Uuvbal_4JF|Iv6RV|ots|Jn zND;-Gxb5go!fUuznWMF1z8y7pg72ATsCG#J76hs@kBon`Fy{QYP#T<9Q$>@AipICw z=E3>9^h}F3nmNW;36uM8|5YewdObQ&2rWnLG;O?k<(0cq{=^V8cU{wKNMz(x9<=tg`qHVi zvU2LV&fm8#udDBFFFL>OU`4+#KNNSEzFQ!*0-E z5Sx@V%f(mi)2Bn>pjoO|+T2W-%D>k5#}bjv8a`fPcwLaE=n3X`G@;j#+veoMm2BIC zERo3wei9zB`^Ml#VbSl;eSJm+Rqa<;#KcE=C8y_mUFGGt)O32?U%!5`p;HW3JoUVO zGGOnZw^Bc{+C4JzVyft!$F~hO_8SG76dVGCH2*0F@-Pk>Iyxle8>*x08|rp(iFNUz zM32zZ92w&&r%~O=tLux{=;(1E+m;@C3sqZ`Gk>8qFaL}LVwBwS=gNw^v3$n*hkt80 zI5;lVl=eF#2dWjGp3a~YL%;uha%FovhEq9Cs^LoIbh1F+{ot1h*va|1xex{h1_a+) z%hG=fJv+BFH?-pleZMc3DSV;LcMFlE?z>gh)ah(gzr6jU9>GUaU0p5iw*F4ZP*s)i z#*G_p+V7r#d+O-ubai&hPQ7${p{Yqu4`b|Ra{83FRTq)s^R(2@-@n#+gmrtii42sK zhzNCO!B!3l(}T|LZfq+nD{+r)dT>dXGxJ}R1k5Zf6s)YIee{c|K+gZK(i<2#`TI*R z1e`lOO&7Z9?(V*G!ot81Dfbq)L1G~#Kc7SY#S0sw5nh9j_&~cf%b<`T(6@1J-s~D3 zrSL}|b-ll>rm3fg2Pv(pdJLwDOH2a)~S5P7T{@s zWM--qX%z!X*$5|NvvO(4Y(XIE0LR$Qdnzj8Fp0l5t5`|At6?Q4Cs*YNv#{U*pacU= z#>~`j|7Lw%odx(v&hFY8(j@TG-QyDNuKWCX7f?>5dXCHxJ#27sF~{52w>~qISyxA= zSLSR9`+?OUeX&;A+0N#837MLzss(tNJVHY6(=#%JL*=``XL@@>S){x)3$mS8`f34@ z9j;K_RkxIpk*Tbyc{ktYo9gZ3BgDqWR&`qSpjab^Zxfl69jzG}9^TYq1cg#(JajGY z6KeI?`H37D7+`?tYHD_Bm^L}GxVpJnCL|=VY_>{+M{?YM(FEW%AbTi7tUlGmCo(-f zy>_qTI@@VvU;qZu2Ru_BaCmqK2GG~no^VuoYWhQ?6j|0$SMQRDDso{dK zzRrPxXs3~(q0sDXR$Nl%>BD-VOZLteBW?^A$@{eHo69 z0hrvMz$s`m_7@Zi#h>vs{BA3{I+8>l9G~K$*ObU9XbsR53iO;^Mh$fm*wSQ z*)}j@n3;(GQ&3V;lDhP9B^(|02w;D|AT3nWN`Gv0(#~k@3@ox8*F9cvUQAbBO5b(Ta>)-NFCnsT0 z?%pVx`!!}=H)7-2Y57fJFwJdplD4+C_G~r7$;`%v0D@0I(3LK1ZDwiNvv_I8&BsSt zTwF{qYD*2?_pQV)ymn?fc|?=w_^% z0p^4y`^gl`dp8c)E(eS!yn}YSdT+fpWg0l)P9S}Qr3~Ze{w)gS8KtGA7!6U&?|8m{ zCLFnDtgCA({!m9&BVMLSO-04#xZ7Hgd?(@S@G$9kiN=&WLw+vQg^O2I-n%8CT8-kS zn3z~|Yb$V)x{)W5ga@rFNbOqNiRWJ4B;5&|(eB2iHsP=0p}#!usvF@#E>PXPh{jD^ zAmMtty3xOW@dR9K!Qq=VjQJ!0NU|i3iGq|D@w6)#+AoB3nr;b9cb$7kFH9! z`D`pNUbi2_aC5N8j06OFxw_*885W#qcz{&AWt|K@@zK~T zN$&%?W`uTb6HskB^6bU!SzVR!GVjHk57Ji zx$0EW5q=dw?FitL=Me5h`}_L>!1Cm)$$xCL{~?4y0qx?aqwe=0ID|UD1c3};atGV} zaP=9pj2}IqoLBbtAy4mMpyZ9sc=6w;@>^P%ot^#3vu6&I?XGL;&CSj0x%rE{FY0iv zuCBZQ^qe(<{M9r*O#Z}Ha3xfIsg-&Hhb-J z{B16N3Lg(k?wS2L_>JHzFx+%0ovbnp2Z0Hsb7Q{T;S0u zn3-dM?JO)T3|bKf1k;5?;vKFIVI!R(tj5A^=*^1${{GG?!=`UdPNo=`nV4w!;lsql zL_tf73)~*BVWZjBWR=5-|Izw$zr!K1h}c+%2gCH;yYsEfD=TkL7Xx!l!wU*H0kNI! zfBmWoSPl;~GDwh~iTBNcRDKLBnqGsp=?vBkXh|1HK7e-iHrP#(v$4ek@8{+1Z9eot zlyP=$^d;-w;qWf9u1;usu7wI1%$koMdvdOh?pB%Zfs-H?GW${YGEKyW5@LpoV*x5Q z-C#!t;BIqkYkws0ii(cUNY=rD7c3U0j|1BcO!zGc3C6XN9A&W5m}aX}p$p~^1)m=p zA^~@3_CJ3BG!;0^ND5A+TRc3(01l?x{UsZn7URsj!_4;<+J@AxKYC|<^v`iuN>!kt zpmsp7|2bto|!GYb7c)m&u8nP>d-QwcH2U0>oL9uf(|Dn}$?SWZ*r)KM$L*_n8Ab93OEW$o>Gz>86{VIWb7s(O06LC9khfk4wfH0|?9lBsHLNFt-4GZhHF&E(}k6uvb6qQ{MFb z^73;3V1WNnGQ+e?F&OX}0gzP%7ni!ekD#n!Kneu}1UhG(I$}Y6B_${Cj~^Z!)cE~z zd73FsQK1K)MC^f74W(RGypo)p3<;t$^{bt5NErCt>~qYmTV)U$aEX@VPPPD2+U&OR zUdbN}-wkGNZfO}Jw&+I%cnlLYfI>x|?#0)_kR12#s}<}G^Njzv)Q3Vtj*i?aP1+b~ zX=!U38hSz0mvNl+?j1x!LnC&1e_jqOFbKP_^YZc{qM|+ne=`cU5+q1IuQQa0uEt}> z028rTvNFO2p;G#nSdRF$@M9 z%$8nWWm~)y{h}PgKcfTRBW%KFvm?$wE(7WKtNpc>S=v#tsLmo6%A5l!f>7WJMrjJ6kV^M}d%)gPk4g8pL)KV9zG2PUOkZ@tY9ey?Yl253iuOSm|9m$kogp z9OhT8&9us>xswSALxY__kcb1(H!$#c#e~SOn6(A%5chPR__D~>^o7QiMZEo`Go3?CQv z&Cjo`rHBy(`Ccvv`!Mki*tU{$@qotV6%>|1COA={S5Q}{RnZQj)+q2c8pVg5nRVeN zu}&SAv^jxS4?(c}ZF)LlZq7(iS$Soy#TB4rSLyQt)IO4}pt6z}Byc%?2LzyEkk==^ zve86BVU!xU!KE zGo}vFTX1X$`eY{>WQDqckrB)8KIJ8W8g-40eZbA4MwQv}ii>gI;*s?MGJXx>LekS- zXXfCyZ)-jGOfY;5tkob%&k6|M*8LLzfkiWbC!X2JgjRs-$T literal 0 HcmV?d00001 diff --git a/structfranka_1_1CommandException__inherit__graph.map b/structfranka_1_1CommandException__inherit__graph.map new file mode 100644 index 00000000..73c58e3f --- /dev/null +++ b/structfranka_1_1CommandException__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structfranka_1_1CommandException__inherit__graph.md5 b/structfranka_1_1CommandException__inherit__graph.md5 new file mode 100644 index 00000000..d76a1d46 --- /dev/null +++ b/structfranka_1_1CommandException__inherit__graph.md5 @@ -0,0 +1 @@ +8f554c30479b664936d4c1cfc452d7af \ No newline at end of file diff --git a/structfranka_1_1CommandException__inherit__graph.png b/structfranka_1_1CommandException__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1c2cc73356ecef88a639aaeae582c90ec75be8c3 GIT binary patch literal 6766 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 literal 0 HcmV?d00001 diff --git a/structfranka_1_1ControlException-members.html b/structfranka_1_1ControlException-members.html new file mode 100644 index 00000000..7ea478c4 --- /dev/null +++ b/structfranka_1_1ControlException-members.html @@ -0,0 +1,92 @@ + + + + + + + +Project: Member List + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    franka::ControlException Member List
    +
    +
    + +

    This is the complete list of members for franka::ControlException, including all inherited members.

    + + + +
    ControlException(const std::string &what, std::vector< franka::Record > log={}) noexceptfranka::ControlExceptionexplicit
    logfranka::ControlException
    + + + + diff --git a/structfranka_1_1ControlException.html b/structfranka_1_1ControlException.html new file mode 100644 index 00000000..592d449b --- /dev/null +++ b/structfranka_1_1ControlException.html @@ -0,0 +1,184 @@ + + + + + + + +Project: franka::ControlException Struct Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    franka::ControlException Struct Reference
    +
    +
    + +

    ControlException is thrown if an error occurs during motion generation or torque control. + More...

    + +

    #include <exception.h>

    +
    +Inheritance diagram for franka::ControlException:
    +
    +
    Inheritance graph
    + + + + + +
    [legend]
    +
    +Collaboration diagram for franka::ControlException:
    +
    +
    Collaboration graph
    + + + + + +
    [legend]
    + + + + + +

    +Public Member Functions

     ControlException (const std::string &what, std::vector< franka::Record > log={}) noexcept
     Creates the exception with an explanatory string and a Log object. More...
     
    + + + + +

    +Public Attributes

    +const std::vector< franka::Recordlog
     Vector of states and commands logged just before the exception occurred.
     
    +

    Detailed Description

    +

    ControlException is thrown if an error occurs during motion generation or torque control.

    +

    The exception holds a vector with the last received robot states. The number of recorded states can be configured in the Robot constructor.

    +
    Examples
    generate_consecutive_motions.cpp, motion_with_control.cpp, and motion_with_control_external_control_loop.cpp.
    +
    +

    Constructor & Destructor Documentation

    + +

    ◆ ControlException()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    franka::ControlException::ControlException (const std::string & what,
    std::vector< franka::Recordlog = {} 
    )
    +
    +explicitnoexcept
    +
    + +

    Creates the exception with an explanatory string and a Log object.

    +
    Parameters
    + + + +
    [in]whatExplanatory string.
    [in]logVector of last received states and commands.
    +
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structfranka_1_1ControlException__coll__graph.map b/structfranka_1_1ControlException__coll__graph.map new file mode 100644 index 00000000..76e25ff0 --- /dev/null +++ b/structfranka_1_1ControlException__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structfranka_1_1ControlException__coll__graph.md5 b/structfranka_1_1ControlException__coll__graph.md5 new file mode 100644 index 00000000..fe9c0ccd --- /dev/null +++ b/structfranka_1_1ControlException__coll__graph.md5 @@ -0,0 +1 @@ +4e553ffed42befde0592aa1e7f95bbac \ No newline at end of file diff --git a/structfranka_1_1ControlException__coll__graph.png b/structfranka_1_1ControlException__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..59b599d035b719e14c4db2d4bc95c13c6cce62b2 GIT binary patch literal 6413 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 literal 0 HcmV?d00001 diff --git a/structfranka_1_1ControlException__inherit__graph.map b/structfranka_1_1ControlException__inherit__graph.map new file mode 100644 index 00000000..76e25ff0 --- /dev/null +++ b/structfranka_1_1ControlException__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structfranka_1_1ControlException__inherit__graph.md5 b/structfranka_1_1ControlException__inherit__graph.md5 new file mode 100644 index 00000000..fe9c0ccd --- /dev/null +++ b/structfranka_1_1ControlException__inherit__graph.md5 @@ -0,0 +1 @@ +4e553ffed42befde0592aa1e7f95bbac \ No newline at end of file diff --git a/structfranka_1_1ControlException__inherit__graph.png b/structfranka_1_1ControlException__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..59b599d035b719e14c4db2d4bc95c13c6cce62b2 GIT binary patch literal 6413 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 literal 0 HcmV?d00001 diff --git a/structfranka_1_1Errors-members.html b/structfranka_1_1Errors-members.html new file mode 100644 index 00000000..5fdae52b --- /dev/null +++ b/structfranka_1_1Errors-members.html @@ -0,0 +1,137 @@ + + + + + + + +Project: Member List + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    franka::Errors Member List
    +
    +
    + +

    This is the complete list of members for franka::Errors, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    base_acceleration_initialization_timeoutfranka::Errors
    base_acceleration_invalid_readingfranka::Errors
    cartesian_motion_generator_acceleration_discontinuityfranka::Errors
    cartesian_motion_generator_elbow_limit_violationfranka::Errors
    cartesian_motion_generator_elbow_sign_inconsistentfranka::Errors
    cartesian_motion_generator_joint_acceleration_discontinuityfranka::Errors
    cartesian_motion_generator_joint_position_limits_violationfranka::Errors
    cartesian_motion_generator_joint_velocity_discontinuityfranka::Errors
    cartesian_motion_generator_joint_velocity_limits_violationfranka::Errors
    cartesian_motion_generator_start_elbow_invalidfranka::Errors
    cartesian_motion_generator_velocity_discontinuityfranka::Errors
    cartesian_motion_generator_velocity_limits_violationfranka::Errors
    cartesian_position_limits_violationfranka::Errors
    cartesian_position_motion_generator_invalid_framefranka::Errors
    cartesian_position_motion_generator_start_pose_invalidfranka::Errors
    cartesian_reflexfranka::Errors
    cartesian_spline_motion_generator_violationfranka::Errors
    cartesian_velocity_profile_safety_violationfranka::Errors
    cartesian_velocity_violationfranka::Errors
    communication_constraints_violationfranka::Errors
    controller_torque_discontinuityfranka::Errors
    Errors()franka::Errors
    Errors(const Errors &other)franka::Errors
    Errors(const std::array< bool, 41 > &errors)franka::Errors
    force_control_safety_violationfranka::Errors
    force_controller_desired_force_tolerance_violationfranka::Errors
    instability_detectedfranka::Errors
    joint_motion_generator_acceleration_discontinuityfranka::Errors
    joint_motion_generator_position_limits_violationfranka::Errors
    joint_motion_generator_velocity_discontinuityfranka::Errors
    joint_motion_generator_velocity_limits_violationfranka::Errors
    joint_move_in_wrong_directionfranka::Errors
    joint_p2p_insufficient_torque_for_planningfranka::Errors
    joint_position_limits_violationfranka::Errors
    joint_position_motion_generator_start_pose_invalidfranka::Errors
    joint_reflexfranka::Errors
    joint_velocity_violationfranka::Errors
    joint_via_motion_generator_planning_joint_limit_violationfranka::Errors
    max_goal_pose_deviation_violationfranka::Errors
    max_path_pose_deviation_violationfranka::Errors
    operator bool() const noexceptfranka::Errorsexplicit
    operator std::string() constfranka::Errorsexplicit
    operator=(Errors other)franka::Errors
    power_limit_violationfranka::Errors
    self_collision_avoidance_violationfranka::Errors
    start_elbow_sign_inconsistentfranka::Errors
    tau_j_range_violationfranka::Errors
    + + + + diff --git a/structfranka_1_1Errors.html b/structfranka_1_1Errors.html new file mode 100644 index 00000000..99d8a746 --- /dev/null +++ b/structfranka_1_1Errors.html @@ -0,0 +1,461 @@ + + + + + + + +Project: franka::Errors Struct Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    franka::Errors Struct Reference
    +
    +
    + +

    Enumerates errors that can occur while controlling a franka::Robot. + More...

    + +

    #include <errors.h>

    + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    Errors ()
     Creates an empty Errors instance.
     
     Errors (const Errors &other)
     Copy constructs a new Errors instance. More...
     
    Errorsoperator= (Errors other)
     Assigns this Errors instance from another Errors value. More...
     
     Errors (const std::array< bool, 41 > &errors)
     Creates a new Errors instance from the given array. More...
     
     operator bool () const noexcept
     Check if any error flag is set to true. More...
     
     operator std::string () const
     Creates a string with names of active errors: "[active_error_name2, active_error_name_2, ... active_error_name_n]" If no errors are active, the string contains empty brackets: "[]". More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +const bool & joint_position_limits_violation
     True if the robot moved past the joint limits.
     
    +const bool & cartesian_position_limits_violation
     True if the robot moved past any of the virtual walls.
     
    +const bool & self_collision_avoidance_violation
     True if the robot would have collided with itself.
     
    +const bool & joint_velocity_violation
     True if the robot exceeded joint velocity limits.
     
    +const bool & cartesian_velocity_violation
     True if the robot exceeded Cartesian velocity limits.
     
    +const bool & force_control_safety_violation
     True if the robot exceeded safety threshold during force control.
     
    +const bool & joint_reflex
     True if a collision was detected, i.e. the robot exceeded a torque threshold in a joint motion.
     
    +const bool & cartesian_reflex
     True if a collision was detected, i.e. the robot exceeded a torque threshold in a Cartesian motion.
     
    +const bool & max_goal_pose_deviation_violation
     True if internal motion generator did not reach the goal pose.
     
    +const bool & max_path_pose_deviation_violation
     True if internal motion generator deviated from the path.
     
    +const bool & cartesian_velocity_profile_safety_violation
     True if Cartesian velocity profile for internal motions was exceeded.
     
    +const bool & joint_position_motion_generator_start_pose_invalid
     True if an external joint position motion generator was started with a pose too far from the current pose.
     
    +const bool & joint_motion_generator_position_limits_violation
     True if an external joint motion generator would move into a joint limit.
     
    +const bool & joint_motion_generator_velocity_limits_violation
     True if an external joint motion generator exceeded velocity limits.
     
    +const bool & joint_motion_generator_velocity_discontinuity
     True if commanded velocity in joint motion generators is discontinuous (target values are too far apart).
     
    +const bool & joint_motion_generator_acceleration_discontinuity
     True if commanded acceleration in joint motion generators is discontinuous (target values are too far apart).
     
    +const bool & cartesian_position_motion_generator_start_pose_invalid
     True if an external Cartesian position motion generator was started with a pose too far from the current pose.
     
    +const bool & cartesian_motion_generator_elbow_limit_violation
     True if an external Cartesian motion generator would move into an elbow limit.
     
    +const bool & cartesian_motion_generator_velocity_limits_violation
     True if an external Cartesian motion generator would move with too high velocity.
     
    +const bool & cartesian_motion_generator_velocity_discontinuity
     True if commanded velocity in Cartesian motion generators is discontinuous (target values are too far apart).
     
    +const bool & cartesian_motion_generator_acceleration_discontinuity
     True if commanded acceleration in Cartesian motion generators is discontinuous (target values are too far apart).
     
    +const bool & cartesian_motion_generator_elbow_sign_inconsistent
     True if commanded elbow values in Cartesian motion generators are inconsistent.
     
    +const bool & cartesian_motion_generator_start_elbow_invalid
     True if the first elbow value in Cartesian motion generators is too far from initial one.
     
    +const bool & cartesian_motion_generator_joint_position_limits_violation
     True if the joint position limits would be exceeded after IK calculation.
     
    +const bool & cartesian_motion_generator_joint_velocity_limits_violation
     True if the joint velocity limits would be exceeded after IK calculation.
     
    +const bool & cartesian_motion_generator_joint_velocity_discontinuity
     True if the joint velocity in Cartesian motion generators is discontinuous after IK calculation.
     
    +const bool & cartesian_motion_generator_joint_acceleration_discontinuity
     True if the joint acceleration in Cartesian motion generators is discontinuous after IK calculation.
     
    +const bool & cartesian_position_motion_generator_invalid_frame
     True if the Cartesian pose is not a valid transformation matrix.
     
    +const bool & force_controller_desired_force_tolerance_violation
     True if desired force exceeds the safety thresholds.
     
    +const bool & controller_torque_discontinuity
     True if the torque set by the external controller is discontinuous.
     
    const bool & start_elbow_sign_inconsistent
     True if the start elbow sign was inconsistent. More...
     
    +const bool & communication_constraints_violation
     True if minimum network communication quality could not be held during a motion.
     
    +const bool & power_limit_violation
     True if commanded values would result in exceeding the power limit.
     
    const bool & joint_p2p_insufficient_torque_for_planning
     True if the robot is overloaded for the required motion. More...
     
    +const bool & tau_j_range_violation
     True if the measured torque signal is out of the safe range.
     
    +const bool & instability_detected
     True if an instability is detected.
     
    +const bool & joint_move_in_wrong_direction
     True if the robot is in joint position limits violation error and the user guides the robot further towards the limit.
     
    +const bool & cartesian_spline_motion_generator_violation
     True if the generated motion violates a joint limit.
     
    +const bool & joint_via_motion_generator_planning_joint_limit_violation
     True if the generated motion violates a joint limit.
     
    +const bool & base_acceleration_initialization_timeout
     True if the gravity vector could not be initialized by measureing the base acceleration.
     
    +const bool & base_acceleration_invalid_reading
     True if the base acceleration O_ddP_O cannot be determined.
     
    +

    Detailed Description

    +

    Enumerates errors that can occur while controlling a franka::Robot.

    +

    Constructor & Destructor Documentation

    + +

    ◆ Errors() [1/2]

    + +
    +
    + + + + + + + + +
    franka::Errors::Errors (const Errorsother)
    +
    + +

    Copy constructs a new Errors instance.

    +
    Parameters
    + + +
    [in]otherOther Errors instance.
    +
    +
    + +
    +
    + +

    ◆ Errors() [2/2]

    + +
    +
    + + + + + + + + +
    franka::Errors::Errors (const std::array< bool, 41 > & errors)
    +
    + +

    Creates a new Errors instance from the given array.

    +
    Parameters
    + + +
    errorsArray of error flags.
    +
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ operator bool()

    + +
    +
    + + + + + +
    + + + + + + + +
    franka::Errors::operator bool () const
    +
    +explicitnoexcept
    +
    + +

    Check if any error flag is set to true.

    +
    Returns
    True if any errors are set.
    + +
    +
    + +

    ◆ operator std::string()

    + +
    +
    + + + + + +
    + + + + + + + +
    franka::Errors::operator std::string () const
    +
    +explicit
    +
    + +

    Creates a string with names of active errors: "[active_error_name2, active_error_name_2, ... active_error_name_n]" If no errors are active, the string contains empty brackets: "[]".

    +
    Returns
    string with names of active errors
    + +
    +
    + +

    ◆ operator=()

    + +
    +
    + + + + + + + + +
    Errors& franka::Errors::operator= (Errors other)
    +
    + +

    Assigns this Errors instance from another Errors value.

    +
    Parameters
    + + +
    [in]otherOther Errors instance.
    +
    +
    +
    Returns
    Errors instance.
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ joint_p2p_insufficient_torque_for_planning

    + +
    +
    + + + + +
    const bool& franka::Errors::joint_p2p_insufficient_torque_for_planning
    +
    + +

    True if the robot is overloaded for the required motion.

    +

    Applies only to motions started from Desk.

    + +
    +
    + +

    ◆ start_elbow_sign_inconsistent

    + +
    +
    + + + + +
    const bool& franka::Errors::start_elbow_sign_inconsistent
    +
    + +

    True if the start elbow sign was inconsistent.

    +

    Applies only to motions started from Desk.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structfranka_1_1Exception.html b/structfranka_1_1Exception.html new file mode 100644 index 00000000..223e2019 --- /dev/null +++ b/structfranka_1_1Exception.html @@ -0,0 +1,125 @@ + + + + + + + +Project: franka::Exception Struct Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    franka::Exception Struct Reference
    +
    + + + + + diff --git a/structfranka_1_1Exception__coll__graph.map b/structfranka_1_1Exception__coll__graph.map new file mode 100644 index 00000000..a3586d81 --- /dev/null +++ b/structfranka_1_1Exception__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structfranka_1_1Exception__coll__graph.md5 b/structfranka_1_1Exception__coll__graph.md5 new file mode 100644 index 00000000..9c424121 --- /dev/null +++ b/structfranka_1_1Exception__coll__graph.md5 @@ -0,0 +1 @@ +35ab8e8c51542517bb4903c73914631e \ No newline at end of file diff --git a/structfranka_1_1Exception__coll__graph.png b/structfranka_1_1Exception__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a3eaf33bd3ecf57b50dfef42f7b7dffb0f7b0553 GIT binary patch literal 3508 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 + + + + + + + + + + + diff --git a/structfranka_1_1Exception__inherit__graph.md5 b/structfranka_1_1Exception__inherit__graph.md5 new file mode 100644 index 00000000..697f6d12 --- /dev/null +++ b/structfranka_1_1Exception__inherit__graph.md5 @@ -0,0 +1 @@ +6faf038d3e55c6494cd13b5fbac07b70 \ No newline at end of file diff --git a/structfranka_1_1Exception__inherit__graph.png b/structfranka_1_1Exception__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..7707c6e3ee0e184ea79b3a76b99225198ada5857 GIT binary patch literal 40258 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 literal 0 HcmV?d00001 diff --git a/structfranka_1_1Finishable-members.html b/structfranka_1_1Finishable-members.html new file mode 100644 index 00000000..02013d83 --- /dev/null +++ b/structfranka_1_1Finishable-members.html @@ -0,0 +1,91 @@ + + + + + + + +Project: Member List + + + + + + + + + + + + +
    +
    +
    franka::Finishable Member List
    +
    +
    + +

    This is the complete list of members for franka::Finishable, including all inherited members.

    + + +
    motion_finishedfranka::Finishable
    + + + + diff --git a/structfranka_1_1Finishable.html b/structfranka_1_1Finishable.html new file mode 100644 index 00000000..6bb113e2 --- /dev/null +++ b/structfranka_1_1Finishable.html @@ -0,0 +1,123 @@ + + + + + + + +Project: franka::Finishable Struct Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    franka::Finishable Struct Reference
    +
    +
    + +

    Helper type for control and motion generation loops. + More...

    + +

    #include <control_types.h>

    +
    +Inheritance diagram for franka::Finishable:
    +
    +
    Inheritance graph
    + + + + + + + + +
    [legend]
    + + + + + +

    +Public Attributes

    +bool motion_finished = false
     Determines whether to finish a currently running motion.
     
    +

    Detailed Description

    +

    Helper type for control and motion generation loops.

    +

    Used to determine whether to terminate a loop after the control callback has returned.

    +
    See also
    Documentation on callbacks
    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structfranka_1_1Finishable__inherit__graph.map b/structfranka_1_1Finishable__inherit__graph.map new file mode 100644 index 00000000..b06c5d07 --- /dev/null +++ b/structfranka_1_1Finishable__inherit__graph.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/structfranka_1_1Finishable__inherit__graph.md5 b/structfranka_1_1Finishable__inherit__graph.md5 new file mode 100644 index 00000000..7b080573 --- /dev/null +++ b/structfranka_1_1Finishable__inherit__graph.md5 @@ -0,0 +1 @@ +761d61ee040c65aed80333cad3d1f1dc \ No newline at end of file diff --git a/structfranka_1_1Finishable__inherit__graph.png b/structfranka_1_1Finishable__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..60e1e0dcca90e69777baac46cf9c6537ba6b2dc0 GIT binary patch literal 15399 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 A&;S4c literal 0 HcmV?d00001 diff --git a/structfranka_1_1GripperState-members.html b/structfranka_1_1GripperState-members.html new file mode 100644 index 00000000..d0564ce7 --- /dev/null +++ b/structfranka_1_1GripperState-members.html @@ -0,0 +1,95 @@ + + + + + + + +Project: Member List + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    franka::GripperState Member List
    +
    + + + + + diff --git a/structfranka_1_1GripperState.html b/structfranka_1_1GripperState.html new file mode 100644 index 00000000..112f43ad --- /dev/null +++ b/structfranka_1_1GripperState.html @@ -0,0 +1,187 @@ + + + + + + + +Project: franka::GripperState Struct Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    franka::GripperState Struct Reference
    +
    +
    + +

    Describes the gripper state. + More...

    + +

    #include <gripper_state.h>

    +
    +Collaboration diagram for franka::GripperState:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + + + + + + + + + + + + +

    +Public Attributes

    double width {}
     Current gripper opening width. More...
     
    double max_width {}
     Maximum gripper opening width. More...
     
    +bool is_grasped {}
     Indicates whether an object is currently grasped.
     
    uint16_t temperature {}
     Current gripper temperature. More...
     
    +Duration time {}
     Strictly monotonically increasing timestamp since robot start.
     
    +

    Detailed Description

    +

    Describes the gripper state.

    +
    Examples
    grasp_object.cpp.
    +
    +

    Member Data Documentation

    + +

    ◆ max_width

    + +
    +
    + + + + +
    double franka::GripperState::max_width {}
    +
    + +

    Maximum gripper opening width.

    +

    This parameter is estimated by homing the gripper. After changing the gripper fingers, a homing needs to be done. Unit: \([m]\).

    +
    See also
    Gripper::homing.
    +
    Examples
    grasp_object.cpp.
    +
    + +
    +
    + +

    ◆ temperature

    + +
    +
    + + + + +
    uint16_t franka::GripperState::temperature {}
    +
    + +

    Current gripper temperature.

    +

    Unit: \([°C]\).

    + +
    +
    + +

    ◆ width

    + +
    +
    + + + + +
    double franka::GripperState::width {}
    +
    + +

    Current gripper opening width.

    +

    Unit: \([m]\).

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structfranka_1_1GripperState__coll__graph.map b/structfranka_1_1GripperState__coll__graph.map new file mode 100644 index 00000000..9cd39f67 --- /dev/null +++ b/structfranka_1_1GripperState__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structfranka_1_1GripperState__coll__graph.md5 b/structfranka_1_1GripperState__coll__graph.md5 new file mode 100644 index 00000000..efc0d3cf --- /dev/null +++ b/structfranka_1_1GripperState__coll__graph.md5 @@ -0,0 +1 @@ +44936ba81b40a2d95800ad5ee62e8de6 \ No newline at end of file diff --git a/structfranka_1_1GripperState__coll__graph.png b/structfranka_1_1GripperState__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..afc6689e10592b569a1b4a1b61acfda904d1c414 GIT binary patch literal 4233 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 Nt=oEP + + + + + + +Project: Member List + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    franka::IncompatibleVersionException Member List
    +
    +
    + +

    This is the complete list of members for franka::IncompatibleVersionException, including all inherited members.

    + + + + +
    IncompatibleVersionException(uint16_t server_version, uint16_t library_version) noexceptfranka::IncompatibleVersionException
    library_versionfranka::IncompatibleVersionException
    server_versionfranka::IncompatibleVersionException
    + + + + diff --git a/structfranka_1_1IncompatibleVersionException.html b/structfranka_1_1IncompatibleVersionException.html new file mode 100644 index 00000000..9d0c3b41 --- /dev/null +++ b/structfranka_1_1IncompatibleVersionException.html @@ -0,0 +1,185 @@ + + + + + + + +Project: franka::IncompatibleVersionException Struct Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    franka::IncompatibleVersionException Struct Reference
    +
    +
    + +

    IncompatibleVersionException is thrown if the robot does not support this version of libfranka. + More...

    + +

    #include <exception.h>

    +
    +Inheritance diagram for franka::IncompatibleVersionException:
    +
    +
    Inheritance graph
    + + + + + +
    [legend]
    +
    +Collaboration diagram for franka::IncompatibleVersionException:
    +
    +
    Collaboration graph
    + + + + + +
    [legend]
    + + + + + +

    +Public Member Functions

     IncompatibleVersionException (uint16_t server_version, uint16_t library_version) noexcept
     Creates the exception using the two different protocol versions. More...
     
    + + + + + + + +

    +Public Attributes

    +const uint16_t server_version
     Control's protocol version.
     
    +const uint16_t library_version
     libfranka protocol version.
     
    +

    Detailed Description

    +

    IncompatibleVersionException is thrown if the robot does not support this version of libfranka.

    +

    Constructor & Destructor Documentation

    + +

    ◆ IncompatibleVersionException()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    franka::IncompatibleVersionException::IncompatibleVersionException (uint16_t server_version,
    uint16_t library_version 
    )
    +
    +noexcept
    +
    + +

    Creates the exception using the two different protocol versions.

    +
    Parameters
    + + + +
    [in]server_versionProtocol version on the Control side.
    [in]library_versionProtocol version of libfranka.
    +
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structfranka_1_1IncompatibleVersionException__coll__graph.map b/structfranka_1_1IncompatibleVersionException__coll__graph.map new file mode 100644 index 00000000..2461bd9d --- /dev/null +++ b/structfranka_1_1IncompatibleVersionException__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structfranka_1_1IncompatibleVersionException__coll__graph.md5 b/structfranka_1_1IncompatibleVersionException__coll__graph.md5 new file mode 100644 index 00000000..e2854f08 --- /dev/null +++ b/structfranka_1_1IncompatibleVersionException__coll__graph.md5 @@ -0,0 +1 @@ +d8405e8f399f826091a2d7b535b2ec56 \ No newline at end of file diff --git a/structfranka_1_1IncompatibleVersionException__coll__graph.png b/structfranka_1_1IncompatibleVersionException__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2932e20b524d86359f9c030f3b750508f5d17734 GIT binary patch literal 7209 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 UdD$Zjp8Y`{s_Cf0m94}73ji3at^fc4 literal 0 HcmV?d00001 diff --git a/structfranka_1_1IncompatibleVersionException__inherit__graph.map b/structfranka_1_1IncompatibleVersionException__inherit__graph.map new file mode 100644 index 00000000..2461bd9d --- /dev/null +++ b/structfranka_1_1IncompatibleVersionException__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structfranka_1_1IncompatibleVersionException__inherit__graph.md5 b/structfranka_1_1IncompatibleVersionException__inherit__graph.md5 new file mode 100644 index 00000000..e2854f08 --- /dev/null +++ b/structfranka_1_1IncompatibleVersionException__inherit__graph.md5 @@ -0,0 +1 @@ +d8405e8f399f826091a2d7b535b2ec56 \ No newline at end of file diff --git a/structfranka_1_1IncompatibleVersionException__inherit__graph.png b/structfranka_1_1IncompatibleVersionException__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2932e20b524d86359f9c030f3b750508f5d17734 GIT binary patch literal 7209 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 UdD$Zjp8Y`{s_Cf0m94}73ji3at^fc4 literal 0 HcmV?d00001 diff --git a/structfranka_1_1InvalidOperationException.html b/structfranka_1_1InvalidOperationException.html new file mode 100644 index 00000000..837921be --- /dev/null +++ b/structfranka_1_1InvalidOperationException.html @@ -0,0 +1,117 @@ + + + + + + + +Project: franka::InvalidOperationException Struct Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    franka::InvalidOperationException Struct Reference
    +
    +
    + +

    InvalidOperationException is thrown if an operation cannot be performed. + More...

    + +

    #include <exception.h>

    +
    +Inheritance diagram for franka::InvalidOperationException:
    +
    +
    Inheritance graph
    + + + + + +
    [legend]
    +
    +Collaboration diagram for franka::InvalidOperationException:
    +
    +
    Collaboration graph
    + + + + + +
    [legend]
    +

    Detailed Description

    +

    InvalidOperationException is thrown if an operation cannot be performed.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structfranka_1_1InvalidOperationException__coll__graph.map b/structfranka_1_1InvalidOperationException__coll__graph.map new file mode 100644 index 00000000..e95ed993 --- /dev/null +++ b/structfranka_1_1InvalidOperationException__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structfranka_1_1InvalidOperationException__coll__graph.md5 b/structfranka_1_1InvalidOperationException__coll__graph.md5 new file mode 100644 index 00000000..498ce916 --- /dev/null +++ b/structfranka_1_1InvalidOperationException__coll__graph.md5 @@ -0,0 +1 @@ +378a4924d439a7e9d695dd50ea34922d \ No newline at end of file diff --git a/structfranka_1_1InvalidOperationException__coll__graph.png b/structfranka_1_1InvalidOperationException__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8cac2e286e716ea01aed3ffc408591b90d4fb172 GIT binary patch literal 6477 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 + + + + diff --git a/structfranka_1_1InvalidOperationException__inherit__graph.md5 b/structfranka_1_1InvalidOperationException__inherit__graph.md5 new file mode 100644 index 00000000..498ce916 --- /dev/null +++ b/structfranka_1_1InvalidOperationException__inherit__graph.md5 @@ -0,0 +1 @@ +378a4924d439a7e9d695dd50ea34922d \ No newline at end of file diff --git a/structfranka_1_1InvalidOperationException__inherit__graph.png b/structfranka_1_1InvalidOperationException__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8cac2e286e716ea01aed3ffc408591b90d4fb172 GIT binary patch literal 6477 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 + + + + + + +Project: franka::ModelException Struct Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    franka::ModelException Struct Reference
    +
    +
    + +

    ModelException is thrown if an error occurs when loading the model library. + More...

    + +

    #include <exception.h>

    +
    +Inheritance diagram for franka::ModelException:
    +
    +
    Inheritance graph
    + + + + + +
    [legend]
    +
    +Collaboration diagram for franka::ModelException:
    +
    +
    Collaboration graph
    + + + + + +
    [legend]
    +

    Detailed Description

    +

    ModelException is thrown if an error occurs when loading the model library.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structfranka_1_1ModelException__coll__graph.map b/structfranka_1_1ModelException__coll__graph.map new file mode 100644 index 00000000..eefb28fa --- /dev/null +++ b/structfranka_1_1ModelException__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structfranka_1_1ModelException__coll__graph.md5 b/structfranka_1_1ModelException__coll__graph.md5 new file mode 100644 index 00000000..6d7532b4 --- /dev/null +++ b/structfranka_1_1ModelException__coll__graph.md5 @@ -0,0 +1 @@ +aef07e73e3e9ceee16637698387a0402 \ No newline at end of file diff --git a/structfranka_1_1ModelException__coll__graph.png b/structfranka_1_1ModelException__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0ffed1a52d16279b11ee8b7cdb2ade4de0d4e0f8 GIT binary patch literal 6511 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 literal 0 HcmV?d00001 diff --git a/structfranka_1_1ModelException__inherit__graph.map b/structfranka_1_1ModelException__inherit__graph.map new file mode 100644 index 00000000..eefb28fa --- /dev/null +++ b/structfranka_1_1ModelException__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structfranka_1_1ModelException__inherit__graph.md5 b/structfranka_1_1ModelException__inherit__graph.md5 new file mode 100644 index 00000000..6d7532b4 --- /dev/null +++ b/structfranka_1_1ModelException__inherit__graph.md5 @@ -0,0 +1 @@ +aef07e73e3e9ceee16637698387a0402 \ No newline at end of file diff --git a/structfranka_1_1ModelException__inherit__graph.png b/structfranka_1_1ModelException__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0ffed1a52d16279b11ee8b7cdb2ade4de0d4e0f8 GIT binary patch literal 6511 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 literal 0 HcmV?d00001 diff --git a/structfranka_1_1NetworkException.html b/structfranka_1_1NetworkException.html new file mode 100644 index 00000000..5bd0e96d --- /dev/null +++ b/structfranka_1_1NetworkException.html @@ -0,0 +1,117 @@ + + + + + + + +Project: franka::NetworkException Struct Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    franka::NetworkException Struct Reference
    +
    +
    + +

    NetworkException is thrown if a connection to the robot cannot be established, or when a timeout occurs. + More...

    + +

    #include <exception.h>

    +
    +Inheritance diagram for franka::NetworkException:
    +
    +
    Inheritance graph
    + + + + + +
    [legend]
    +
    +Collaboration diagram for franka::NetworkException:
    +
    +
    Collaboration graph
    + + + + + +
    [legend]
    +

    Detailed Description

    +

    NetworkException is thrown if a connection to the robot cannot be established, or when a timeout occurs.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structfranka_1_1NetworkException__coll__graph.map b/structfranka_1_1NetworkException__coll__graph.map new file mode 100644 index 00000000..1d2a3fb1 --- /dev/null +++ b/structfranka_1_1NetworkException__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structfranka_1_1NetworkException__coll__graph.md5 b/structfranka_1_1NetworkException__coll__graph.md5 new file mode 100644 index 00000000..075dd123 --- /dev/null +++ b/structfranka_1_1NetworkException__coll__graph.md5 @@ -0,0 +1 @@ +d8561e044d91fa5f3077a8f6d620401b \ No newline at end of file diff --git a/structfranka_1_1NetworkException__coll__graph.png b/structfranka_1_1NetworkException__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a96102f433d63ed8518e8e982a1de2d5de3d4402 GIT binary patch literal 6621 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 literal 0 HcmV?d00001 diff --git a/structfranka_1_1NetworkException__inherit__graph.map b/structfranka_1_1NetworkException__inherit__graph.map new file mode 100644 index 00000000..1d2a3fb1 --- /dev/null +++ b/structfranka_1_1NetworkException__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structfranka_1_1NetworkException__inherit__graph.md5 b/structfranka_1_1NetworkException__inherit__graph.md5 new file mode 100644 index 00000000..075dd123 --- /dev/null +++ b/structfranka_1_1NetworkException__inherit__graph.md5 @@ -0,0 +1 @@ +d8561e044d91fa5f3077a8f6d620401b \ No newline at end of file diff --git a/structfranka_1_1NetworkException__inherit__graph.png b/structfranka_1_1NetworkException__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a96102f433d63ed8518e8e982a1de2d5de3d4402 GIT binary patch literal 6621 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 literal 0 HcmV?d00001 diff --git a/structfranka_1_1ProtocolException.html b/structfranka_1_1ProtocolException.html new file mode 100644 index 00000000..bfb8e196 --- /dev/null +++ b/structfranka_1_1ProtocolException.html @@ -0,0 +1,117 @@ + + + + + + + +Project: franka::ProtocolException Struct Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    franka::ProtocolException Struct Reference
    +
    +
    + +

    ProtocolException is thrown if the robot returns an incorrect message. + More...

    + +

    #include <exception.h>

    +
    +Inheritance diagram for franka::ProtocolException:
    +
    +
    Inheritance graph
    + + + + + +
    [legend]
    +
    +Collaboration diagram for franka::ProtocolException:
    +
    +
    Collaboration graph
    + + + + + +
    [legend]
    +

    Detailed Description

    +

    ProtocolException is thrown if the robot returns an incorrect message.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structfranka_1_1ProtocolException__coll__graph.map b/structfranka_1_1ProtocolException__coll__graph.map new file mode 100644 index 00000000..a05191a0 --- /dev/null +++ b/structfranka_1_1ProtocolException__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structfranka_1_1ProtocolException__coll__graph.md5 b/structfranka_1_1ProtocolException__coll__graph.md5 new file mode 100644 index 00000000..f7972396 --- /dev/null +++ b/structfranka_1_1ProtocolException__coll__graph.md5 @@ -0,0 +1 @@ +f4dff3c8ff5693e8c7a038439d383191 \ No newline at end of file diff --git a/structfranka_1_1ProtocolException__coll__graph.png b/structfranka_1_1ProtocolException__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8a9200c81b7f015fa48ab0ae4cefb6bbe0be9fbd GIT binary patch literal 6380 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 literal 0 HcmV?d00001 diff --git a/structfranka_1_1ProtocolException__inherit__graph.map b/structfranka_1_1ProtocolException__inherit__graph.map new file mode 100644 index 00000000..a05191a0 --- /dev/null +++ b/structfranka_1_1ProtocolException__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structfranka_1_1ProtocolException__inherit__graph.md5 b/structfranka_1_1ProtocolException__inherit__graph.md5 new file mode 100644 index 00000000..f7972396 --- /dev/null +++ b/structfranka_1_1ProtocolException__inherit__graph.md5 @@ -0,0 +1 @@ +f4dff3c8ff5693e8c7a038439d383191 \ No newline at end of file diff --git a/structfranka_1_1ProtocolException__inherit__graph.png b/structfranka_1_1ProtocolException__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8a9200c81b7f015fa48ab0ae4cefb6bbe0be9fbd GIT binary patch literal 6380 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 literal 0 HcmV?d00001 diff --git a/structfranka_1_1RealtimeException.html b/structfranka_1_1RealtimeException.html new file mode 100644 index 00000000..ee220825 --- /dev/null +++ b/structfranka_1_1RealtimeException.html @@ -0,0 +1,117 @@ + + + + + + + +Project: franka::RealtimeException Struct Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    franka::RealtimeException Struct Reference
    +
    +
    + +

    RealtimeException is thrown if realtime priority cannot be set. + More...

    + +

    #include <exception.h>

    +
    +Inheritance diagram for franka::RealtimeException:
    +
    +
    Inheritance graph
    + + + + + +
    [legend]
    +
    +Collaboration diagram for franka::RealtimeException:
    +
    +
    Collaboration graph
    + + + + + +
    [legend]
    +

    Detailed Description

    +

    RealtimeException is thrown if realtime priority cannot be set.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structfranka_1_1RealtimeException__coll__graph.map b/structfranka_1_1RealtimeException__coll__graph.map new file mode 100644 index 00000000..570fa5e2 --- /dev/null +++ b/structfranka_1_1RealtimeException__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structfranka_1_1RealtimeException__coll__graph.md5 b/structfranka_1_1RealtimeException__coll__graph.md5 new file mode 100644 index 00000000..47b203b1 --- /dev/null +++ b/structfranka_1_1RealtimeException__coll__graph.md5 @@ -0,0 +1 @@ +c25253c62c5844c462e123c0cc70a84a \ No newline at end of file diff --git a/structfranka_1_1RealtimeException__coll__graph.png b/structfranka_1_1RealtimeException__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..26a4e6643588055584645770e50818664a64a650 GIT binary patch literal 6578 zcmc(kWmJ@JyY_FwK@bUPL@5aYX_0g&Nku@qOX=?JZk6r^X%L3)6k$L?kVaBEC53&> zexAMee}C8?-}NrmFl!Cm_kG2A9p~>jCR|ZL`YsM74g^7WWo0Cl!TT_HHQ$DT-+ld* zb>IzVBrh!q-JpK5TZ=wG5QV9%q?n3Z`p%rY3bFb$Y`>_9c7VmgOq5hJN?V73pRljE z<58Z0d_bpClys2EM#GM- z8Kj$@JH71A5wCT5tP$MS?syT@r0Tp?p5{|rP#SL>#YG@~%t+J>i8tNHxl4<#WOkb{ zOk5&N6lO%GsH+>@)g@j%L^Br@9DIw4ib}Fv?3jMII}~3@O^wloBL9AIMTL~JbKTV2 zFyDOh!hAf{8+3kCf%%Y5hjH^Trtt1WV)~z3N&QB)wJMF1<=bD*Z9_Qcp zcq~D$s;8$H78yy@jQh=>jGZ?#Gjj@In>F>;skly%hnt&#l9EM1OwyJ^$L#iRi#cvy zaPP&Y;0n{WV+|)ADWJ&FC{%@VL|V=FD@%vnbfR( zclYY*%D~Xj-yZ|(SDI~`Ibvk3$P{&PlhfnAC<+W79v)l@ZcH+EosJ*n+J?5av6&*C zM!U0(qZV~nf={154GRksZTInyxraWqRy z%dhDIM60W-JAb~HbH*nmCf0oZ%-fpOZodrU;pH_kMP|M|IXT(BIzM9L=6;{Gx3tvx zXLqi&b|jh0c*=9HwO>wNUQI*W5LU#CyelGUtdT; zQ4vp_)-bv8*O8H!g2KYXA!1TeZm29bH$cCCY%E^4!Onl;$B&wg4YNW;=47=}>)H{e zJgMrrX4fsN$-%*J-4?fa5x0H6;Y^XVl(e*3_{}+T`}*%C8xvFL @Z{QO5g8QIx1 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 KvO?S-;6DJi?s_u- literal 0 HcmV?d00001 diff --git a/structfranka_1_1RealtimeException__inherit__graph.map b/structfranka_1_1RealtimeException__inherit__graph.map new file mode 100644 index 00000000..570fa5e2 --- /dev/null +++ b/structfranka_1_1RealtimeException__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structfranka_1_1RealtimeException__inherit__graph.md5 b/structfranka_1_1RealtimeException__inherit__graph.md5 new file mode 100644 index 00000000..47b203b1 --- /dev/null +++ b/structfranka_1_1RealtimeException__inherit__graph.md5 @@ -0,0 +1 @@ +c25253c62c5844c462e123c0cc70a84a \ No newline at end of file diff --git a/structfranka_1_1RealtimeException__inherit__graph.png b/structfranka_1_1RealtimeException__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..26a4e6643588055584645770e50818664a64a650 GIT binary patch literal 6578 zcmc(kWmJ@JyY_FwK@bUPL@5aYX_0g&Nku@qOX=?JZk6r^X%L3)6k$L?kVaBEC53&> zexAMee}C8?-}NrmFl!Cm_kG2A9p~>jCR|ZL`YsM74g^7WWo0Cl!TT_HHQ$DT-+ld* zb>IzVBrh!q-JpK5TZ=wG5QV9%q?n3Z`p%rY3bFb$Y`>_9c7VmgOq5hJN?V73pRljE z<58Z0d_bpClys2EM#GM- z8Kj$@JH71A5wCT5tP$MS?syT@r0Tp?p5{|rP#SL>#YG@~%t+J>i8tNHxl4<#WOkb{ zOk5&N6lO%GsH+>@)g@j%L^Br@9DIw4ib}Fv?3jMII}~3@O^wloBL9AIMTL~JbKTV2 zFyDOh!hAf{8+3kCf%%Y5hjH^Trtt1WV)~z3N&QB)wJMF1<=bD*Z9_Qcp zcq~D$s;8$H78yy@jQh=>jGZ?#Gjj@In>F>;skly%hnt&#l9EM1OwyJ^$L#iRi#cvy zaPP&Y;0n{WV+|)ADWJ&FC{%@VL|V=FD@%vnbfR( zclYY*%D~Xj-yZ|(SDI~`Ibvk3$P{&PlhfnAC<+W79v)l@ZcH+EosJ*n+J?5av6&*C zM!U0(qZV~nf={154GRksZTInyxraWqRy z%dhDIM60W-JAb~HbH*nmCf0oZ%-fpOZodrU;pH_kMP|M|IXT(BIzM9L=6;{Gx3tvx zXLqi&b|jh0c*=9HwO>wNUQI*W5LU#CyelGUtdT; zQ4vp_)-bv8*O8H!g2KYXA!1TeZm29bH$cCCY%E^4!Onl;$B&wg4YNW;=47=}>)H{e zJgMrrX4fsN$-%*J-4?fa5x0H6;Y^XVl(e*3_{}+T`}*%C8xvFL @Z{QO5g8QIx1 zYkPah!=ocjRaKJ9{cil91M&1JQhC4atc0`>b@pcE*0T-vY&0}}BxGc@Law`<`uh5$ z1O%hIZkx-~b(Y)U<-xI_+N5g+Zjw?`@_1-u#Kzg@=$SE?B1Q+8>v=to>BvS28n4tAV(7UZ4@050F)=X#ljcpY zjE#*UQE%_o?B``=WoKEQ#~WxwL`2D{shgjl{&C;>@dWbA$augXgVApvH?#^)Q{T=E zVrDL;4KDd7)x~{HHu|(x6jUNuz-{%vE`JTeZ$M*x&7(y8O)DrGv2_uSpx z-LB5Kcq#90Zf%`M8ft56o0ytPl&fL5IjB&Gc<_?4Y53LDaIdVd8}~+#2zt9X(Puve zhi0nTm4k(qRY_6NZ*?f?&UEaWvkOdGS{f4uGx|}cIWRaVrmOpan}>&xm^dgTB!pcX z@tBN^3^lK%r6uOakHriPX-S`GVfy;|PEAig-(r^&N8A~1uwOD9zdBr9_UR!BSUn@>5IFsHmtWr@6v=L_~(~-i0i6hjw>& zW4O4u@Y^kReBXV)Viy&DIcWw?b%lOA9yK*J7tl=6Wp#|6Yf4#!&^H1)KAd6sUw?LH zu5_!{DuK9!>*^uCJ=x17TuM(*r#VbHyAv408+2Rpzr<3>>`_DoJYSys8G6w3ki*=_ zSfr#(7?VlO?q!3lsim12!IhY$dfZDh@IZDK?Dshn+&#S+!Qq1vxKzyB6g6bJ-?21$ z={(Gcae_y_cVP0nvg4DG;43M15Rk6Xy9ne{G!@2Y(@V1-+^Ck;Jz#s4`3xtzN7$#V zv)VWb4N_IbKUlb#CupSmMine&^zEBZUm(`&hrQ1@T#l-SHq z%DZ|a5i{O3n(XU#S8g-D#PPy#@CSZ}6>h-`Mo{Z7930k;9*2FFKgQz2j!SU9Utdou zXzlDAYhYpmHC`bWELBxczRueN4>&%$SP-Ev-kJW!ye2lQDpkR z_U_+3l$cT+Gk27LjvzRMz@PblZ}0!xf9ZWh$Hf(omOXi+C*sl4x8mS9wiWkULfS#Q+mD6u3=RU2cu>`dQ^S+4Rpv4CDzz}3pN zZh_;MoR+q{ztpYBlCa2+$DM*ZGBOet69Y4j+8Y`kzH9lT%s(rOnvIQ(({54J>uC5{ zxecPC0&lP72#--AJ#2b<8t*bDI{L-U_1~Fv8zkrfhSt{Qjv`M@N2ty&F2wW3Am~$R zDHs!)si`SSc?=B=i_6PzLF41&G<0<6e=kk~3kn#3*x=ycIQ{ViO@f@~9WHp{;_hzD z@v#%s@!9-)TtY(d&sx*KWqvnzcQiA1k3!`VPVWmRW?~!-ZEfSVuPMwN9KN5bcldg| zsB%jB`ptrF1GTW#rG^0jB7n#OWQ8W@-YHU)@rgscl+#MIf|<%Gs_Q1pd%tO@+W9O$(5BHcW&Pv^|U%6q@rRg={M6G7?qTkMl{a@ z9sN08^2Yhc&n9P9xUQbw2vn7uOXqVPLBg6`Tgwv}9ZfRsD%}@Ly|7uU_V(@DD{gA< zV?xiJy2)fvzL$SyY|sAy9)tOqrneNy-IgO_%C@6$9 zHw%Fd)L~BrmQzthCBHUGJZI4tY!(a}pPW3h_WZN$A0Cd~)!lvTbT0l!g}I*hiK@?a zi~Erx=#KI9(p^YotZlpZCEtpJfR3)N_VIs%g0G_(ds1Fg6D7iSVJ*qg-hNCI+1vYK z@8ZrsL1DZWOvrZ2%&Iw!jGLFL{{Wtpm`L~N5vJv2#S5^NpS7OUThGAiw4M|rr=~P; z@AKi>w*Td0VPO%h+xufyr-cGifC-I_jZ?Lz_;BRlAU0(*?3wMnRkhx~sKIV;zLnHJ z9WY3{j&TF!>iRkgq9K|ObvJ+P{)ZvzTUvyD<|8+QabLXw3=6<`<7X|Cp8G0^iHV8u z#G6_e3>Fp}+drBkv9z^yCqb@2eF5n}4?($kc}f}@VHj9=G_0u+UXh5H8wVk#=c zg)dXO7HEZ>HV8uQ-VZrg?(YVV*VNS9KRLMtQSsYBfv~#);4lG}BxTnL1E}zOwlGV` zl^sZ1Ft{n*^XCtlUS|d+B#=NfEG#&H-9oCXxqMH{8hd&qlT%U*&-R!0_xDj;iATjx zocK^? zO?EdeZRPy@pr5*zJx4p2{-4$m^xRLy#U#y`-(Z7tx6N9ZZfb^xckYrU;S8)EH>yfW zNu^O&M2K-qQ(|FZVPauL>V`Zjo&c_oN6Njida6JsASsEgrM0z}J&-Ad34Or!{d?|e zH+%G}E7il$Ar207sO{z&raL1;05D{Cp;FAlgB|YutA~WJl(sx) zROTxRSA@@>$EgkN_mZXjB9+w29+i3NaQNa{*0ztFU5`yvR<>Y3HNFr~hO&;1KdU-U z&V!f zc}b9++bT&QpFRMh$B&b;C%)wc7=4&k$Iz2$-|N4W z8k#9^fKk$cGRk`(5C|K3OUD0X7qZrkTUCpTi))02*4Jri=H}+s!*nYJRW@@? zYBRr6|AAE53fR$FZN6Z6(B!>%A~ubGhyp=K-3=+s@yH`?`9{-L4LNw)1GM$zE} z8TV4Br?to_DP5%0b3OK2Ppb?%(Rq1!7gq*9oNejf;Hays^9u<@>S`5P&Z^VR@`Szv zu4!Ok0D`FCK2$vKzILPwID!lWhl7Jdr`hGMfPg?)RFtHJ1q%Qr&|*MyCL|#61LxRp znI8aV%z!k@DD^($4kkAV#=-_iiuPrvuQNF(5wM`Kb5r?^(??kpOygc6L5n zhu?%du8-st7Q&uCe-1E6I`*N6;H=B?C7qDaebAbMfZhRr7zBuPQ-m=g;XmQ9rltmh zY+DXsz?MRej*gvsc|`|bbATP}1PqZgW`>gT40oWReL#&l-S!OzOt{a^&(R>zBS97r zezG;0XS>jL_IJ-0S$VYQdvkwlvN9AP2AD;){j!wT`D&7&Z3_qLV zv~bBep=UO;qEb?@U%!6Qd=P2GoNutFN3}fA;E#WQ$6D|{eZa2YhHGnU+gk6vJ;h}; zRfUED!v$g^UF~)5&;y`Rgb}1D5@1~k$jGojp@2)RW*Z1WaCXIg(Gr`fmNf5xhlA6# zRoOm*&)2S$f?L`8hm!GiW)vXW4EN5?PI6u|0#HZ$BSL%GH8uB6_ZHUI$%u&!IsB+y^w%$=*(PWCy}zE6plJL2&@c?FtfJsoOZdf=mC~Sje;pnMAsoJ|tLw_z z8qTL$d;PSwPoF+P(8GrhleypGs8#AkgLK7sIQ8kqT=O$Xv_N@jw$V|e%}e0oWD5(# zdCUoNZl0c7tvekZq799WojpC6w6wHUH8ouT(@!WPK}qT~I@|&{B9-;rJ6n;t%5F(q zr@>Ba-TT|v<%Xuym#43^QHJ~2b-_Cn#4;da`vt-R$PZPOY{us1gEv+tCYXzZw%1Zc z3K`ylJm6({QQEx>7GR>GbMG9gddhP3j zQS~pCR<;EM2fv7P&MXXBlO7xyRm!+9h@xd=gw4;-H~9P&RLFXM7o<0Bz97eHcHKL) zRm+*N!BzkM8`LGnhTBVkK_F}b1HO@OY-k{d4BozFu#(RD=IBY6os)wW#RamouF+9~ z$x3}`2Zx$PA22bn(RYC_W7Dj`1WW31g3`Iu1>g4J-)jKOIh{9EsD#}JEb1t6g3$Ici6eyADd-ygVN8dD=#x%%FgA{#F)+T{?0%wkbH+Eu&NuK zY)+u;r>{qWBJ<+TPV{ivv%KtV2uLNr{V&XsEO_N>wHLd(AUBQ`{J8-uun1Q*zbYnS?u<=O~5 zH8r&-Bjg+Yul|K8ib?Y#^!Z@B`K#sK-Z|y}`}>3c{%Qght5_WErc_q$9hC(V$Xe_y zeJ6d5Ihs|#u=1?@ujVvq4sFoq*b4K1WGvhe%~hH~P)pA>b&;})>as$~J@6$AB>O@^ KvO?S-;6DJi?s_u- literal 0 HcmV?d00001 diff --git a/structfranka_1_1Record-members.html b/structfranka_1_1Record-members.html new file mode 100644 index 00000000..37d822b8 --- /dev/null +++ b/structfranka_1_1Record-members.html @@ -0,0 +1,92 @@ + + + + + + + +Project: Member List + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    franka::Record Member List
    +
    +
    + +

    This is the complete list of members for franka::Record, including all inherited members.

    + + + +
    commandfranka::Record
    statefranka::Record
    + + + + diff --git a/structfranka_1_1Record.html b/structfranka_1_1Record.html new file mode 100644 index 00000000..9f8808bd --- /dev/null +++ b/structfranka_1_1Record.html @@ -0,0 +1,131 @@ + + + + + + + +Project: franka::Record Struct Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    franka::Record Struct Reference
    +
    +
    + +

    One row of the log contains a robot command of timestamp n and a corresponding robot state of timestamp n+1. + More...

    + +

    #include <log.h>

    +
    +Collaboration diagram for franka::Record:
    +
    +
    Collaboration graph
    + + + + + + + + + + + + + +
    [legend]
    + + + + + + + + +

    +Public Attributes

    +RobotState state
     Robot state of timestamp n+1.
     
    +RobotCommand command
     Robot command of timestamp n, after rate limiting (if activated).
     
    +

    Detailed Description

    +

    One row of the log contains a robot command of timestamp n and a corresponding robot state of timestamp n+1.

    +

    Provided by the ControlException.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structfranka_1_1Record__coll__graph.map b/structfranka_1_1Record__coll__graph.map new file mode 100644 index 00000000..347dfd9a --- /dev/null +++ b/structfranka_1_1Record__coll__graph.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/structfranka_1_1Record__coll__graph.md5 b/structfranka_1_1Record__coll__graph.md5 new file mode 100644 index 00000000..1cc4d372 --- /dev/null +++ b/structfranka_1_1Record__coll__graph.md5 @@ -0,0 +1 @@ +8ba0cd54bd97ddfaaafb627adcb3ed04 \ No newline at end of file diff --git a/structfranka_1_1Record__coll__graph.png b/structfranka_1_1Record__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ed91de2a7cffc0c7777a5f1604bff71068766e77 GIT binary patch literal 47102 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 Lpk|(ix&QwFsyJ`Y literal 0 HcmV?d00001 diff --git a/structfranka_1_1RobotCommand-members.html b/structfranka_1_1RobotCommand-members.html new file mode 100644 index 00000000..bec0016d --- /dev/null +++ b/structfranka_1_1RobotCommand-members.html @@ -0,0 +1,95 @@ + + + + + + + +Project: Member List + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    franka::RobotCommand Member List
    +
    + + + + + diff --git a/structfranka_1_1RobotCommand.html b/structfranka_1_1RobotCommand.html new file mode 100644 index 00000000..bc17ac87 --- /dev/null +++ b/structfranka_1_1RobotCommand.html @@ -0,0 +1,139 @@ + + + + + + + +Project: franka::RobotCommand Struct Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    franka::RobotCommand Struct Reference
    +
    +
    + +

    Command sent to the robot. + More...

    + +

    #include <log.h>

    +
    +Collaboration diagram for franka::RobotCommand:
    +
    +
    Collaboration graph
    + + + + + + + + + +
    [legend]
    + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +JointPositions joint_positions {0, 0, 0, 0, 0, 0, 0}
     \(q_d\) sent to the robot.
     
    +JointVelocities joint_velocities {0, 0, 0, 0, 0, 0, 0}
     \(\dot{q}_d\) sent to the robot.
     
    +CartesianPose cartesian_pose {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}
     \(^O{\mathbf{T}_{EE}}_{d}\) sent to the robot.
     
    +CartesianVelocities cartesian_velocities {0, 0, 0, 0, 0, 0}
     \(^O\dot{P}_{EE}\) sent to the robot.
     
    +Torques torques {0, 0, 0, 0, 0, 0, 0}
     \({\tau_J}_d\) sent to the robot.
     
    +

    Detailed Description

    +

    Command sent to the robot.

    +

    Structure used only for logging purposes.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structfranka_1_1RobotCommand__coll__graph.map b/structfranka_1_1RobotCommand__coll__graph.map new file mode 100644 index 00000000..619a4dd1 --- /dev/null +++ b/structfranka_1_1RobotCommand__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/structfranka_1_1RobotCommand__coll__graph.md5 b/structfranka_1_1RobotCommand__coll__graph.md5 new file mode 100644 index 00000000..dd237dcb --- /dev/null +++ b/structfranka_1_1RobotCommand__coll__graph.md5 @@ -0,0 +1 @@ +741793d1fa663b96ac22d465c4c7e858 \ No newline at end of file diff --git a/structfranka_1_1RobotCommand__coll__graph.png b/structfranka_1_1RobotCommand__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..bd078d0f0b5d9b0e0e63d87a7a500397c1cfaa0c GIT binary patch literal 26922 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 literal 0 HcmV?d00001 diff --git a/structfranka_1_1RobotState-members.html b/structfranka_1_1RobotState-members.html new file mode 100644 index 00000000..5c442287 --- /dev/null +++ b/structfranka_1_1RobotState-members.html @@ -0,0 +1,137 @@ + + + + + + + +Project: Member List + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    franka::RobotState Member List
    +
    + + + + + diff --git a/structfranka_1_1RobotState.html b/structfranka_1_1RobotState.html new file mode 100644 index 00000000..deae054c --- /dev/null +++ b/structfranka_1_1RobotState.html @@ -0,0 +1,939 @@ + + + + + + + +Project: franka::RobotState Struct Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    franka::RobotState Struct Reference
    +
    +
    + +

    Describes the robot state. + More...

    + +

    #include <robot_state.h>

    +
    +Collaboration diagram for franka::RobotState:
    +
    +
    Collaboration graph
    + + + + + +
    [legend]
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    std::array< double, 16 > O_T_EE {}
     \(^{O}T_{EE}\) Measured end effector pose in base frame. More...
     
    std::array< double, 16 > O_T_EE_d {}
     \({^OT_{EE}}_{d}\) Last desired end effector pose of motion generation in base frame. More...
     
    std::array< double, 16 > F_T_EE {}
     \(^{F}T_{EE}\) End effector frame pose in flange frame. More...
     
    std::array< double, 16 > F_T_NE {}
     \(^{F}T_{NE}\) Nominal end effector frame pose in flange frame. More...
     
    std::array< double, 16 > NE_T_EE {}
     \(^{NE}T_{EE}\) End effector frame pose in nominal end effector frame. More...
     
    std::array< double, 16 > EE_T_K {}
     \(^{EE}T_{K}\) Stiffness frame pose in end effector frame. More...
     
    +double m_ee {}
     \(m_{EE}\) Configured mass of the end effector.
     
    +std::array< double, 9 > I_ee {}
     \(I_{EE}\) Configured rotational inertia matrix of the end effector load with respect to center of mass.
     
    +std::array< double, 3 > F_x_Cee {}
     \(^{F}x_{C_{EE}}\) Configured center of mass of the end effector load with respect to flange frame.
     
    +double m_load {}
     \(m_{load}\) Configured mass of the external load.
     
    +std::array< double, 9 > I_load {}
     \(I_{load}\) Configured rotational inertia matrix of the external load with respect to center of mass.
     
    +std::array< double, 3 > F_x_Cload {}
     \(^{F}x_{C_{load}}\) Configured center of mass of the external load with respect to flange frame.
     
    +double m_total {}
     \(m_{total}\) Sum of the mass of the end effector and the external load.
     
    +std::array< double, 9 > I_total {}
     \(I_{total}\) Combined rotational inertia matrix of the end effector load and the external load with respect to the center of mass.
     
    +std::array< double, 3 > F_x_Ctotal {}
     \(^{F}x_{C_{total}}\) Combined center of mass of the end effector load and the external load with respect to flange frame.
     
    std::array< double, 2 > elbow {}
     Elbow configuration. More...
     
    std::array< double, 2 > elbow_d {}
     Desired elbow configuration. More...
     
    std::array< double, 2 > elbow_c {}
     Commanded elbow configuration. More...
     
    std::array< double, 2 > delbow_c {}
     Commanded elbow velocity. More...
     
    std::array< double, 2 > ddelbow_c {}
     Commanded elbow acceleration. More...
     
    std::array< double, 7 > tau_J {}
     \(\tau_{J}\) Measured link-side joint torque sensor signals. More...
     
    std::array< double, 7 > tau_J_d {}
     \({\tau_J}_d\) Desired link-side joint torque sensor signals without gravity. More...
     
    std::array< double, 7 > dtau_J {}
     \(\dot{\tau_{J}}\) Derivative of measured link-side joint torque sensor signals. More...
     
    std::array< double, 7 > q {}
     \(q\) Measured joint position. More...
     
    std::array< double, 7 > q_d {}
     \(q_d\) Desired joint position. More...
     
    std::array< double, 7 > dq {}
     \(\dot{q}\) Measured joint velocity. More...
     
    std::array< double, 7 > dq_d {}
     \(\dot{q}_d\) Desired joint velocity. More...
     
    std::array< double, 7 > ddq_d {}
     \(\ddot{q}_d\) Desired joint acceleration. More...
     
    std::array< double, 7 > joint_contact {}
     Indicates which contact level is activated in which joint. More...
     
    std::array< double, 6 > cartesian_contact {}
     Indicates which contact level is activated in which Cartesian dimension \((x,y,z,R,P,Y)\). More...
     
    std::array< double, 7 > joint_collision {}
     Indicates which contact level is activated in which joint. More...
     
    std::array< double, 6 > cartesian_collision {}
     Indicates which contact level is activated in which Cartesian dimension \((x,y,z,R,P,Y)\). More...
     
    std::array< double, 7 > tau_ext_hat_filtered {}
     \(\hat{\tau}_{\text{ext}}\) Low-pass filtered torques generated by external forces on the joints. More...
     
    std::array< double, 6 > O_F_ext_hat_K {}
     \(^OF_{K,\text{ext}}\) Estimated external wrench (force, torque) acting on stiffness frame, expressed relative to the base frame. More...
     
    std::array< double, 6 > K_F_ext_hat_K {}
     \(^{K}F_{K,\text{ext}}\) Estimated external wrench (force, torque) acting on stiffness frame, expressed relative to the stiffness frame. More...
     
    std::array< double, 6 > O_dP_EE_d {}
     \({^OdP_{EE}}_{d}\) Desired end effector twist in base frame. More...
     
    std::array< double, 3 > O_ddP_O {}
     \({^OddP}_O\) Linear component of the acceleration of the robot's base, expressed in frame parallel to the base frame, i.e. More...
     
    std::array< double, 16 > O_T_EE_c {}
     \({^OT_{EE}}_{c}\) Last commanded end effector pose of motion generation in base frame. More...
     
    std::array< double, 6 > O_dP_EE_c {}
     \({^OdP_{EE}}_{c}\) Last commanded end effector twist in base frame. More...
     
    std::array< double, 6 > O_ddP_EE_c {}
     \({^OddP_{EE}}_{c}\) Last commanded end effector acceleration in base frame. More...
     
    std::array< double, 7 > theta {}
     \(\theta\) Motor position. More...
     
    std::array< double, 7 > dtheta {}
     \(\dot{\theta}\) Motor velocity. More...
     
    +Errors current_errors {}
     Current error state.
     
    +Errors last_motion_errors {}
     Contains the errors that aborted the previous motion.
     
    double control_command_success_rate {}
     Percentage of the last 100 control commands that were successfully received by the robot. More...
     
    +RobotMode robot_mode = RobotMode::kUserStopped
     Current robot mode.
     
    Duration time {}
     Strictly monotonically increasing timestamp since robot start. More...
     
    +

    Detailed Description

    +

    Member Data Documentation

    + +

    ◆ cartesian_collision

    + +
    +
    + + + + +
    std::array<double, 6> franka::RobotState::cartesian_collision {}
    +
    + +

    Indicates which contact level is activated in which Cartesian dimension \((x,y,z,R,P,Y)\).

    +

    After contact disappears, the value stays the same until a reset command is sent.

    +
    See also
    Robot::setCollisionBehavior for setting sensitivity values.
    +
    +Robot::automaticErrorRecovery for performing a reset after a collision.
    + +
    +
    + +

    ◆ cartesian_contact

    + +
    +
    + + + + +
    std::array<double, 6> franka::RobotState::cartesian_contact {}
    +
    + +

    Indicates which contact level is activated in which Cartesian dimension \((x,y,z,R,P,Y)\).

    +

    After contact disappears, the value turns to zero.

    +
    See also
    Robot::setCollisionBehavior for setting sensitivity values.
    + +
    +
    + +

    ◆ control_command_success_rate

    + +
    +
    + + + + +
    double franka::RobotState::control_command_success_rate {}
    +
    + +

    Percentage of the last 100 control commands that were successfully received by the robot.

    +

    Shows a value of zero if no control or motion generator loop is currently running.

    +

    Range: \([0, 1]\).

    +
    Examples
    communication_test.cpp.
    +
    + +
    +
    + +

    ◆ ddelbow_c

    + +
    +
    + + + + +
    std::array<double, 2> franka::RobotState::ddelbow_c {}
    +
    + +

    Commanded elbow acceleration.

    +

    The values of the array are:

      +
    • ddelbow_c[0] Acceleration of the 3rd joint in \(\frac{rad}{s^2}\)
    • +
    • ddelbow_c[1] is always 0.
    • +
    + +
    +
    + +

    ◆ ddq_d

    + +
    +
    + + + + +
    std::array<double, 7> franka::RobotState::ddq_d {}
    +
    + +

    \(\ddot{q}_d\) Desired joint acceleration.

    +

    Unit: \([\frac{rad}{s^2}]\)

    + +
    +
    + +

    ◆ delbow_c

    + +
    +
    + + + + +
    std::array<double, 2> franka::RobotState::delbow_c {}
    +
    + +

    Commanded elbow velocity.

    +

    The values of the array are:

      +
    • delbow_c[0] Velocity of the 3rd joint in \(\frac{rad}{s}\)
    • +
    • delbow_c[1] is always 0.
    • +
    + +
    +
    + +

    ◆ dq

    + +
    +
    + + + + +
    std::array<double, 7> franka::RobotState::dq {}
    +
    + +

    \(\dot{q}\) Measured joint velocity.

    +

    Unit: \([\frac{rad}{s}]\)

    +
    Examples
    cartesian_impedance_control.cpp, motion_with_control.cpp, and motion_with_control_external_control_loop.cpp.
    +
    + +
    +
    + +

    ◆ dq_d

    + +
    +
    + + + + +
    std::array<double, 7> franka::RobotState::dq_d {}
    +
    + +

    \(\dot{q}_d\) Desired joint velocity.

    +

    Unit: \([\frac{rad}{s}]\)

    + +
    +
    + +

    ◆ dtau_J

    + +
    +
    + + + + +
    std::array<double, 7> franka::RobotState::dtau_J {}
    +
    + +

    \(\dot{\tau_{J}}\) Derivative of measured link-side joint torque sensor signals.

    +

    Unit: \([\frac{Nm}{s}]\)

    + +
    +
    + +

    ◆ dtheta

    + +
    +
    + + + + +
    std::array<double, 7> franka::RobotState::dtheta {}
    +
    + +

    \(\dot{\theta}\) Motor velocity.

    +

    Unit: \([\frac{rad}{s}]\)

    + +
    +
    + +

    ◆ EE_T_K

    + +
    +
    + + + + +
    std::array<double, 16> franka::RobotState::EE_T_K {}
    +
    + +

    \(^{EE}T_{K}\) Stiffness frame pose in end effector frame.

    +

    Pose is represented as a 4x4 matrix in column-major format.

    +

    See also K frame.

    + +
    +
    + +

    ◆ elbow

    + +
    +
    + + + + +
    std::array<double, 2> franka::RobotState::elbow {}
    +
    + +

    Elbow configuration.

    +

    The values of the array are:

      +
    • elbow[0]: Position of the 3rd joint in \([rad]\).
    • +
    • elbow[1]: Flip direction of the elbow (4th joint):
        +
      • +1 if \(q_4 > q_{elbow-flip}\)
      • +
      • 0 if \(q_4 == q_{elbow-flip} \)
      • +
      • -1 if \(q_4 < q_{elbow-flip} \)
      • +
      +
    • +
    +

    with \(q_{elbow-flip}\) as specified in the robot interface specification page in the FCI Documentation.

    +
    Examples
    generate_elbow_motion.cpp.
    +
    + +
    +
    + +

    ◆ elbow_c

    + +
    +
    + + + + +
    std::array<double, 2> franka::RobotState::elbow_c {}
    +
    + +

    Commanded elbow configuration.

    +

    The values of the array are:

      +
    • elbow_c[0]: Position of the 3rd joint in \([rad]\).
    • +
    • elbow_c[1]: Flip direction of the elbow (4th joint):
        +
      • +1 if \(q_4 > q_{elbow-flip}\)
      • +
      • 0 if \(q_4 == q_{elbow-flip} \)
      • +
      • -1 if \(q_4 < q_{elbow-flip} \)
      • +
      +
    • +
    +

    with \(q_{elbow-flip}\) as specified in the robot interface specification page in the FCI Documentation.

    + +
    +
    + +

    ◆ elbow_d

    + +
    +
    + + + + +
    std::array<double, 2> franka::RobotState::elbow_d {}
    +
    + +

    Desired elbow configuration.

    +

    The values of the array are:

      +
    • elbow_d[0]: Position of the 3rd joint in \([rad]\).
    • +
    • elbow_d[1]: Flip direction of the elbow (4th joint):
        +
      • +1 if \(q_4 > q_{elbow-flip}\)
      • +
      • 0 if \(q_4 == q_{elbow-flip} \)
      • +
      • -1 if \(q_4 < q_{elbow-flip} \)
      • +
      +
    • +
    +

    with \(q_{elbow-flip}\) as specified in the robot interface specification page in the FCI Documentation.

    + +
    +
    + +

    ◆ F_T_EE

    + +
    +
    + + + + +
    std::array<double, 16> franka::RobotState::F_T_EE {}
    +
    + +

    \(^{F}T_{EE}\) End effector frame pose in flange frame.

    +

    Pose is represented as a 4x4 matrix in column-major format.

    +
    See also
    F_T_NE
    +
    +NE_T_EE
    +
    +Robot for an explanation of the F, NE and EE frames.
    + +
    +
    + +

    ◆ F_T_NE

    + +
    +
    + + + + +
    std::array<double, 16> franka::RobotState::F_T_NE {}
    +
    + +

    \(^{F}T_{NE}\) Nominal end effector frame pose in flange frame.

    +

    Pose is represented as a 4x4 matrix in column-major format.

    +
    See also
    F_T_EE
    +
    +NE_T_EE
    +
    +Robot for an explanation of the F, NE and EE frames.
    + +
    +
    + +

    ◆ joint_collision

    + +
    +
    + + + + +
    std::array<double, 7> franka::RobotState::joint_collision {}
    +
    + +

    Indicates which contact level is activated in which joint.

    +

    After contact disappears, the value stays the same until a reset command is sent.

    +
    See also
    Robot::setCollisionBehavior for setting sensitivity values.
    +
    +Robot::automaticErrorRecovery for performing a reset after a collision.
    + +
    +
    + +

    ◆ joint_contact

    + +
    +
    + + + + +
    std::array<double, 7> franka::RobotState::joint_contact {}
    +
    + +

    Indicates which contact level is activated in which joint.

    +

    After contact disappears, value turns to zero.

    +
    See also
    Robot::setCollisionBehavior for setting sensitivity values.
    + +
    +
    + +

    ◆ K_F_ext_hat_K

    + +
    +
    + + + + +
    std::array<double, 6> franka::RobotState::K_F_ext_hat_K {}
    +
    + +

    \(^{K}F_{K,\text{ext}}\) Estimated external wrench (force, torque) acting on stiffness frame, expressed relative to the stiffness frame.

    +

    Forces applied by the robot to the environment are positive, while forces applied by the environment on the robot are negative. Becomes \([0,0,0,0,0,0]\) when near or in a singularity. See also Stiffness frame K. Unit: \([N,N,N,Nm,Nm,Nm]\).

    + +
    +
    + +

    ◆ NE_T_EE

    + +
    +
    + + + + +
    std::array<double, 16> franka::RobotState::NE_T_EE {}
    +
    + +

    \(^{NE}T_{EE}\) End effector frame pose in nominal end effector frame.

    +

    Pose is represented as a 4x4 matrix in column-major format.

    +
    See also
    Robot::setEE to change this frame.
    +
    +F_T_EE
    +
    +F_T_NE
    +
    +Robot for an explanation of the F, NE and EE frames.
    + +
    +
    + +

    ◆ O_ddP_EE_c

    + +
    +
    + + + + +
    std::array<double, 6> franka::RobotState::O_ddP_EE_c {}
    +
    + +

    \({^OddP_{EE}}_{c}\) Last commanded end effector acceleration in base frame.

    +

    Unit: \([\frac{m}{s^2},\frac{m}{s^2},\frac{m}{s^2},\frac{rad}{s^2},\frac{rad}{s^2},\frac{rad}{s^2}]\).

    + +
    +
    + +

    ◆ O_ddP_O

    + +
    +
    + + + + +
    std::array<double, 3> franka::RobotState::O_ddP_O {}
    +
    + +

    \({^OddP}_O\) Linear component of the acceleration of the robot's base, expressed in frame parallel to the base frame, i.e.

    +

    the base's translational acceleration. If the base is resting this shows the direction of the gravity vector. It is harcoded for now to {0, 0, -9.81}.

    + +
    +
    + +

    ◆ O_dP_EE_c

    + +
    +
    + + + + +
    std::array<double, 6> franka::RobotState::O_dP_EE_c {}
    +
    + +

    \({^OdP_{EE}}_{c}\) Last commanded end effector twist in base frame.

    +

    Unit: \([\frac{m}{s},\frac{m}{s},\frac{m}{s},\frac{rad}{s},\frac{rad}{s},\frac{rad}{s}]\).

    + +
    +
    + +

    ◆ O_dP_EE_d

    + +
    +
    + + + + +
    std::array<double, 6> franka::RobotState::O_dP_EE_d {}
    +
    + +

    \({^OdP_{EE}}_{d}\) Desired end effector twist in base frame.

    +

    Unit: \([\frac{m}{s},\frac{m}{s},\frac{m}{s},\frac{rad}{s},\frac{rad}{s},\frac{rad}{s}]\).

    + +
    +
    + +

    ◆ O_F_ext_hat_K

    + +
    +
    + + + + +
    std::array<double, 6> franka::RobotState::O_F_ext_hat_K {}
    +
    + +

    \(^OF_{K,\text{ext}}\) Estimated external wrench (force, torque) acting on stiffness frame, expressed relative to the base frame.

    +

    Forces applied by the robot to the environment are positive, while forces applied by the environment on the robot are negative. Becomes \([0,0,0,0,0,0]\) when near or in a singularity. See also Stiffness frame K. Unit: \([N,N,N,Nm,Nm,Nm]\).

    + +
    +
    + +

    ◆ O_T_EE

    + +
    +
    + + + + +
    std::array<double, 16> franka::RobotState::O_T_EE {}
    +
    + +

    \(^{O}T_{EE}\) Measured end effector pose in base frame.

    +

    Pose is represented as a 4x4 matrix in column-major format.

    +
    Examples
    cartesian_impedance_control.cpp, generate_cartesian_pose_motion.cpp, and generate_elbow_motion.cpp.
    +
    + +
    +
    + +

    ◆ O_T_EE_c

    + +
    +
    + + + + +
    std::array<double, 16> franka::RobotState::O_T_EE_c {}
    +
    + +

    \({^OT_{EE}}_{c}\) Last commanded end effector pose of motion generation in base frame.

    +

    Pose is represented as a 4x4 matrix in column-major format.

    + +
    +
    + +

    ◆ O_T_EE_d

    + +
    +
    + + + + +
    std::array<double, 16> franka::RobotState::O_T_EE_d {}
    +
    + +

    \({^OT_{EE}}_{d}\) Last desired end effector pose of motion generation in base frame.

    +

    Pose is represented as a 4x4 matrix in column-major format.

    + +
    +
    + +

    ◆ q

    + +
    +
    + + + + +
    std::array<double, 7> franka::RobotState::q {}
    +
    +
    + +

    ◆ q_d

    + +
    +
    + + + + +
    std::array<double, 7> franka::RobotState::q_d {}
    +
    + +

    \(q_d\) Desired joint position.

    +

    Unit: \([rad]\)

    +
    Examples
    motion_with_control.cpp, and motion_with_control_external_control_loop.cpp.
    +
    + +
    +
    + +

    ◆ tau_ext_hat_filtered

    + +
    +
    + + + + +
    std::array<double, 7> franka::RobotState::tau_ext_hat_filtered {}
    +
    + +

    \(\hat{\tau}_{\text{ext}}\) Low-pass filtered torques generated by external forces on the joints.

    +

    It does not include configured end-effector and load nor the mass and dynamics of the robot. tau_ext_hat_filtered is the error between tau_J and the expected torques given by the robot model. Unit: \([Nm]\).

    + +
    +
    + +

    ◆ tau_J

    + +
    +
    + + + + +
    std::array<double, 7> franka::RobotState::tau_J {}
    +
    + +

    \(\tau_{J}\) Measured link-side joint torque sensor signals.

    +

    Unit: \([Nm]\)

    +
    Examples
    force_control.cpp.
    +
    + +
    +
    + +

    ◆ tau_J_d

    + +
    +
    + + + + +
    std::array<double, 7> franka::RobotState::tau_J_d {}
    +
    + +

    \({\tau_J}_d\) Desired link-side joint torque sensor signals without gravity.

    +

    Unit: \([Nm]\)

    + +
    +
    + +

    ◆ theta

    + +
    +
    + + + + +
    std::array<double, 7> franka::RobotState::theta {}
    +
    + +

    \(\theta\) Motor position.

    +

    Unit: \([rad]\)

    + +
    +
    + +

    ◆ time

    + +
    +
    + + + + +
    Duration franka::RobotState::time {}
    +
    + +

    Strictly monotonically increasing timestamp since robot start.

    +

    Inside of control loops time_step parameter of Robot::control can be used instead.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structfranka_1_1RobotState__coll__graph.map b/structfranka_1_1RobotState__coll__graph.map new file mode 100644 index 00000000..8f9d0c51 --- /dev/null +++ b/structfranka_1_1RobotState__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structfranka_1_1RobotState__coll__graph.md5 b/structfranka_1_1RobotState__coll__graph.md5 new file mode 100644 index 00000000..974a4cf7 --- /dev/null +++ b/structfranka_1_1RobotState__coll__graph.md5 @@ -0,0 +1 @@ +559ffee771d54faefa00178ada80a094 \ No newline at end of file diff --git a/structfranka_1_1RobotState__coll__graph.png b/structfranka_1_1RobotState__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..bf3ef3547c687529983502c22ed476c93f068a24 GIT binary patch literal 7168 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 + + + + + + +Project: Member List + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    franka::VacuumGripperState Member List
    +
    + + + + + diff --git a/structfranka_1_1VacuumGripperState.html b/structfranka_1_1VacuumGripperState.html new file mode 100644 index 00000000..e06054e0 --- /dev/null +++ b/structfranka_1_1VacuumGripperState.html @@ -0,0 +1,193 @@ + + + + + + + +Project: franka::VacuumGripperState Struct Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    franka::VacuumGripperState Struct Reference
    +
    +
    + +

    Describes the vacuum gripper state. + More...

    + +

    #include <vacuum_gripper_state.h>

    +
    +Collaboration diagram for franka::VacuumGripperState:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +bool in_control_range {}
     Vacuum value within in setpoint area.
     
    +bool part_detached {}
     The part has been detached after a suction cycle.
     
    bool part_present {}
     Vacuum is over H2 and not yet under H2-h2. More...
     
    +VacuumGripperDeviceStatus device_status {}
     Current vacuum gripper device status.
     
    uint16_t actual_power {}
     Current vacuum gripper actual power. More...
     
    uint16_t vacuum {}
     Current system vacuum. More...
     
    +Duration time {}
     Strictly monotonically increasing timestamp since robot start.
     
    +

    Detailed Description

    +

    Describes the vacuum gripper state.

    +

    For more information check the cobot-pump manual.

    +
    Examples
    vacuum_object.cpp.
    +
    +

    Member Data Documentation

    + +

    ◆ actual_power

    + +
    +
    + + + + +
    uint16_t franka::VacuumGripperState::actual_power {}
    +
    + +

    Current vacuum gripper actual power.

    +

    Unit: \([%]\).

    + +
    +
    + +

    ◆ part_present

    + +
    +
    + + + + +
    bool franka::VacuumGripperState::part_present {}
    +
    + +

    Vacuum is over H2 and not yet under H2-h2.

    +

    For more information check the cobot-pump manual.

    + +
    +
    + +

    ◆ vacuum

    + +
    +
    + + + + +
    uint16_t franka::VacuumGripperState::vacuum {}
    +
    + +

    Current system vacuum.

    +

    Unit: \([mbar]\).

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structfranka_1_1VacuumGripperState__coll__graph.map b/structfranka_1_1VacuumGripperState__coll__graph.map new file mode 100644 index 00000000..9dba4cc0 --- /dev/null +++ b/structfranka_1_1VacuumGripperState__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structfranka_1_1VacuumGripperState__coll__graph.md5 b/structfranka_1_1VacuumGripperState__coll__graph.md5 new file mode 100644 index 00000000..9d8aff1c --- /dev/null +++ b/structfranka_1_1VacuumGripperState__coll__graph.md5 @@ -0,0 +1 @@ +7a1edd2fcd8c4eb577e9fd99d5db2f07 \ No newline at end of file diff --git a/structfranka_1_1VacuumGripperState__coll__graph.png b/structfranka_1_1VacuumGripperState__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..819f8dcc2d3e3ec9387d5883e8bdae469e8356fb GIT binary patch literal 4946 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 Pk`X8?sVNr88^8M(3)Sa9 literal 0 HcmV?d00001 diff --git a/sync_off.png b/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/tab_b.png b/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/tabs.css b/tabs.css new file mode 100644 index 00000000..7d45d36c --- /dev/null +++ b/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} diff --git a/vacuum__gripper_8h.html b/vacuum__gripper_8h.html new file mode 100644 index 00000000..6e827356 --- /dev/null +++ b/vacuum__gripper_8h.html @@ -0,0 +1,124 @@ + + + + + + + +Project: include/franka/vacuum_gripper.h File Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    vacuum_gripper.h File Reference
    +
    +
    + +

    Contains the franka::VacuumGripper type. +More...

    +
    #include <chrono>
    +#include <cstdint>
    +#include <memory>
    +#include <string>
    +#include <franka/vacuum_gripper_state.h>
    +
    +Include dependency graph for vacuum_gripper.h:
    +
    +
    + + + + + + + + + + + +
    +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    class  franka::VacuumGripper
     Maintains a network connection to the vacuum gripper, provides the current vacuum gripper state, and allows the execution of commands. More...
     
    +

    Detailed Description

    +

    Contains the franka::VacuumGripper type.

    +
    + + + + diff --git a/vacuum__gripper_8h__incl.map b/vacuum__gripper_8h__incl.map new file mode 100644 index 00000000..75515a93 --- /dev/null +++ b/vacuum__gripper_8h__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/vacuum__gripper_8h__incl.md5 b/vacuum__gripper_8h__incl.md5 new file mode 100644 index 00000000..f650075e --- /dev/null +++ b/vacuum__gripper_8h__incl.md5 @@ -0,0 +1 @@ +16de7b04545bf404fbfa68245069dcca \ No newline at end of file diff --git a/vacuum__gripper_8h__incl.png b/vacuum__gripper_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..467c2c706b592c999bec4e19ef05117e563c27a0 GIT binary patch literal 30772 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 + + + + + + +Project: include/franka/vacuum_gripper.h Source File + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    vacuum_gripper.h
    +
    +
    +Go to the documentation of this file.
    1 // Copyright (c) 2023 Franka Robotics GmbH
    +
    2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
    +
    3 #pragma once
    +
    4 
    +
    5 #include <chrono>
    +
    6 #include <cstdint>
    +
    7 #include <memory>
    +
    8 #include <string>
    +
    9 
    + +
    11 
    +
    17 namespace franka {
    +
    18 
    +
    19 class Network;
    +
    20 
    + +
    29  public:
    +
    33  using ServerVersion = uint16_t;
    +
    34 
    +
    38  enum class ProductionSetupProfile { kP0, kP1, kP2, kP3 };
    +
    39 
    +
    48  explicit VacuumGripper(const std::string& franka_address);
    +
    49 
    +
    55  VacuumGripper(VacuumGripper&& vacuum_gripper) noexcept;
    +
    56 
    +
    64  VacuumGripper& operator=(VacuumGripper&& vacuum_gripper) noexcept;
    +
    65 
    +
    69  ~VacuumGripper() noexcept;
    +
    70 
    +
    83  bool vacuum(uint8_t vacuum,
    +
    84  std::chrono::milliseconds timeout,
    +
    85  ProductionSetupProfile profile = ProductionSetupProfile::kP0) const;
    +
    86 
    +
    97  bool dropOff(std::chrono::milliseconds timeout) const;
    +
    98 
    +
    107  bool stop() const;
    +
    108 
    + +
    118 
    +
    124  ServerVersion serverVersion() const noexcept;
    +
    125 
    +
    127  VacuumGripper(const VacuumGripper&) = delete;
    +
    128  VacuumGripper& operator=(const VacuumGripper&) = delete;
    +
    130 
    +
    131  private:
    +
    132  std::unique_ptr<Network> network_;
    +
    133 
    +
    134  uint16_t ri_version_;
    +
    135 };
    +
    136 
    +
    137 } // namespace franka
    +
    Maintains a network connection to the vacuum gripper, provides the current vacuum gripper state,...
    Definition: vacuum_gripper.h:28
    +
    bool dropOff(std::chrono::milliseconds timeout) const
    Drops the grasped object off.
    +
    ProductionSetupProfile
    Vacuum production setup profile.
    Definition: vacuum_gripper.h:38
    +
    ServerVersion serverVersion() const noexcept
    Returns the software version reported by the connected server.
    +
    VacuumGripper & operator=(VacuumGripper &&vacuum_gripper) noexcept
    Move-assigns this VacuumGripper from another VacuumGripper instance.
    +
    bool stop() const
    Stops a currently running vacuum gripper vacuum or drop off operation.
    +
    bool vacuum(uint8_t vacuum, std::chrono::milliseconds timeout, ProductionSetupProfile profile=ProductionSetupProfile::kP0) const
    Vacuums an object.
    +
    uint16_t ServerVersion
    Version of the vacuum gripper server.
    Definition: vacuum_gripper.h:33
    +
    VacuumGripperState readOnce() const
    Waits for a vacuum gripper state update and returns it.
    +
    VacuumGripper(const std::string &franka_address)
    Establishes a connection with a vacuum gripper connected to a robot.
    +
    VacuumGripper(VacuumGripper &&vacuum_gripper) noexcept
    Move-constructs a new VacuumGripper instance.
    +
    ~VacuumGripper() noexcept
    Closes the connection.
    +
    Describes the vacuum gripper state.
    Definition: vacuum_gripper_state.h:31
    +
    Contains the franka::VacuumGripperState type.
    +
    + + + + diff --git a/vacuum__gripper__state_8h.html b/vacuum__gripper__state_8h.html new file mode 100644 index 00000000..d2eed96f --- /dev/null +++ b/vacuum__gripper__state_8h.html @@ -0,0 +1,222 @@ + + + + + + + +Project: include/franka/vacuum_gripper_state.h File Reference + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    vacuum_gripper_state.h File Reference
    +
    +
    + +

    Contains the franka::VacuumGripperState type. +More...

    +
    #include <cstdint>
    +#include <ostream>
    +#include <string>
    +#include <franka/duration.h>
    +
    +Include dependency graph for vacuum_gripper_state.h:
    +
    +
    + + + + + + + + + +
    +
    +This graph shows which files directly or indirectly include this file:
    +
    +
    + + + + +
    +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    struct  franka::VacuumGripperState
     Describes the vacuum gripper state. More...
     
    + + + + +

    +Enumerations

    enum class  franka::VacuumGripperDeviceStatus : uint8_t { kGreen +, kYellow +, kOrange +, kRed + }
     Vacuum gripper device status. More...
     
    + + + + +

    +Functions

    std::ostream & franka::operator<< (std::ostream &ostream, const franka::VacuumGripperState &vacuum_gripper_state)
     Streams the vacuum gripper state as JSON object: {"field_name_1": value, "field_name_2": value, ...}. More...
     
    +

    Detailed Description

    +

    Contains the franka::VacuumGripperState type.

    +

    Enumeration Type Documentation

    + +

    ◆ VacuumGripperDeviceStatus

    + +
    +
    + + + + + +
    + + + + +
    enum franka::VacuumGripperDeviceStatus : uint8_t
    +
    +strong
    +
    + +

    Vacuum gripper device status.

    + + + + + +
    Enumerator
    kGreen 

    Device is working optimally.

    +
    kYellow 

    Device is working but there are warnings.

    +
    kOrange 

    Device is working but there are severe warnings.

    +
    kRed 

    Device is not working properly.

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ operator<<()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    std::ostream& franka::operator<< (std::ostream & ostream,
    const franka::VacuumGripperStatevacuum_gripper_state 
    )
    +
    + +

    Streams the vacuum gripper state as JSON object: {"field_name_1": value, "field_name_2": value, ...}.

    +
    Parameters
    + + + +
    [in]ostreamOstream instance
    [in]vacuum_gripper_stateVacuumGripperState struct instance to stream
    +
    +
    +
    Returns
    Ostream instance
    + +
    +
    +
    + + + + diff --git a/vacuum__gripper__state_8h__dep__incl.map b/vacuum__gripper__state_8h__dep__incl.map new file mode 100644 index 00000000..6b7154e2 --- /dev/null +++ b/vacuum__gripper__state_8h__dep__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/vacuum__gripper__state_8h__dep__incl.md5 b/vacuum__gripper__state_8h__dep__incl.md5 new file mode 100644 index 00000000..a4becc4b --- /dev/null +++ b/vacuum__gripper__state_8h__dep__incl.md5 @@ -0,0 +1 @@ +8e5086ecd9bfe0cb2bec5c8975cb5d3d \ No newline at end of file diff --git a/vacuum__gripper__state_8h__dep__incl.png b/vacuum__gripper__state_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..1472cf20099cdc29153a314c0271f5a829a864ee GIT binary patch literal 5306 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 + + + + + + + + diff --git a/vacuum__gripper__state_8h__incl.md5 b/vacuum__gripper__state_8h__incl.md5 new file mode 100644 index 00000000..1c9c2b6d --- /dev/null +++ b/vacuum__gripper__state_8h__incl.md5 @@ -0,0 +1 @@ +3fe9235157066f1570010a22f2cda39e \ No newline at end of file diff --git a/vacuum__gripper__state_8h__incl.png b/vacuum__gripper__state_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..314f1efa479d59c66a4ebfd77d3c8d4b2887f7b0 GIT binary patch literal 16523 zcmZ|11z1*5x9|HRppm&Al(gjzWdwfJZIl~ zuKK8`YrS*LHERBUV;HWaAo&{U4H5(bc`YsV;UfeBqXm9Hgzysl9KI>S1b%sGEGzi| z@(lg{v#lTz0wIG)e-Kf1|8}_Sri!IS_-f4n(-Vs@O!K|wK}0|V{0AlkW7e?ds}*>h zNmq@kYkkf6x&R7X_1SX9lEN^}&IpPKPRl6~vZ2Q(!*y5`D#HZnZlAGv=UKVGV;Mug zMz+S@#}rWWBG`iLzqjV@me{uVQrYOLRGr8Ruj z?^*Ag{KuqT6nr+wTeDw=d?+$q;ao$$HzzRQ+wOc#0dGbgT@^AKn&ji%rDZ}Ml|rdB zE`*blv(jwzjU$h&vhnuczx^%~wyrt}fnRADq)5!rNz+0rTC!vnAxhQ_}0C7*`&+DZMy&`DJd!Ul_Rg;5#g=Roy$_Ihl=r`3O2QnamT5e zp7YLF-%pW1Hj4?ee6d@j>*G~PQ&Xyk$H%Oqq9GSvZ1EvTe}yR;i2&U-;?+*3Uw?^4 z1v(B+@NAjRhpgQKIt)zuu+ z6*FT<1U=WbM^eM0qCT{FURGL6QfO*xzkr;bot+Gj`mJ>Zz8V}F@-Hi6{yUoSii@l6 zcmZ6&sa~oHgN%#}c`qY_)E`9<*xC8s!qSqQnfdi%gT3U34{&d|ZNiLtLXvfag@s91 zR#p&DQ6=o`SQZ-WWBVfU#0(5NE(F2)za%H)sF&-8$Hk#T-WwW{(a5EJv7F8~y1Uq` ztgh}JNo74fTIOfcYsTiWU-=*rTS(K0rs=#M2uGcYjVwEB%eLPDZeuQ78?Zu5++ zBLueJt{`xqpq5{p$&8^k_^u^QD)8NQR;P>yux_WveK0*-*)KRorBIO1h zG2lbG=jQOiznH5uf@RTdgy2R7zb51+O zb$xR)u(egd-P1Egr`>Xz1{)XG`1)wMP^ADhhEzCarbMG>WTfOG*Y{)%Mk0m?k&uw^ zV7}&+00~-odHME2ljkLafS}-Hv#WLGyv^MFJPhQskpcppU;JkgM%Y3B_(8Q%T&Pq1afqAWU7S>I+cht4r^h*3*VZ+YrjLro1{>7j-fSi223VKgDn z)4FYLZti<|`Ld<@;rfiUG=!hL^J*8{BY3qIlP|KevMg5H1wrU2UP}4#L%+%I6+C>` zpFen2RaG}vhlG%ydM%%~S5)SO=p2E;{w`A4X<9h!hbKk&TlR z`_5NQZN`b#P(ngt@0rJD4t=%VM-2K!xNd@`Y<-_`6*@XPgqWDv|4FE*gjAsrAKR-~`ey=tg`xZVBOKP$=l{eSw@wT?EPTZ=+ z_?KR@i+@A}5{Zy^7%=>rg?jD>6z-*zoZ1 z?P1P;dwW^Hzn~w!v9Y0~r1Yi1e%1K$-wYiC!;9DfF$)WeI=?q~*w|mtU&zbL(=jq` zUhe-nxxTKrYF~5Uz1dDRFto9WqLxho_Y|{O3@|pU(yVM~7`Q#(aRg53qzB) z?pa(*K{?`mc>)upRJ#tTzrSCz-TR%cuI>qlO)md_ORssEkERFz`Xv|jh6@P@vjaeI(dU{|-)46)iwnx})=GYFFTkv3Cp$37ltl#SHAM%#4`M3hIo|V1&MD#}9FwC^+11H!W&}#6sn+^>n z(tbtFS^$?sB)DD3{8yf{0GTl)#Wa^L-BkQ4r_PE#qWHT-0#3X@s_8c_Yus|Z7MfF6 zx`;cH|Kwj)MoGNf{Cwm4tHZp&^H3Cm0H6CSaxyZA>%ZR^nm3*GML`Y$ zfej)iCdQ=OSm~nQQMuhcOotSamFt;GhR34&rK3Z5YI@qp%q#>R8F#H9(>DObSm5`e z%sTakBPq-l%gtPOZW->6N!cZ?8r4NbMM@eP zlHd7UWenc3vE3Z`;EZ4)eRLFrg@pyN3PBG%hq$r{ouwP_7+&uiHjcM%jf{;0;wdG& zdwX-ITtCn^Xr>f`MVFdViqki1rAc; zDPwbmV1n@RK9)rAJwg}o?n;MsQQbxd7?2uP^$;UJVpeVNW%tV|t9pQ4=$x29w_U97 z11}9eg|{?DHkE~3K!C`@!{g-qTnr=x&&z+*E=`pj5i>ZrxG(MP?ZLhVj%){v@8ncg zqJsbjQL4}v{2(bAIIszWUbbZ1=lUVsW3k@W!P&WFvOSkhTy4MH6lM*)!oC<{em36+ zcTS552=FTR`zzbJOiq6H6GL||uhbZlxmrt=rpy5~=IfJ_&TuT+O7B~z+=7B0kmNT9 zVk;)6?M6pOF>r9;L2UpGI9ocA=H{?r^=ElGDg?Z!u6o-=hxKmww69;+LCus$jZ#xn z18nmpAz_A7ECOC_46jLk;X*(PAKc0AB&E$Dw#*Lrsio-KZ$bH+fz2|+4YGmT(NfWwARiy!%_Z0k3w}_N3D>sr zeYlka#bmxVPcyV+P6ysh7m+}g{(lys=N$;9ru0zoCAe zNaI0CL-V@9jyW(P!QIOSl$xDU1OpCF4+5H6YWl&l-#)51J3P3v#Sk?iiz4(#?M1*N z--#$H>M$%8&=I8MPe`YX)AITWq3qAO-PWi z&8s14kh?$jT2w}cyIkKj`Jegd*wahl4yA)tKje4s;2j*Rx|f=K3=MxWdVh-eC>N1o zDkdsqc=<2V{rU(wU!kr)f%f5ee&2xGW2wr^OasoCoOMYX;l zFE0Xz@#T7N_$&8EJ`sk+Qk0BQ(dQ>y$ID{Ihljsp!W{^Kua3JWvb-F@GU+B(JtFR6 zmJEhoz7!gWz}fi;t}oLWkUB7%ioLm@$EmN^S=)O@gheY;5u1b_KrVLmWz>w4%+Oy> zker*7^UW*Nhd`YM{T%s>{BJQ7irh8Ou%;?iFpKI8TF`}R%c`GO3Mq*9>Wv%HM) z<_&{fD0LiFs0|_(1_rX^fF7^InmKqu(#4CoeI**FCud0AeUXZjwU&avzFWUC-zis8 z|I0@FMm#*wn`ZvYmjcbIZqjJNKYdq+W4lXD@21JsWZsC?2RXV52LAln(C9V}o1R`A z)l2rPK(Pqa2BbH)!J-BRuilz37u6Pf<#OmT4&3s)!8IcX5fK*Yon#z&qKzt`K+sS*@*gWo}!gpsR@0e_%K1 zXK(eyiTz3DR#-T=O1T0zO5yBUCpi#v=IpIh7jZzXCHh}}C7;1!GVwEJuBu1N>^Mv# zWQbg+n~KV`v)>F$SMQMBt^7ggrQQTn^{0`S-BVL(dlPiUO!G3;O-=9);8m4qP*yr^ z8~*xXJK`cWLxT+7;C$64A1Y~k;F=*?)9xzn-<3AEx%$I5-Q7ajvUn!HGFR~)@9N@< zhVWF&sQIO@MpEVE(zl{-Zd{1?I5B2t&E!H=ZL2vpXVe)^Yk zbKk){Et}mpoEXwfmIg%JINxMuN6i{Ddxg50*v zQRRAnj0R$?2Zx8vp`UEHC6j_4@SVTHWM_;}v&jkl@8~|`A$qS&3UIUvhHc`M6z~FVbec`-zP!uV#?0DqcT< zS-LWo#OF)wI8(6uMOZ7!JZ64wBTr~gS6}40_43UWFk+C$L|r(65r-$c*m-a7;2Cdx zuov*eer>Qij}&hRb4vhxC$g_QoBSNO-&|LjZ?2{*_kgpv+aGT3c(np;75*0pP+CB+yN;u;8q> z?}%Ajb92EZxTK`=qSjIE?TI3gJpHHk;^A?JUM>KB%Xu(`jZuS-oV5ZSEY+9~yWjP2 z;f4A5n8^Fi7r@yJ&$fgoI-Wn@+zY>q9RP1nCPs>B=*-=lNpmf5Vj}kB@;i{JUQ^Z4 z7u|#KI}o!xQ2hy&L#1Dd=ndyYKt_fjG^_3IV(0h7BPNehoL{v^c8ju1uPZyfr&xv$ zLT_yT(Um7VzP|YuOI@92V+Af}%LAi8vDtR9+BQDM#m_Ma(N9EFf1TTmJ9_I&29qqWY z70)e8`$6d61n=?J*Q-#(X1*GKyp=qK1g=)uHbT|YNgz*ci z7(p+)fRSxjvfYU+dR4XL`1tsOIA|oc`-a!+?|5QC`!Itc~fVkY9M&s6SHxaA{(q~8P?!z zR#XM|y`iG<&6G<{eh12oH1-@GT-GB4#=lp>?&$DnXnx)|aWBAGW0;hI2^ZOZ#U>~w z=0RvOK-zwVYHcEmztR1aKApQPv`D3l-O(5=OYAQQwO>Gl>gktYAFyOhOOIu7a6a!z zX2fXp@%q}0qB1o06rx_Ho?Wb$o!bkv!Ud2UTf24JG%mJfY1Av)!$wkjvT}Q$D)v8A zBIEsKT#6F1j0~3!Y`E6@CU6URO=x8@TRLnWkArh+XjFy!^{WT3uXnTPZ&P&#u6>rq z&xh~|nW$amdL}qDT`xKp8^YCSG$CYgY#hb0sKn_~^bC8`v+6w!_Tq*$THvofeL|(6 z*vQ5IYHYRADl}V07z0A7@mlBEIK{}XUyRo)&O0QO%*?NJSxB*HNxHuC+Y>~jW2)69 z+NjU+xVwJ~t#Q^sA)3?2WM}`oJ#xd4xiD;2!)Bvt{!NfyBTJIN!m4;wYD8ofKUeVYoo`xT9bi} z4R@z;)%u|z{MFSVepE{Fhs!(DOo4D{Jz44Z42MEEtCir-p6&O1=zhu2zGQ8~jm(5w zX*q2nmp1V|YcS0flr3`K?`V;bBjFxkjMtZ2x!qQr zPx#=qHE0@q?^*=;aGbd9bnD>E4-0Y&(pN(d0il%+MTYD21k6{(#WK8(#%5*ml@M^Y z3nAoLGBi}e8y^1VG=e}5YGD7YL916l*8tIiw5Vu)m0A@rZMD#e0wq(ia|i3!HxCqz@()t%95VRv2{s^W0tXMFSMlr`EcDMcG49>} zgP3RHlbkfi#%&k2|3}YyhO#<%a%SdB$Fo2b{$x|FLG#UDJYpj!}Pv=gv91*OepO%h`5X zv=NG|nY6^jn$!E^=WbB4yY5>>{I>A*6{@bO@#E#S^gP>wMSuY(!JzGtdvaP@*mv)y z7KJiKB?4b2+$YDy$NP78i>}*a$4AOa{;sG9P%C+Hx~IZmY=ZT(n1R2q&DGU4E1Tj; zvKxr|6l7%Y4-VBs&|f$^Q{xkSC4XCkPCyVmI7s*2)02E^8aeK}o@#k!N{>-;jQx+d zJG>+U?q3wXW1s&iC}n47_YV&4bE`lm)~odOA$xcv-JHysq0pFAXY9q`!nC{HUsNaQH`cAck1E zq5Ni3T2?l3m$WC{u!gH^-6Ei8@Cu$y1iU-1#q~XYpx?90{TkzV^9#>2T9o{Dhr_40`aVO zA-{}yZOt%pJagLA*wa>78RKZRgZ1=qso517D1XT}pXqK5%{6YP#fs&sL2VBMk^45M z(uy&J&&;gWk6B7#v81Vym9L?a#H;49x&P~{q=OSjXbLW|g#r*mu##!!-HzJuJ}RI{MnX#)SXUd9UBM7Xew74s_M6VPAFkDw6lv*DNvBk zJp?Koph)CgTxt}DZ^aYtOF!gE1MP*Uvd%V-t*?>ZOjAp%YjH7Sj}0FxoUEU24unNU z_Kc*~8mqg~b)QnQ4LLP=3wU5s@`x8PGc!9L%(3V96smn#-XSL^PZRQK-hxdq8qXA# zY_MBaDu_7{R$u=03k8i-$kcQ(AckI?*B6dv{`xrao}OM=U*A7npa=so8Hnjiq*Y}5G>l!T$poGWhVIB(tIi6?#@05gtStJi`4|~3 z?JEF_M9=?@LN!TRTH4;;-Xy!8p&>-zTfp_8x_5`KPt(HpzkmM%AvL(JjtgL&iF|oN z0nZBr{?7;R0Wwi4P#^|G2g|$NSO8m*=)QGhT+rFsxm3UH&F9abCnhIFfHn(IRrJ*M z>FKG1iwnr6s0+20fxsMwTn&CECSqM3ucEQCvVw&^oXI*K>WSRTByCm{`)H`^>yw0_ z5=V#xz9i@2(Xd#ApyT6*fv^0*k)53#LqS0yZ?y;L_aki$K%i@M-B;i1*xc9v5nYD1 zRrUH@?X#SkfN#)t_`ic3Oi+l-c>2|0z+4?PNtc$+B5G45+}yYW{MBYvHr?W8zp=Y3 z1qjp-pdQiy--hMnP?8754Gv0WmzK%}1O`fjpy6?ILax>9V!79hi;KIpJDIb+us>Ht zY5BVlqsi}CXx*tP2wgM;jZ}e%h)4fd4a-w1NT+ zsgO4r;7-&KDH)jvDMvh9+ys8Nqqqu#j)(`X5=t(vWC$5BSs+n*od1p2sxeFUlAma2 zP@Xx}m}!ST;yaHsDrq@6s+5!z)2oAdiUxTEa&B(!Eg<28M=mWZ8ybwKl>Yb;Gdv=K z0{o-xb{M69D_qJQv=9d1Wi3SdY4%q_IY+gm1`)L4#46rULKE8AdE31UCFa-a7 zjnCcSS=ujFsb7fzg@4alfFyQzcUN`c=!c+JSWS&{6F1OAweF6=Q={WXiaR+u$rum{ z`wD1P83#*cwgfTJXgMA@i^9>)6Z3ygdb$TY2?q&}jHEnX?RaL%T50#uF-o-Q^HGcc zxmi)|qfrg$P9Q!ZVd7{8k4DKM_;5_1(ocRyTALF*6f#apmgu8qy60+@6k}zH4x>@PbQ4WqRrpa6Vq2JI)kl zotLt*vU1<~aMstmWt+IHXG<@hg?%3oAb|A2MfSY_KSFy%)YWkT*M@@t+$9N!Mpj-P zJOI?gp14a&e8= zj`ZfR901q=rI7wHzS&kNeCGpbR|GUXd_G*DF4H4( z?yVXx83D+Cxy5ZD03JCmAt7LQ*TUW1J*><}i>7>2QCb=iFe-~b<;0+QA`sB`EL-O$ zUEP+?uR&OZL{w;dT^)pj*r;(Q2#EhC2vviFgYN+^Us_)FyE#YX&kx#0RF=yWA_mP1 zSbJ?7Alq136;rS(de=#cukY-<0_n|VcLD|kI$&$P0Fpo;Ak~DFm$QK2rqp1kcd$^0 z3_?K@t)#<>cg`y)aQEf^Q&H9|_e{!p?6@YUX*J zwxsqd(5R{N7#6|CLy7(HBg!?nMnM4;Tmw1|g1|CU7W;wU#HFVr0aM_8_YN^yEoq!~ zm|acnN1WP={h@MQ57hX00{{gc-f(GuY*y5lA?A>ObH5LEYXUGTuOcz&7N>0_(43-V zm!_a5BSS3H{G*g2na{=9IS@Pox82g93!T%**chsrnHjhvQfq?kZz()P#0}OHIpyw~ z+uQYr+w;M(F$s5fUa;TnpAR(idp=tD`}^nV!6)4ywzhmSRV6(=-J@gJ@VQ2?h)Brw zeY`UQod{_l`U7ubH||BSS!w;cSBah8D%kg71wpPlKmQJ#aX|tiDANv~&5~2zPy+cG zGz*06vC+xczopri;Lg@1z=8ubiweBL}*p^gANZvDEi*Z`Z)u z`t4HFxkP#uw1WC3lW3DER2C03hX#ABJOVV(RwY`*Ih3Bk6Ws1g4EItf)l2|%Qz7L| zy?`e|CF}`tg=*SWE_E`?$Tm2K3Pq9FaWbDxk)(Wzvj%SiK&u}4? zLc8T=i|Ks%ON!F%Ae@04WzfDr$CPxWYDtq^7Dc15u&@A_VWQMx_T3pZT2>Z40Uv9MJmb;uC{3M@_RTL#veZ=55p;x zFk8=6`V?v?V);G2Q={+)1Wotz6_0Mq)r+06U~=9Y!HY{*Hm6)_pmGMpE5ok8{@n@A z^=a&z_+#HQLXVb9H2$&iG(dp3-rebc2+oCc;k~r9Q$aNIot-;r{MS?g0ZT^4*%~uC z^bwepLYZVt2b5#qk$ZxX6+3}`VZVx+BcatjR?fvsH1v3P3nV)LC?@hE*+HX-K@RtS ztBrO`4r2SW(S1Z&OXxpLZ@mKmFzV_3fTpjXn2UoiKBFBTPSEJEj;Qe6Gb}BQ6L>8) zxUKP)6!Pyf#;Vb(WlI~vD9~SFp_R$`d zfgJ-hfttcXthos!n;lfe@pbSTSj!Fk5WVg{8%KTgMQBT4W_Ld!v9K=b`s0?8Ym!~4 zO-Vt4`}EYe45OuWyF1x~jYZ=!05*|;ag6iRFsb`B3!>W*Q)t9+>}qZL+a0(c!p~8l zjgLI#YAfpGC;;=naoo-QxY+oQ`~=jfY;1KWCvFx!&ycs~B`Q~sNwS+H{QX zKbu$8Gj9g1-Y}FX=kRIP4I?sY{22HtLTqTKU>~5YDz2rq>aaKU7HG5mn**dqhCh+b zckI&GviQ?^D#l&hUr^JU1E!#pCfrdmhs6XbETZq}F+qnCxpCp^_X9E2_bytFC9}y) zppgn_`goX_91ffP9~W%jE7OsbyF5R6L2tc1g0Xgfi_i9xm_}|lM!(JXE=w{`wr8n{ z_VhptB_Kdu>fjqqkm1eABUum`AZ@>nvDl0B-9*B{DRH9Vm>Vc5#2t^^s+j)DNxD)} zgPkC_IGk;Xc|ScovzGxw7S+%Q+&lSz`Q}aZde1dTWkvXG@2h)CDJYDgnq(-NVgNA6 za64Iv-%LX<-oNiu`IX^@1cb%jIP$+6z%WeJhtg(M3P>oR4t-I(zGWKYxY<0k{0qQW zG$0RJOuQ#FAN!Ru%#8=0J@Az>l)L@=S3SeZ3^TKz2n`Zr2*~$vJPmIx=BqKZ>uspU zI_YHoe)!P4@w+G#0l_^Y;023~t&3~RR zMMUf!kAJ)ZF(I${5c)Va+*w|3SO+VD3dM^l)uf8mkdvEJ$tVJ6bQYH7N=K727Hf&2 zs=+~4UN;sL^DzNYPfr%ls|Q4AL>nr~>AoaRS^C2FA08SWj}II(=AE;`+HnUSqmw-L zDU}ukXmB|B^7mMFcCb|z%6^WV(#n{r$;q*@sXsQszJ`T`1!o!Q0S%4-i}osR&|O&z zh*Bs7)vsh^h;&s&@ReP9U8QF9bSQDj?LlJ<%YZd zJ`F-#jt3#a&CL%eKh&q}ZrEzXKuH4%Fd`J8@1I;K>`&9Ao|nJASt4s_ zc;)wC@SM8hB>^EDbjD#PCCx!|6Id03V5Twk72`Z+5PGS;55_?3 z>cC3dCcC%0xwK74wv5khLiqVk&)OzdfMVuH*@4;^;>FjO`yW=vDoP^KLkQ{H% zFe~S)XO4AMdjrc3ae>x|a(}I8$VcRe`J8Nn2u>-k`yqkohLaSe4!le#1leiCi`dS9 zsWtkx-BdBV9ku%B=f8Q0c7(uMAr1N}5vSLOq5#EQo6NC*d&!d01cwY69wvG?8!?p2 z^u-2tqEvV~h}n|BEP~LL&gHirD|}>pxL}mVJt~oqkz*B}z+P6M7z%m-D_rFE*Sh`! z8e+yL@HHV(1wxo1zx$`+HDHrHF1%`Q_^;SFIL;ilBM$Uz|HN&To5})-qEwF`MLuJ; z$G!u8ZMuLHd?}~=nT%Q-i1G+1C6|wJ2Hdk|zk?MN>;tVlpj*|bD+Jwy-*mEb^L6=Z%T}QO znPP6iP9&A3A0QQh>2*~d5DR?nY(#+H@p@}|*4a^iX`({LM(faOe_$HR^aE~3#BQ%| zkT05*%f!wOi^n3+1&}ue*7@^5eH4+Uf3qvsS5(EL!#T&-`uZY`Zi>G9bt|p6NKl^E z9ei6^olwDe%8@1y8sdl=qoG{`;8|@}1Z38Shn4$eNEV#{jC#7=d0ksKv$pjcBa!A3 zlu03Sp#^Lko6|-nH3YJ$sJ-9b`J|!lghmnW1cQbi-Il*J6_g34ltV8%p$#(*S*)P! zJh?wkG_oolaFI$%1Bs@4wWE=r476hidZs~JKb#)taJ9Jq&q67}TUh=MB%O=>hSxgv zQT=mO%W0?uG^VseFZvXp05OCED7bUB%w$(p_g%`jZ_yykLPHQ>3NZQko(`XnBG^ru zvyH@T^LrA#R@-qzq{Gjb!~9#^D8T{7=;r2^C^#nIM<}$am+{4d`W69I|8m(PH!4a% z%a5VbhFa@qW6$FBIp)*NCJT+ifj_Wv*@Jf{N$zSy)5YcGQ82IzMu1vZ)^mgYf?y{= zbwH?zi6)dxxzfP>9~IQEmvj=qqjo1vDEp&px{KAoiPpU8aM=sXd^}|1)>$!xvNU1K z+*>WRn&Z{}>}#O5GJ{@O0s-F#jQi{7C_tRkP@{``@2{nyZ2sYa1W*`VO-+2znHG=F z-YrVLA2=Lva-#V`g2s4j5Eh@Km&ke+CAh;6AH1dYeg4S3lip$l;@6GMs9y?psH2D% zag2;ID}5iSa|?C=xeSX{Ox+vS<8Y(aQ3tIw(2}Xfoc-B#V^MAXRvsbi?U!6C#(hGN zOkVmu54b48#qm?Ew$aFdR@nq zxJV68<(Y%Tp11V6H3jbz=_1%=I50E-s?}G*9q(KsO0Y3RPd3DfWLRP&BHSSnE!Gc@ zJ)rO1`QmUfqzj>s5jX`Q_d|4Jql*J?>9dgAX{d(sI#hDkQmC%>q1KsAq-EEvT*C%H z4Vq<92#odZJfsF+MG<*Gnw$TD2LB?tXKzCpJ3Eo+{9GC;)3uF0T3(Mcav{H`=d@Yn z9Hvi?`GKMl;nGm@49{XxqXn?-!GX5PW`DfJtemf(+SWGCMyLNGXr1S zoe>PI2Mi??aG+;NnI89RsDXa7%Fl-eCzr4NLG@>|#EW^kZ=F>b7TWI9u(3Iy3W7B_ z3-u;5%I>-^a%AVIusLpE5DD_V7JkfSy?CTH(SClO!?opo_tj*n(T?NPrf}ilxTA;N zde%|Z_aA1ZCOEm$Z{E4`G!dgVSDM&IB=(g=S;V1F^lG95k7EyLDF0Gc`87?oFVE#g9 zEJmRVoH;sl#&)o5R()U7(0Hz1uFk&Pu6Xe!fe?Og?-l{c6B*D?@JpogPPfCQ6&xq0 zD!XaeJFtm)O0iE$oI&WVpb@}<00^A>vo8S@rMbAkHt!y|IbAlg(8QZAAQcyZK@-rw zZP%iv=GO0sNu8l$6y|A%yS-kOYHTEu_~gUQg!{9&IBFyn?@zIB@6ytXU*Ekj8|*t+ z4n^q!atC-w9vv$&1T-_w&830EBH>F^8`^6XHtRr8(M;wHgdFRe*JwF7?0#wU8lXRD z3*)iJlp$4A;mCeLCzL+`PL_v@-wC41KUzBJNS5aYXgJafbUl^_VXwv$@r)r`TE3fl z9Y=1^Zfbn8CJ0W?4gZB}oo?Mh^M&y95^Pph3FvG=77Iz6hGV1!Se{|Y+|a+z*l3K1 z-`zw0;~Xe&fY1-Hj~yGkrDk~x=xo}YuNg;?Q0HoruZDIH*&Jw`xIZwgf_{k8OKX;V zd4BDqicAX6JIrn3wouelyE(OUev~=VrLkYEe>cSMsBWY&tRd*o`LJ9PkAzE z)!7szpy48Dri4}Mty~cjigyeKes_WO zLm*s4TN@ROgQ=?W($TGDZRMjuY!)~{UcNMCF=VF<0$rnob4}-bkbr;Q85$MM*(Q>G zjj(!z=%N$Vd9R?&saD0WKvPxS6Mb7BS~v>e%b*bL1V?SqX&3*1y3WwGd3pjwVyB9{ z+^vn#4AWMhj3|wY1Pq+yi0m!SPvl zUWi}xN%$ZbU>@1-MB3}#{^*=s;`(1Qii(n=qA#Y6R2j(0krQdYi#OPfR$8f%7M3u| zx_E(p{6K$y(=jZO9b0*LcyW`F6f%I$QQw-m;K*iheKIwLlOF}`m2s=&y3`<&fBg6n zFnr`s+Z%!9Mq=`uHWny^gqzPRV!)1Lcl)9S8|FaAo38>MHxsAavd4i#HJD zt1GkT8JunKzJqDx)8DJ8z=OKkftSd_5=Sv_=C^8a0wy6)_ZAkcCMJF=`YSmhyKA?f0EbLBA(mhDD6eD-p$DWT3KUKj7~2Ym);51A{0KsXIS8d2B{zTTxn4 zYkKsl2H=GJk6}zOkW%v>(5to}EH*;|_$9CFKkR8EC6pX#_3qNr(zV0GQ5Sq{@khyp z9V+?i8AD6UaKKE}tiOZFM4*Z5WiS4ulVKCtQE?p~A{9?$0+J})%rI3(ax#>vbOGGz zx#f>#8Iy$SU2+`WwTEOQH8^Q)8UjdIZIF)>CVcV|ZVI&Bk1_*$% z0w@KYML^qFLfgCKiSSm9vh+9kPPY0x1v-4gyGJ0yO@-w?vHm znG8P?F;~q$jDZP@{|x|J$KuGvq$>2=27!Pt<>|?HdUi$uv}!62js!4Al?aG_LT08S z81j-zVbRlW{t+Au|IYKmqN)D>i~Zmr($do8LFiNejVGtB-45pBIjv`-05lHU`ujHl zOl4sKB+$Kc&bS;>2nDWyDp=LBsMS1b%vXH~J2`F!uOb(WC~iGH-Up3rV*--7+`{AN z;z9)w^49szc&=imQ19eqm5W#R0(O0SAwYakZeG&%qtMD}1!=*6x>1+K}Rk%m;n)jX85Q?;pRxaEpntF#_Za-2XU5Tv8GX42)r7V30d3M;K_Ts$#>uPe@3R zF=%n!Pnn=<0jrtv^LxAlgw)Z|@kN6&G3U@z+P|ZY;uvbtAiqC=7g7OQ$g20W-t+3k z7w?Cgs*5^2R(*5`6*;+xMMichD}$DN^{4ApGQecW$HvC;o^ex5`|8GvWvank3^+$B zg4qu?cJ^DluT@p-3YkLD(7DK|DNKNk#R2olv+e8a6H!sY^7MT6dsF!HGb6*jFK9f0 z^qv2uzx_BNz$#IyfN#6Hpc~2*kz3tVdHSuly&~{L?ia*O^xXI{rL^oD@Ie_(SR(f%USJZ#zy&E|GgI% zhX-Yc@7F8-vN$?G?)5TdF-Dnrrcv$cPAs=O-VRgE?g;>gg>4X4e~&-KYBw(7^!E z7c78Nn3e{UV~Y$zu@6FJ&;dS@iT}%#{D=RgjYHSAdlwd4dzrz + + + + + + +Project: include/franka/vacuum_gripper_state.h Source File + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    vacuum_gripper_state.h
    +
    +
    +Go to the documentation of this file.
    1 // Copyright (c) 2023 Franka Robotics GmbH
    +
    2 // Use of this source code is governed by the Apache-2.0 license, see LICENSE
    +
    3 #pragma once
    +
    4 
    +
    5 #include <cstdint>
    +
    6 #include <ostream>
    +
    7 #include <string>
    +
    8 
    +
    9 #include <franka/duration.h>
    +
    10 
    +
    16 namespace franka {
    +
    17 
    +
    21 enum class VacuumGripperDeviceStatus : uint8_t {
    +
    22  kGreen,
    +
    23  kYellow,
    +
    24  kOrange,
    +
    25  kRed
    +
    26 };
    +
    27 
    + + +
    36 
    +
    40  bool part_detached{};
    +
    41 
    +
    45  bool part_present{};
    +
    46 
    + +
    51 
    +
    55  uint16_t actual_power{};
    +
    56 
    +
    60  uint16_t vacuum{};
    +
    61 
    + +
    66 };
    +
    67 
    +
    77 std::ostream& operator<<(std::ostream& ostream,
    +
    78  const franka::VacuumGripperState& vacuum_gripper_state);
    +
    79 
    +
    80 } // namespace franka
    +
    Represents a duration with millisecond resolution.
    Definition: duration.h:19
    +
    Contains the franka::Duration type.
    +
    std::ostream & operator<<(std::ostream &ostream, const Errors &errors)
    Streams the errors as JSON array.
    +
    Describes the vacuum gripper state.
    Definition: vacuum_gripper_state.h:31
    +
    uint16_t actual_power
    Current vacuum gripper actual power.
    Definition: vacuum_gripper_state.h:55
    +
    bool in_control_range
    Vacuum value within in setpoint area.
    Definition: vacuum_gripper_state.h:35
    +
    bool part_detached
    The part has been detached after a suction cycle.
    Definition: vacuum_gripper_state.h:40
    +
    Duration time
    Strictly monotonically increasing timestamp since robot start.
    Definition: vacuum_gripper_state.h:65
    +
    VacuumGripperDeviceStatus device_status
    Current vacuum gripper device status.
    Definition: vacuum_gripper_state.h:50
    +
    uint16_t vacuum
    Current system vacuum.
    Definition: vacuum_gripper_state.h:60
    +
    bool part_present
    Vacuum is over H2 and not yet under H2-h2.
    Definition: vacuum_gripper_state.h:45
    +
    VacuumGripperDeviceStatus
    Vacuum gripper device status.
    Definition: vacuum_gripper_state.h:21
    +
    @ kOrange
    Device is working but there are severe warnings.
    +
    @ kGreen
    Device is working optimally.
    +
    @ kYellow
    Device is working but there are warnings.
    +
    @ kRed
    Device is not working properly.
    +
    + + + + diff --git a/vacuum_object_8cpp-example.html b/vacuum_object_8cpp-example.html new file mode 100644 index 00000000..e975ce47 --- /dev/null +++ b/vacuum_object_8cpp-example.html @@ -0,0 +1,143 @@ + + + + + + + +Project: vacuum_object.cpp + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Project +
    +
    FCI C++ API
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    vacuum_object.cpp
    +
    +
    +

    An example showing how to control FRANKA's vacuum gripper.

    +
    // Copyright (c) 2019 Franka Robotics GmbH
    +
    // Use of this source code is governed by the Apache-2.0 license, see LICENSE
    +
    #include <iostream>
    +
    #include <thread>
    +
    + + +
    +
    int main(int argc, char** argv) {
    +
    if (argc != 2) {
    +
    std::cerr << "Usage: ./vacuum_object <vacuum-gripper-hostname>" << std::endl;
    +
    return -1;
    +
    }
    +
    +
    franka::VacuumGripper vacuum_gripper(argv[1]);
    +
    try {
    +
    // Print a vacuum gripper state.
    +
    franka::VacuumGripperState vacuum_gripper_state = vacuum_gripper.readOnce();
    +
    std::cout << "Initial vacuum gripper state: " << vacuum_gripper_state << std::endl;
    +
    +
    // Vacuum the object.
    +
    if (!vacuum_gripper.vacuum(100, std::chrono::milliseconds(1000))) {
    +
    std::cout << "Failed to vacuum the object." << std::endl;
    +
    return -1;
    +
    }
    +
    +
    vacuum_gripper_state = vacuum_gripper.readOnce();
    +
    std::cout << "Vacuum gripper state after applying vacuum: " << vacuum_gripper_state
    +
    << std::endl;
    +
    +
    // Wait 3s and check afterwards, if the object is still grasped.
    +
    std::this_thread::sleep_for(std::chrono::duration<double, std::milli>(3000));
    +
    +
    vacuum_gripper_state = vacuum_gripper.readOnce();
    +
    if (!vacuum_gripper_state.in_control_range) {
    +
    std::cout << "Object lost." << std::endl;
    +
    return -1;
    +
    }
    +
    +
    std::cout << "Vacuumed object, will release it now." << std::endl;
    +
    vacuum_gripper.dropOff(std::chrono::milliseconds(1000));
    +
    } catch (franka::Exception const& e) {
    +
    vacuum_gripper.stop();
    +
    std::cout << e.what() << std::endl;
    +
    return -1;
    +
    }
    +
    +
    return 0;
    +
    }
    +
    Maintains a network connection to the vacuum gripper, provides the current vacuum gripper state,...
    Definition: vacuum_gripper.h:28
    +
    bool dropOff(std::chrono::milliseconds timeout) const
    Drops the grasped object off.
    +
    bool stop() const
    Stops a currently running vacuum gripper vacuum or drop off operation.
    +
    bool vacuum(uint8_t vacuum, std::chrono::milliseconds timeout, ProductionSetupProfile profile=ProductionSetupProfile::kP0) const
    Vacuums an object.
    +
    VacuumGripperState readOnce() const
    Waits for a vacuum gripper state update and returns it.
    +
    Contains exception definitions.
    +
    Base class for all exceptions used by libfranka.
    Definition: exception.h:20
    +
    Describes the vacuum gripper state.
    Definition: vacuum_gripper_state.h:31
    +
    bool in_control_range
    Vacuum value within in setpoint area.
    Definition: vacuum_gripper_state.h:35
    +
    Contains the franka::VacuumGripper type.
    +
    + + + +