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
00066 initializeRobotDistanceField(const std::map<std::string, std::vector<CollisionSphere> >& link_body_decompositions,
00067 double size_x, double size_y, double size_z, bool use_signed_distance_field,
00068 double resolution, double collision_tolerance, double max_propogation_distance)
00069 {
00070 crobot_distance_->initialize(link_body_decompositions, Eigen::Vector3d(size_x, size_y, size_z),
00071 Eigen::Vector3d(0, 0, 0), use_signed_distance_field, resolution, collision_tolerance,
00072 max_propogation_distance);
00073 }
00074
00075 void checkSelfCollisionDistanceField(const collision_detection::CollisionRequest& req,
00076 collision_detection::CollisionResult& res,
00077 const robot_state::RobotState& state) const;
00078
00079 void checkSelfCollisionDistanceField(const collision_detection::CollisionRequest& req,
00080 collision_detection::CollisionResult& res, const robot_state::RobotState& state,
00081 boost::shared_ptr<GroupStateRepresentation>& gsr) const;
00082
00083 void checkSelfCollisionDistanceField(const collision_detection::CollisionRequest& req,
00084 collision_detection::CollisionResult& res, const robot_state::RobotState& state,
00085 const collision_detection::AllowedCollisionMatrix& acm) const;
00086
00087 void checkSelfCollisionDistanceField(const collision_detection::CollisionRequest& req,
00088 collision_detection::CollisionResult& res, const robot_state::RobotState& state,
00089 const collision_detection::AllowedCollisionMatrix& acm,
00090 boost::shared_ptr<GroupStateRepresentation>& gsr) const;
00091 const boost::shared_ptr<const collision_detection::CollisionRobotDistanceField> getCollisionRobotDistanceField() const
00092 {
00093 return crobot_distance_;
00094 }
00095
00096 protected:
00097 boost::shared_ptr<collision_detection::CollisionRobotDistanceField> crobot_distance_;
00098 };
00099 }
00100
00101 #endif