Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifndef MOVEIT_COLLISION_DISTANCE_FIELD_COLLISION_ROBOT_HYBRID_H_
00038 #define MOVEIT_COLLISION_DISTANCE_FIELD_COLLISION_ROBOT_HYBRID_H_
00039
00040 #include <moveit/collision_detection_fcl/collision_robot_fcl.h>
00041 #include <moveit/collision_distance_field/collision_distance_field_types.h>
00042 #include <moveit/collision_distance_field/collision_common_distance_field.h>
00043 #include <moveit/collision_distance_field/collision_robot_distance_field.h>
00044
00045 #include <boost/thread/mutex.hpp>
00046
00047 namespace collision_detection
00048 {
00049 class CollisionRobotHybrid : public collision_detection::CollisionRobotFCL
00050 {
00051 public:
00052 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
00053
00054 CollisionRobotHybrid(const robot_model::RobotModelConstPtr& kmodel);
00055
00056 CollisionRobotHybrid(const robot_model::RobotModelConstPtr& kmodel,
00057 const std::map<std::string, std::vector<CollisionSphere>>& link_body_decompositions,
00058 double size_x = 3.0, double size_y = 3.0, double size_z = 4.0,
00059 bool use_signed_distance_field = false, double resolution = .02,
00060 double collision_tolerance = 0.0, double max_propogation_distance = .25, double padding = 0.0,
00061 double scale = 1.0);
00062
00063 CollisionRobotHybrid(const CollisionRobotHybrid& other);
00064
00065 void initializeRobotDistanceField(const std::map<std::string, std::vector<CollisionSphere>>& link_body_decompositions,
00066 double size_x, double size_y, double size_z, bool use_signed_distance_field,
00067 double resolution, double collision_tolerance, double max_propogation_distance)
00068 {
00069 crobot_distance_->initialize(link_body_decompositions, Eigen::Vector3d(size_x, size_y, size_z),
00070 Eigen::Vector3d(0, 0, 0), use_signed_distance_field, resolution, collision_tolerance,
00071 max_propogation_distance);
00072 }
00073
00074 void checkSelfCollisionDistanceField(const collision_detection::CollisionRequest& req,
00075 collision_detection::CollisionResult& res,
00076 const robot_state::RobotState& state) const;
00077
00078 void checkSelfCollisionDistanceField(const collision_detection::CollisionRequest& req,
00079 collision_detection::CollisionResult& res, const robot_state::RobotState& state,
00080 boost::shared_ptr<GroupStateRepresentation>& gsr) const;
00081
00082 void checkSelfCollisionDistanceField(const collision_detection::CollisionRequest& req,
00083 collision_detection::CollisionResult& res, const robot_state::RobotState& state,
00084 const collision_detection::AllowedCollisionMatrix& acm) const;
00085
00086 void checkSelfCollisionDistanceField(const collision_detection::CollisionRequest& req,
00087 collision_detection::CollisionResult& res, const robot_state::RobotState& state,
00088 const collision_detection::AllowedCollisionMatrix& acm,
00089 boost::shared_ptr<GroupStateRepresentation>& gsr) const;
00090 const boost::shared_ptr<const collision_detection::CollisionRobotDistanceField> getCollisionRobotDistanceField() const
00091 {
00092 return crobot_distance_;
00093 }
00094
00095 protected:
00096 boost::shared_ptr<collision_detection::CollisionRobotDistanceField> crobot_distance_;
00097 };
00098 }
00099
00100 #endif