23 std::string saved_state) {
24 std::string saved_state_name;
26 std::size_t thumb_check = finger_name.find(
"thumb");
27 if (thumb_check != std::string::npos)
28 saved_state_name = finger_name +
"_" + saved_state;
30 saved_state_name = finger_name +
"_finger_" + saved_state;
31 return saved_state_name;
39 std::string move_group_name;
40 std::size_t thumb_check = finger_name.find(
"thumb");
41 if (thumb_check != std::string::npos)
42 move_group_name =
"rh_" + finger_name;
44 move_group_name =
"rh_" + finger_name +
"_finger";
46 return move_group_name;
54 moveit::planning_interface::MoveGroupInterface &move_group_interface) {
55 std::vector<std::string> joint_names;
56 joint_names = move_group_interface.getJointNames();
61 inline std::vector<std::string>
62 getJointNames(moveit::planning_interface::MoveGroupInterface::Plan &plan) {
64 moveit_msgs::RobotTrajectory robotTrajectory = plan.trajectory_;
66 trajectory_msgs::JointTrajectory planTrajectory =
67 robotTrajectory.joint_trajectory;
69 std::vector<std::string> jointNames = planTrajectory.joint_names;
80 moveit::planning_interface::MoveGroupInterface &move_group_interface) {
81 std::vector<double> joint_vals;
82 joint_vals = move_group_interface.getCurrentJointValues();
93 inline std::vector<std::tuple<float, float>>
96 if (!model.initParam(
"/robot_description")) {
97 ROS_ERROR(
"Failed to parse urdf file");
99 ROS_INFO(
"Successfully parsed urdf file");
100 std::vector<std::tuple<float, float>> joint_limits;
101 for (
auto joint_name : joint_names) {
102 urdf::JointConstSharedPtr j = model.getJoint(joint_name);
103 joint_limits.push_back(std::make_tuple(j->limits->upper, j->limits->lower));
111 const static std::vector<std::string>
biotac_idx = {
"first",
"middle",
"ring",
122 for (
auto &each_idx : biotac_idx) {
124 std::size_t found = finger_name.find(each_idx);
125 if (found != std::string::npos) {
172 moveit::planning_interface::MoveGroupInterface::Plan
_plan;
196 Finger(std::string &finger_name, ros::NodeHandle &node_handle)
197 : _finger_name(finger_name),
199 _node_handle(node_handle) {
201 _joint_controller_publishers =
208 if (_finger_name !=
"thumb") {
209 this->_fsr_topic = std::string(1, this->_finger_name.front()) +
"f_fsr";
211 this->_fsr_topic =
"th_fsr";
214 ROS_INFO_STREAM(
"Initialized Finger: " << _finger_name);
230 std::vector<std::string>::iterator it =
231 std::find(_joint_names.begin(), _joint_names.end(), joint_name);
232 if (it != _joint_names.end()) {
233 int idx = std::distance(_joint_names.begin(), it);
234 return _joint_limits[idx];
236 ROS_ERROR_STREAM(
"Joint " << joint_name <<
" not found in " 237 << _finger_name <<
".");
238 return std::make_tuple(0.0, 0.0);
277 std::vector<std::string> joint_names;
284 std::vector<double> joint_vals;
shadow_planning::PlanningOptions _planning_options
Definition: shadow_finger.hpp:177
int _biotac_id
The index of the BioTac sensor.
Definition: shadow_finger.hpp:152
int16_t pressure
Definition: shadow_finger.hpp:247
std::vector< ros::Publisher > createJointControllerPublishers(std::vector< std::string > &joint_names, ros::NodeHandle &n)
Create a vector of publishers for each given joint name, using the ROS node handle.
Definition: shadow_utils.cpp:320
std::string _finger_name
The name of this finger instance.
Definition: shadow_finger.hpp:147
std::string getSavedStateName(std::string finger_name, std::string saved_state)
Get preloaded plan as string for open or close.
Definition: shadow_finger.hpp:22
int getBiotacIdx(std::string &finger_name)
Fetch BioTac index given name of finger.
Definition: shadow_finger.hpp:120
float getFSRValue()
Get FSR value.
Definition: shadow_finger.cpp:57
static const std::vector< std::string > biotac_idx
Lookup table that maps finger name to BioTac index.
Definition: shadow_finger.hpp:111
Utility struct for managing the BioTac sensor attached to each finger. Holds the pressure and impedan...
Definition: shadow_finger.hpp:246
Struct to set planning parameters for MoveIt planning.
Definition: shadow_planning_options.hpp:15
Utility functions for managing each finger of Shadow Hand. Contains struct to hold necessary data abo...
std::vector< std::tuple< float, float > > _joint_limits
Vector of tuples of joint limits of each joint in finger.
Definition: shadow_finger.hpp:162
Utility struct for managing each finger of Shadow Hand. Contains all the information about the Finger...
Definition: shadow_finger.hpp:137
shadow_finger::Finger::BioTac getBioTacPressure()
Get populated struct containing BioTac pressure data.
Definition: shadow_finger.cpp:7
ros::NodeHandle _node_handle
The ROS node handle.
Definition: shadow_finger.hpp:142
std::ostream & operator<<(std::ostream &os, const shadow_finger::Finger &finger)
Definition: shadow_finger.hpp:290
std::vector< std::string > _joint_names
Vector of strings of all joints in this finger.
Definition: shadow_finger.hpp:157
shadow_finger::Finger::BioTac getBioTacImpedancePressure()
Get populated struct containing BioTac pressure and impedance data.
Definition: shadow_finger.cpp:40
moveit::planning_interface::MoveGroupInterface _finger_move_group
MoveGroupInterface for this finger.
Definition: shadow_finger.hpp:167
moveit::planning_interface::MoveGroupInterface::Plan _plan
MoveIt plan generated for this finger.
Definition: shadow_finger.hpp:172
std::string getFingerName()
Getter function for finger name.
Definition: shadow_finger.hpp:221
std::vector< std::string > getJointNames(moveit::planning_interface::MoveGroupInterface &move_group_interface)
Get names of joints from given MoveGroupInterface.
Definition: shadow_finger.hpp:53
std::vector< std::tuple< float, float > > getFingerJointLimits(std::vector< std::string > &joint_names)
Get limits of each joint in given vector of joint names. This is obtained from the /robot_description...
Definition: shadow_finger.hpp:94
std::vector< double > getJointValues(moveit::planning_interface::MoveGroupInterface &move_group_interface)
Get current values of joints from given MoveGroupInterface, they are in the same order as the names o...
Definition: shadow_finger.hpp:79
std::tuple< float, float > jointLimitsFromName(std::string &joint_name)
Get joint limits from joint name, from vector of tuples populated by getFingerJointLimits() ...
Definition: shadow_finger.hpp:229
shadow_finger::Finger::BioTac getBioTacImpedance()
Get populated struct containing BioTac impedance data.
Definition: shadow_finger.cpp:23
Finger(std::string &finger_name, ros::NodeHandle &node_handle)
Constructor for each finger. Requires name of finger and a ROS node handle reference. Everything else is populated by constructor.
Definition: shadow_finger.hpp:196
std::string getMoveGroupName(std::string finger_name)
Get planning group names given common name for finger.
Definition: shadow_finger.hpp:38
std::vector< ros::Publisher > _joint_controller_publishers
Vector of ROS publishers, for sending control data for each joint in finger.
Definition: shadow_finger.hpp:183
std::vector< int16_t > impedance
Definition: shadow_finger.hpp:248
std::string _fsr_topic
Subscriber topic for getting FSR data for finger.
Definition: shadow_finger.hpp:188