41 #include <moveit_msgs/CollisionObject.h> 68 const std::string
LOGNAME =
"visual_tools";
71 planning_scene_monitor::PlanningSceneMonitorPtr psm)
72 : RvizVisualTools::RvizVisualTools(base_frame, marker_topic)
73 , psm_(
std::move(psm))
80 robot_model::RobotModelConstPtr robot_model)
91 "already been set for Visual Tools");
97 std::shared_ptr<tf2_ros::Buffer>
tf_buffer = std::make_shared<tf2_ros::Buffer>();
98 std::shared_ptr<tf2_ros::TransformListener> tf_listener = std::make_shared<tf2_ros::TransformListener>(*tf_buffer);
107 if (
psm_->getPlanningScene())
119 planning_scene->setName(
"visual_tools_scene");
136 scene->getCurrentStateNonConst().update();
137 scene->processCollisionObjectMsg(msg);
138 scene->setObjectColor(msg.id,
getColor(color));
155 scene->processAttachedCollisionObjectMsg(msg);
176 moveit_msgs::CollisionObject collision_obj;
179 collision_obj.id = name;
180 collision_obj.operation = moveit_msgs::CollisionObject::MOVE;
182 collision_obj.primitive_poses.resize(1);
183 collision_obj.primitive_poses[0] = pose;
241 const std::vector<double>& ee_joint_pos)
244 if (ee_jmg ==
nullptr)
255 if (!ee_joint_pos.empty())
257 if (ee_joint_pos.size() != ee_jmg->getActiveJointModels().size())
260 << ee_joint_pos.size() <<
") does not match the number of active joints in " 261 << ee_jmg->getName() <<
"(" << ee_jmg->getActiveJointModels().size() <<
")");
276 static std::size_t marker_id_offset = 0;
285 const std::vector<std::string>& ee_link_names = ee_jmg->getLinkModelNames();
294 const std::string& ee_parent_link_name = ee_jmg->getEndEffectorParentGroup().second;
298 Eigen::Isometry3d ee_marker_global_transform =
shared_robot_state_->getGlobalLinkTransform(ee_parent_link);
299 Eigen::Isometry3d ee_marker_pose;
302 for (std::size_t i = 0; i <
ee_markers_map_[ee_jmg].markers.size(); ++i)
308 if (
ee_markers_map_[ee_jmg].markers[i].type == visualization_msgs::Marker::MESH_RESOURCE)
346 if (!robot_state_topic.empty())
359 const std::vector<double>& ee_joint_pos,
373 Eigen::Isometry3d eigen_goal_ee_pose =
convertPose(pose);
374 Eigen::Isometry3d eigen_this_marker;
380 for (std::size_t i = 0; i <
ee_markers_map_[ee_jmg].markers.size(); ++i)
399 eigen_this_marker = eigen_goal_ee_pose *
ee_poses_map_[ee_jmg][i];
408 const robot_model::JointModelGroup* ee_jmg,
double animate_speed)
410 ROS_DEBUG_STREAM_NAMED(LOGNAME,
"Visualizing " << possible_grasps.size() <<
" grasps with EE joint model group " 411 << ee_jmg->getName());
414 for (std::size_t i = 0; i < possible_grasps.size(); ++i)
428 const robot_model::JointModelGroup* ee_jmg,
double animate_speed)
430 ROS_DEBUG_STREAM_NAMED(LOGNAME,
"Visualizing " << possible_grasps.size() <<
" grasps with joint model group " 431 << ee_jmg->getName() <<
" at speed " << animate_speed);
434 for (std::size_t i = 0; i < possible_grasps.size(); ++i)
447 const robot_model::JointModelGroup* ee_jmg,
double animate_speed)
450 geometry_msgs::Pose grasp_pose = grasp.grasp_pose.pose;
458 Eigen::Isometry3d grasp_pose_eigen;
462 geometry_msgs::Pose pre_grasp_pose;
463 Eigen::Isometry3d pre_grasp_pose_eigen;
466 Eigen::Vector3d pre_grasp_approach_direction_local;
476 double animation_resulution = 0.1;
477 for (
double percent = 0; percent < 1; percent += animation_resulution)
483 pre_grasp_pose_eigen = grasp_pose_eigen;
487 Eigen::Vector3d pre_grasp_approach_direction = Eigen::Vector3d(
488 -1 * grasp.pre_grasp_approach.direction.vector.x * grasp.pre_grasp_approach.min_distance * (1 - percent),
489 -1 * grasp.pre_grasp_approach.direction.vector.y * grasp.pre_grasp_approach.min_distance * (1 - percent),
490 -1 * grasp.pre_grasp_approach.direction.vector.z * grasp.pre_grasp_approach.min_distance * (1 - percent));
494 const std::string& ee_parent_link_name = ee_jmg->getEndEffectorParentGroup().second;
496 if (grasp.pre_grasp_approach.direction.header.frame_id == ee_parent_link_name)
500 pre_grasp_approach_direction_local = grasp_pose_eigen.rotation() * pre_grasp_approach_direction;
504 pre_grasp_approach_direction_local = pre_grasp_approach_direction;
509 pre_grasp_pose_eigen.translation() += pre_grasp_approach_direction_local;
512 pre_grasp_pose =
tf2::toMsg(pre_grasp_pose_eigen);
528 const robot_model::JointModelGroup* arm_jmg,
double display_time)
530 if (ik_solutions.empty())
541 trajectory_msgs::JointTrajectoryPoint trajectory_pt_timed;
544 moveit_msgs::RobotTrajectory trajectory_msg;
545 trajectory_msg.joint_trajectory.header.frame_id =
base_frame_;
546 trajectory_msg.joint_trajectory.joint_names = arm_jmg->getActiveJointModelNames();
549 double running_time = 0;
552 for (std::size_t i = 0; i < ik_solutions.size(); ++i)
554 trajectory_pt_timed = ik_solutions[i];
555 trajectory_pt_timed.time_from_start =
ros::Duration(running_time);
556 trajectory_msg.joint_trajectory.points.push_back(trajectory_pt_timed);
558 running_time += display_time;
562 trajectory_pt_timed = trajectory_msg.joint_trajectory.points.back();
563 trajectory_pt_timed.time_from_start =
ros::Duration(running_time);
564 trajectory_msg.joint_trajectory.points.push_back(trajectory_pt_timed);
574 scene->removeAllCollisionObjects();
583 moveit_msgs::CollisionObject co;
587 co.operation = moveit_msgs::CollisionObject::REMOVE;
595 moveit_msgs::AttachedCollisionObject aco;
600 aco.object.operation = moveit_msgs::CollisionObject::REMOVE;
608 moveit_msgs::AttachedCollisionObject aco;
612 aco.object.id = name;
613 aco.object.operation = moveit_msgs::CollisionObject::ADD;
616 aco.link_name = ee_parent_link;
624 moveit_msgs::CollisionObject collision_obj;
627 collision_obj.id = name;
628 collision_obj.operation = moveit_msgs::CollisionObject::ADD;
630 collision_obj.primitives.resize(1);
631 collision_obj.primitives[0].type = shape_msgs::SolidPrimitive::BOX;
632 collision_obj.primitives[0].dimensions.resize(
634 collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_X] = block_size;
635 collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_Y] = block_size;
636 collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_Z] = block_size;
637 collision_obj.primitive_poses.resize(1);
638 collision_obj.primitive_poses[0] = block_pose;
654 moveit_msgs::CollisionObject collision_obj;
657 collision_obj.id = name;
658 collision_obj.operation = moveit_msgs::CollisionObject::ADD;
661 collision_obj.primitive_poses.resize(1);
662 collision_obj.primitive_poses[0].position.x = (point1.x - point2.x) / 2.0 + point2.x;
663 collision_obj.primitive_poses[0].position.y = (point1.y - point2.y) / 2.0 + point2.y;
664 collision_obj.primitive_poses[0].position.z = (point1.z - point2.z) / 2.0 + point2.z;
667 collision_obj.primitives.resize(1);
668 collision_obj.primitives[0].type = shape_msgs::SolidPrimitive::BOX;
669 collision_obj.primitives[0].dimensions.resize(
671 collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_X] = fabs(point1.x - point2.x);
672 collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_Y] = fabs(point1.y - point2.y);
673 collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_Z] = fabs(point1.z - point2.z);
676 if (!collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_X])
678 if (!collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_Y])
680 if (!collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_Z])
690 geometry_msgs::Pose pose_msg =
tf2::toMsg(pose);
695 double height,
const std::string& name,
698 moveit_msgs::CollisionObject collision_obj;
701 collision_obj.id = name;
702 collision_obj.operation = moveit_msgs::CollisionObject::ADD;
705 collision_obj.primitive_poses.resize(1);
706 collision_obj.primitive_poses[0] = pose;
709 collision_obj.primitives.resize(1);
710 collision_obj.primitives[0].type = shape_msgs::SolidPrimitive::BOX;
711 collision_obj.primitives[0].dimensions.resize(
713 collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_X] = width;
714 collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_Y] = depth;
715 collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_Z] = height;
718 if (!collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_X])
720 if (!collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_Y])
722 if (!collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_Z])
732 geometry_msgs::Point point1;
733 geometry_msgs::Point point2;
747 const std::string& object_name,
double radius,
754 const std::string& object_name,
double radius,
758 double height = (a - b).lpNorm<2>();
764 Eigen::Isometry3d pose;
768 Eigen::Isometry3d rotation;
769 rotation = Eigen::AngleAxisd(0.5 *
M_PI, Eigen::Vector3d::UnitY());
770 pose = pose * rotation;
784 moveit_msgs::CollisionObject collision_obj;
787 collision_obj.id = object_name;
788 collision_obj.operation = moveit_msgs::CollisionObject::ADD;
789 collision_obj.primitives.resize(1);
790 collision_obj.primitives[0].type = shape_msgs::SolidPrimitive::CYLINDER;
791 collision_obj.primitives[0].dimensions.resize(
793 collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::CYLINDER_HEIGHT] = height;
794 collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::CYLINDER_RADIUS] = radius;
795 collision_obj.primitive_poses.resize(1);
796 collision_obj.primitive_poses[0] = object_pose;
819 if (!
publishCollisionMesh(object_pose, object_name, boost::get<shape_msgs::Mesh>(shape_msg), color))
836 moveit_msgs::CollisionObject collision_obj;
839 collision_obj.id = object_name;
840 collision_obj.operation = moveit_msgs::CollisionObject::ADD;
841 collision_obj.mesh_poses.resize(1);
842 collision_obj.mesh_poses[0] = object_pose;
843 collision_obj.meshes.resize(1);
844 collision_obj.meshes[0] = mesh_msg;
855 moveit_msgs::CollisionObject collision_obj;
858 collision_obj.id = object_name;
859 collision_obj.operation = moveit_msgs::CollisionObject::ADD;
862 typedef std::pair<std::size_t, std::size_t> node_ids;
863 std::set<node_ids> added_edges;
864 std::pair<std::set<node_ids>::iterator,
bool> return_value;
866 Eigen::Vector3d a, b;
867 for (std::size_t i = 0; i < graph.nodes.size(); ++i)
869 for (std::size_t j = 0; j < graph.edges[i].node_ids.size(); ++j)
872 return_value = added_edges.insert(node_ids(i, j));
873 if (!return_value.second)
881 b =
convertPoint(graph.nodes[graph.edges[i].node_ids[j]]);
884 added_edges.insert(node_ids(j, i));
887 double height = (a - b).lpNorm<2>();
893 Eigen::Isometry3d pose;
897 Eigen::Isometry3d rotation;
898 rotation = Eigen::AngleAxisd(0.5 *
M_PI, Eigen::Vector3d::UnitY());
899 pose = pose * rotation;
902 shape_msgs::SolidPrimitive cylinder;
903 cylinder.type = shape_msgs::SolidPrimitive::CYLINDER;
904 cylinder.dimensions.resize(
906 cylinder.dimensions[shape_msgs::SolidPrimitive::CYLINDER_HEIGHT] = height;
907 cylinder.dimensions[shape_msgs::SolidPrimitive::CYLINDER_RADIUS] = radius;
910 collision_obj.primitives.push_back(cylinder);
913 collision_obj.primitive_poses.push_back(
convertPose(pose));
922 const std::string& name, moveit_msgs::CollisionObject& collision_obj)
926 collision_obj.operation = moveit_msgs::CollisionObject::ADD;
927 collision_obj.primitives.resize(1);
928 collision_obj.primitives[0].type = shape_msgs::SolidPrimitive::BOX;
929 collision_obj.primitives[0].dimensions.resize(
932 geometry_msgs::Pose rec_pose;
936 collision_obj.id = name;
941 rec_pose.position.x = x;
942 rec_pose.position.y = y;
943 rec_pose.position.z = height / 2 + z;
946 collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_X] = depth;
947 collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_Y] = width;
948 collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_Z] = height;
951 Eigen::Quaterniond quat(Eigen::AngleAxis<double>(static_cast<double>(angle), Eigen::Vector3d::UnitZ()));
952 rec_pose.orientation.x = quat.x();
953 rec_pose.orientation.y = quat.y();
954 rec_pose.orientation.z = quat.z();
955 rec_pose.orientation.w = quat.w();
957 collision_obj.primitive_poses.resize(1);
958 collision_obj.primitive_poses[0] = rec_pose;
970 moveit_msgs::CollisionObject collision_obj;
977 double depth,
const std::string& name,
980 geometry_msgs::Pose table_pose;
983 table_pose.position.x = x;
984 table_pose.position.y = y;
985 table_pose.position.z = z + height / 2.0;
988 Eigen::Quaterniond quat(Eigen::AngleAxis<double>(static_cast<double>(angle), Eigen::Vector3d::UnitZ()));
989 table_pose.orientation.x = quat.x();
990 table_pose.orientation.y = quat.y();
991 table_pose.orientation.z = quat.z();
992 table_pose.orientation.w = quat.w();
994 moveit_msgs::CollisionObject collision_obj;
997 collision_obj.id = name;
998 collision_obj.operation = moveit_msgs::CollisionObject::ADD;
999 collision_obj.primitives.resize(1);
1000 collision_obj.primitives[0].type = shape_msgs::SolidPrimitive::BOX;
1001 collision_obj.primitives[0].dimensions.resize(
1005 collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_X] = depth;
1006 collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_Y] = width;
1007 collision_obj.primitives[0].dimensions[shape_msgs::SolidPrimitive::BOX_Z] = height;
1009 collision_obj.primitive_poses.resize(1);
1010 collision_obj.primitive_poses[0] = table_pose;
1022 std::ifstream fin(path.c_str());
1030 scene->loadGeometryFromStream(fin, offset);
1038 ROS_INFO_NAMED(LOGNAME,
"Loaded scene geometry from '%s'", path.c_str());
1041 ROS_WARN_NAMED(LOGNAME,
"Unable to load scene geometry from '%s'", path.c_str());
1051 "Planning_Workspace", 1);
1069 std::vector<std::string> highlight_links;
1070 for (
const auto& contact : c_res.
contacts)
1072 highlight_links.push_back(contact.first.first);
1073 highlight_links.push_back(contact.first.second);
1103 if (!contacts.empty())
1105 visualization_msgs::MarkerArray arr;
1110 if (arr.markers.empty())
1114 for (std::size_t i = 0; i < arr.markers.size(); ++i)
1116 arr.markers[i].ns =
"Collision";
1117 arr.markers[i].id = i;
1118 arr.markers[i].scale.x = 0.04;
1119 arr.markers[i].scale.y = 0.04;
1120 arr.markers[i].scale.z = 0.04;
1121 arr.markers[i].color =
getColor(color);
1130 const std::string& planning_group,
double display_time)
1133 const robot_model::JointModelGroup* jmg =
robot_model_->getJointModelGroup(planning_group);
1142 trajectory_msgs::JointTrajectoryPoint trajectory_pt_timed = trajectory_pt;
1143 trajectory_pt_timed.time_from_start =
ros::Duration(display_time);
1146 moveit_msgs::RobotTrajectory trajectory_msg;
1147 trajectory_msg.joint_trajectory.header.frame_id =
base_frame_;
1148 trajectory_msg.joint_trajectory.joint_names = jmg->getJointModelNames();
1149 trajectory_msg.joint_trajectory.points.push_back(trajectory_pt);
1150 trajectory_msg.joint_trajectory.points.push_back(trajectory_pt_timed);
1162 double duration_from_previous = 0;
1163 for (std::size_t k = 0; k < trajectory.size(); ++k)
1165 duration_from_previous += speed;
1166 robot_trajectory->addSuffixWayPoint(trajectory[k], duration_from_previous);
1170 moveit_msgs::RobotTrajectory trajectory_msg;
1171 robot_trajectory->getRobotTrajectoryMsg(trajectory_msg);
1174 moveit_msgs::RobotState robot_state_msg;
1175 if (!trajectory.empty())
1176 robot_state::robotStateToRobotStateMsg(*trajectory[0], robot_state_msg);
1188 moveit_msgs::RobotTrajectory trajectory_msg;
1192 if (trajectory_msg.joint_trajectory.points.size() > 1)
1194 if (trajectory_msg.joint_trajectory.points[1].time_from_start ==
ros::Duration(0))
1196 for (std::size_t i = 0; i < trajectory_msg.joint_trajectory.points.size(); ++i)
1198 trajectory_msg.joint_trajectory.points[i].time_from_start =
ros::Duration(i * 2);
1204 moveit_msgs::RobotState robot_state_msg;
1205 if (!trajectory.
empty())
1206 robot_state::robotStateToRobotStateMsg(trajectory.
getFirstWayPoint(), robot_state_msg);
1212 const robot_state::RobotStateConstPtr& robot_state,
bool blocking)
1221 moveit_msgs::RobotState robot_state_msg;
1222 robot_state::robotStateToRobotStateMsg(robot_state, robot_state_msg);
1227 const moveit_msgs::RobotState& robot_state,
bool blocking)
1230 if (trajectory_msg.joint_trajectory.points.empty())
1232 ROS_WARN_STREAM_NAMED(LOGNAME,
"Unable to publish trajectory path because trajectory has zero points");
1237 moveit_msgs::DisplayTrajectory display_trajectory_msg;
1238 display_trajectory_msg.model_id =
robot_model_->getName();
1239 display_trajectory_msg.trajectory.resize(1);
1240 display_trajectory_msg.trajectory[0] = trajectory_msg;
1241 display_trajectory_msg.trajectory_start = robot_state;
1248 double duration = trajectory_msg.joint_trajectory.points.back().time_from_start.toSec();
1251 if (duration < std::numeric_limits<double>::epsilon())
1253 duration = 0.05 * trajectory_msg.joint_trajectory.points.size();
1259 static const double CHECK_TIME_INTERVAL = 0.25;
1260 while (
ros::ok() && counter <= duration)
1262 counter += CHECK_TIME_INTERVAL;
1280 const robot_model::JointModelGroup* arm_jmg,
1313 if (!ee_parent_link)
1325 const Eigen::Isometry3d& tip_pose = robot_trajectory.
getWayPoint(i).getGlobalLinkTransform(ee_parent_link);
1328 if (tip_pose.translation().x() != tip_pose.translation().x())
1334 path.push_back(tip_pose.translation());
1338 const double radius = 0.005;
1345 const robot_model::JointModelGroup* arm_jmg,
1348 std::vector<const moveit::core::LinkModel*> tips;
1349 if (!arm_jmg->getEndEffectorTips(tips))
1366 const robot_model::JointModelGroup* arm_jmg,
1373 const robot_model::JointModelGroup* arm_jmg,
1376 std::vector<const moveit::core::LinkModel*> tips;
1377 if (!arm_jmg->getEndEffectorTips(tips))
1398 for (std::size_t i = 0; i < robot_state_trajectory.size(); ++i)
1400 const Eigen::Isometry3d& tip_pose = robot_state_trajectory[i]->getGlobalLinkTransform(ee_parent_link);
1419 const robot_model::JointModelGroup* jmg,
1426 const robot_model::JointModelGroup* jmg,
1442 const std::vector<std::string>& highlight_links)
1449 const std::vector<std::string>& highlight_links)
1454 if (!highlight_links.empty())
1462 if (display_robot_msg.highlight_links.empty())
1467 const std::vector<std::string>& link_names =
1468 highlight_links.empty() ? robot_state.getRobotModel()->getLinkModelNamesWithCollisionGeometry() :
1470 display_robot_msg.highlight_links.resize(link_names.size());
1473 const std_msgs::ColorRGBA& color_rgba =
getColor(color);
1476 for (std::size_t i = 0; i < link_names.size(); ++i)
1478 display_robot_msg.highlight_links[i].id = link_names[i];
1479 display_robot_msg.highlight_links[i].color = color_rgba;
1500 robot_state::robotStateToRobotStateMsg(robot_state, display_robot_msg.state);
1507 if (!highlight_links.empty())
1508 display_robot_msg.highlight_links.clear();
1522 static const std::string VJOINT_NAME =
"virtual_joint";
1528 Eigen::Isometry3d offset;
1540 const std::vector<const moveit::core::JointModel*>& joints =
robot_model_->getActiveJointModels();
1543 for (std::size_t i = 0; i < joints.size(); ++i)
1546 if (joints[i]->getVariableCount() > 1)
1553 double current_value = robot_state->getVariablePosition(joints[i]->
getName());
1556 bool out_of_bounds = !robot_state->satisfiesBounds(joints[i]);
1563 std::cout <<
" " << std::fixed << std::setprecision(5) << bound.
min_position_ <<
"\t";
1566 double step = delta / 20.0;
1568 bool marker_shown =
false;
1572 if (!marker_shown && current_value < value)
1575 marker_shown =
true;
1581 std::cout <<
" \t" << std::fixed << std::setprecision(5) << bound.
max_position_ <<
" \t" << joints[i]->getName()
1582 <<
" current: " << std::fixed << std::setprecision(5) << current_value << std::endl;
1609 static const std::string VJOINT_NAME =
"virtual_joint";
1612 if (!robot_state.
getRobotModel()->hasJointModel(VJOINT_NAME))
1619 if (!robot_state.
getRobotModel()->getJointModel(VJOINT_NAME)->hasVariable(VJOINT_NAME +
"/trans_x"))
1623 <<
"' do not exist. Try making this vjoint " 1626 const std::vector<std::string>& var_names =
1627 robot_state.
getRobotModel()->getJointModel(VJOINT_NAME)->getVariableNames();
1628 std::copy(var_names.begin(), var_names.end(), std::ostream_iterator<std::string>(std::cout,
"\n"));
1636 const Eigen::Isometry3d& offset)
1638 static const std::string VJOINT_NAME =
"virtual_joint";
1643 ROS_WARN_STREAM_NAMED(
"moveit_visual_tools",
"Unable to apply virtual joint transform, hideRobot() functionality " 1654 Eigen::Quaterniond q(offset.rotation());
#define ROS_INFO_NAMED(name,...)
#define MOVEIT_CONSOLE_COLOR_RESET
#define ROS_DEBUG_STREAM_NAMED(name, args)
#define ROS_ERROR_STREAM_NAMED(name, args)
#define ROS_WARN_NAMED(name,...)
std::vector< Eigen::Vector3d, Eigen::aligned_allocator< Eigen::Vector3d > > vector_Vector3d
void getCollisionMarkersFromContacts(visualization_msgs::MarkerArray &arr, const std::string &frame_id, const CollisionResult::ContactMap &con, const std_msgs::ColorRGBA &color, const ros::Duration &lifetime, const double radius=0.035)
ROSCONSOLE_CONSOLE_IMPL_DECL std::string getName(void *handle)
#define ROS_INFO_STREAM_NAMED(name, args)
std::size_t getWayPointCount() const
std::map< std::pair< std::string, std::string >, std::vector< Contact > > ContactMap
#define ROS_DEBUG_NAMED(name,...)
void publish(const boost::shared_ptr< M > &message) const
#define ROS_FATAL_STREAM_NAMED(name, args)
void checkCollision(const collision_detection::CollisionRequest &req, collision_detection::CollisionResult &res)
void fromMsg(const A &, B &b)
const std::string & getName() const
const RobotModelConstPtr & getRobotModel() const
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
const std::string & getPlanningFrame() const
#define MOVEIT_CONSOLE_COLOR_RED
std::string getTopic() const
tf2_ros::Buffer * tf_buffer
std::size_t max_contacts_per_pair
bool constructMsgFromShape(const Shape *shape, ShapeMsg &shape_msg)
Mesh * createMeshFromResource(const std::string &resource)
void setVariablePosition(const std::string &variable, double value)
ROSCPP_DECL void spinOnce()
const robot_state::RobotState & getWayPoint(std::size_t index) const
void getRobotTrajectoryMsg(moveit_msgs::RobotTrajectory &trajectory, const std::vector< std::string > &joint_filter=std::vector< std::string >()) const
const robot_state::RobotState & getFirstWayPoint() const
boost::variant< shape_msgs::SolidPrimitive, shape_msgs::Mesh, shape_msgs::Plane > ShapeMsg
#define ROS_WARN_STREAM_NAMED(name, args)